>
Home5G NRMAC — Medium Access ControlChannel Mapping
🧩 MAC — Medium Access ControlBeginner

Logical, Transport & Physical Channels in 5G NR

The three channel types and how logical channels map to transport and physical channels.

📚 3GPP-basedTS 38.321TS 38.300

The three-layer channel model is not taxonomy for its own sake. Each layer exists because a different part of the system needs to make a decision, and each layer hides from the layer below exactly the information that layer must not depend on.

Contents
  1. 01Why Three Layers of Channels
  2. 02The Complete Mapping, Downlink and Uplink
  3. 03Logical Channels, One by One
  4. 04Which Messages Ride Which Logical Channel
  5. 05LCID, eLCID, and the Subheader on the Wire
  6. 06Transport Channels and Their Properties
  7. 07Transport Blocks, CRC, and Channel Coding
  8. 08Physical Channels and Physical Signals
  9. 09RNTIs: Who Addresses What
  10. 10DCI: Formats and Content
  11. 11UCI and the PUCCH Formats
  12. 12Sidelink Channel Mapping
  13. 13Multiplexing Rules: What Can Share a Transport Block
  14. 14End-to-End Traces: Six Messages Down the Stack
  15. 15Failure Modes and What Each One Means
  16. 16Illustrative Message Traces
  17. 17Configuration Reference (ASN.1 and Ranges)
  18. 18Release Deltas: Rel-15 to Rel-18
  19. 19Reading Channel Mapping in Logs: A Checklist
  20. 20Glossary
  21. 21References

1. Why Three Layers of Channels

The three-layer channel model is not taxonomy for its own sake. Each layer exists because a different part of the system needs to make a decision, and each layer hides from the layer below exactly the information that layer must not depend on.

LayerAnswers the questionLives atWhat it deliberately hides
Logical channelWhat kind of information is this? Control or traffic, broadcast or dedicated, which bearerThe RLC / MAC boundary — one logical channel per RLC entityNothing yet. This is where the type is still visible, and it is the last layer at which it is
Transport channelHow should the radio treat it? HARQ or not, scheduled or fixed, which coding, what transport block structureThe MAC / PHY boundaryWhich logical channel the bytes came from. DL-SCH cannot tell system information from a video frame, and does not need to
Physical channelWhere on the air does it go? Which resource elements, which modulation, which antenna portsOver the air, on the resource gridEverything above the transport block. PDSCH sees a bit sequence with a size and a code rate

Table 1. The separation is what makes NR's flexibility affordable: a new logical channel needs no physical-layer change, and a new numerology needs no change to the logical channel model.

The consequence worth remembering is that the mapping is many-to-one going down and ambiguous coming up. Five downlink logical channels collapse onto three transport channels and then onto two physical channels. Recovering the logical channel from a received transport block is possible only because MAC put a subheader in front of every SDU — and for broadcast and paging, not even that: those use a transparent MAC PDU with no subheader at all, and the receiver knows what it is holding purely from the RNTI that addressed the PDCCH.

💡
Key Point

There is a fourth category that the three-layer model does not cover at all, and it causes more log confusion than the model itself: physical layer control. DCI on PDCCH and UCI on PUCCH originate in the physical layer, carry nothing from above, and therefore have no logical channel and no transport channel. A HARQ-ACK will never appear in a MAC PDU. If you are looking for the logical channel a scheduling grant rode on, there is not one.

2. The Complete Mapping, Downlink and Uplink

Downlink Channel Mapping, CompleteDownlink Channel Mapping, CompleteTS 38.300 cl. 6.2. Logical channels sit at the RLC/MAC boundary, transport channels at the MAC/PHY boundaryLogical channelsBCCHMIB, SIB1, SI msgsPCCHPagingCCCHSRB0DCCHSRB1/2/3/4DTCHDRBs, user dataTransport channelsBCHfixed formatPCHDRX-awareDL-SCHHARQ, dynamic scheduling, link adaptation, LDPCPhysical channelsPBCHPolar, E = 864PDSCHLDPC; SI-RNTI / P-RNTI / RA-RNTI / C-RNTIPDCCHDCI onlySIB1 and other SIBCCH is the only logical channel with two transport channels: the MIB goes to BCH, everything else to DL-SCH.PDCCH is drawn with nothing above it because DCI is generated by the physical layer itself -- that is the practicaldifference between a physical channel that terminates a mapping chain and one that continues it.
Figure 1. Downlink. The two features worth noting are BCCH's split — MIB to BCH, everything else to DL-SCH — and PDCCH hanging off the bottom row with nothing above it.
Uplink Channel Mapping, CompleteUplink Channel Mapping, CompleteTS 38.300 cl. 6.2 -- the uplink is simpler because there is nothing to broadcast and nothing to pageLogical channelsCCCHSRB0, 48 or 64 bitsDCCHSRB1/2/3/4DTCHDRBs, user dataTransport channelsUL-SCHHARQ, dynamic grants and configured grants, LDPCRACHno transport blockPhysical channelsPUCCHUCI onlyPUSCHLDPC; UL-SCH, and UCI when multiplexedPRACHZadoff-Chu preambleRACH is a transport channel with no transport block, no HARQ and no MAC PDU; it exists in the model only so that thepreamble has somewhere to sit. UCI can ride on PUSCH as well as PUCCH, which is why the PUSCH box has two sourcesof content and PUCCH has none above it.
Figure 2. Uplink. Three logical channels, two transport channels, three physical channels. RACH is a transport channel that carries no transport block, and PUCCH is a physical channel with no transport channel.

The asymmetry between the two pictures is entirely explained by who is talking to whom. Downlink has to address an audience it cannot see — hence BCCH and PCCH, hence broadcast transport channels, hence the transparent MAC PDU. Uplink always has exactly one sender and one receiver, both of which already know each other, so the whole broadcast branch disappears.

3. Logical Channels, One by One

ChannelFull nameDirectionCarriesRLC mode
BCCH
Broadcast Control ChannelDL onlySystem information: the MIB (via BCH) and SIB1 plus all other SI messages (via DL-SCH). Cell-wide, unacknowledged, unaddressedTM
PCCH
Paging Control ChannelDL onlyPaging messages, and system-information change notification for UEs in RRC_IDLE and RRC_INACTIVETM
CCCH
Common Control ChannelDL and ULRRC messages exchanged before the UE has a dedicated identity — SRB0. Two UL sizes exist, 48 bits and 64 bits, with different LCIDsTM
DCCH
Dedicated Control ChannelDL and ULRRC and NAS signalling for an identified UE — SRB1, SRB2, SRB3, and SRB4 from Rel-17AM
DTCH
Dedicated Traffic ChannelDL and ULUser-plane data. One DTCH per DRB, so a UE with three DRBs has three DTCHs in each directionAM or UM

Table 2. The five Uu logical channels. RLC transparent mode means no RLC header at all — which is why a broadcast SDU crosses the whole stack with almost no overhead.

Rel-17 adds two more downlink logical channels for multicast/broadcast services — MCCH for the multicast control information and MTCH for the multicast traffic itself — both mapped to DL-SCH and addressed by G-RNTI rather than by a UE's own C-RNTI. They are the first downlink logical channels that are neither cell-wide broadcast nor single-UE dedicated. Everything else below applies to the five Rel-15 channels.

The RLC mode column carries more weight than it looks. TM adds no RLC header, provides no segmentation and no retransmission — appropriate for something the network broadcasts repeatedly and never expects an acknowledgement for. AM adds a two- or four-octet header with a sequence number, does ARQ, and is what makes SRB1 reliable enough to carry a reconfiguration. UM adds a header and does segmentation and reassembly but no retransmission, which is what a voice bearer wants. See the companion 07 MAC PDU and Control Elements document for the header formats themselves.

📘
Spec Detail

CCCH is transparent-mode in both directions, which has a direct consequence for random access: an uplink CCCH SDU cannot be segmented, so RRCSetupRequest has to fit whole into the MSG3 grant. That is why the message is exactly 48 bits and why RRCResumeRequest1 — which needs 64 bits for the longer I-RNTI — got its own logical channel size and its own LCID rather than being segmented. See the companion 03 Random Access document.

4. Which Messages Ride Which Logical Channel

This is the table most often wanted and least often written down: given a message name in a log, which logical channel was it on?

Logical channelSRB / DRBRRC and NAS messages that ride itNotes
BCCH → BCH--
MIB
The only thing on BCH. 24 bits of RRC, and nothing else ever
BCCH → DL-SCH--SIB1; SystemInformation carrying SIB2 through SIB21 and beyond, including posSIB positioning blocksBCCH-DL-SCH-Message is the ASN.1 container. See the companion 17 System Information document
PCCH
--Paging — a list of up to 32 PagingRecord entriesAlso used for SI change notification and, from Rel-16, ETWS/CMAS indication via the Short Message in DCI
CCCH (UL, 48 bits)SRB0RRCSetupRequest, RRCResumeRequest, RRCReestablishmentRequest, RRCSystemInfoRequestLCID 52
CCCH (UL, 64 bits)SRB0
RRCResumeRequest1
LCID 0. Needed because the full I-RNTI does not fit in 48 bits
CCCH (DL)SRB0RRCSetup, RRCRejectLCID 0. Note that RRCReestablishment and RRCResume are not here — they go on DCCH/SRB1
DCCH
SRB1RRCReconfiguration / Complete, RRCSetupComplete, RRCReestablishment / Complete, RRCResume / Complete, RRCRelease, SecurityModeCommand / Complete, UECapabilityEnquiry / Information, MeasurementReport, ULInformationTransfer / DLInformationTransfer, MobilityFromNRCommand, UEAssistanceInformationThe workhorse. All NAS before security is established, and all RRC after
DCCH
SRB2ULInformationTransfer / DLInformationTransfer only — i.e. NAS transportLower priority than SRB1, and only established after security. Keeps bulk NAS from delaying RRC
DCCH
SRB3RRCReconfiguration and friends, direct to the secondary nodeNR-DC only. See the companion 13 RRC Overview document
DCCH
SRB4Application-layer measurement reports (MeasurementReportAppLayer)Rel-17
DTCH
DRB 1..32None — no RRC or NAS message ever rides DTCHIP, Ethernet or unstructured PDU-session data, through SDAP and PDCP

Table 3. Message-to-logical-channel mapping. The two entries worth memorising are the CCCH size split and the fact that RRCReestablishment is on SRB1, not SRB0.

⚠️
Common Pitfall

A very common misreading: seeing RRCReestablishmentRequest on CCCH and assuming the response is also on CCCH. It is not — RRCReestablishment is sent on SRB1/DCCH, which is possible because the target cell retrieves the UE context and can re-establish SRB1 before replying. If you are looking for a DL CCCH message during re-establishment you will not find one, and its absence is not a fault.

5. LCID, eLCID, and the Subheader on the Wire

A logical channel becomes concrete at exactly one place: the 6-bit LCID field in the MAC subheader. Everything above it is naming; everything below it is bits. Six bits gives 64 codepoints, and Rel-15 spent nearly all of them, which is why Rel-16 had to add an extension mechanism.

MAC Subheader: the Four Variants, Bit by BitMAC Subheader: the Four Variants, Bit by BitTS 38.321 cl. 6.1.2. Rows are numbered sequentially for this figure; each variant restarts at its own octet 1bit76543210Oct 1RF=0LCID = 4 -> variant 1: R/F/LCID/L, 8-bit LOct 2L = 58 (MAC SDU length in bytes, 0..255)Oct 3RF=1LCID = 4 -> variant 2: R/F/LCID/L, 16-bit LOct 4L, most-significant 8 bitsOct 5L, least-significant 8 bits (0..65535)Oct 6RRLCID = 61 -> variant 3: R/LCID, no L fieldOct 7RF=0LCID = 34 -> variant 4: one-octet eLCID followsOct 8eLCID (value v -> codepoint 64 + v, i.e. 64..319)Oct 9L (present only if the CE is variable-size)Variant 1 is the everyday case. Variant 2 appears when a single MAC SDU exceeds 255 bytes. Variant 3 is used forfixed-size MAC CEs, for padding, and for a UL CCCH SDU -- anything whose length is already known. Variant 4 is theRel-16 extended LCID space: LCID 34 introduces a one-octet eLCID, LCID 33 a two-octet one reaching codepoints 320..65855.
Figure 3. The four subheader shapes. Which one is used is not signalled — the receiver infers it from the LCID value, which is why an unrecognised LCID is unrecoverable rather than merely skippable.

5.1 DL-SCH LCID values

LCIDMeaningNotes
0CCCHDownlink common control — RRCSetup and RRCReject
1 – 32Identity of a logical channelDCCH and DTCH. SRB1 = 1, SRB2 = 2, SRB3 = 3 by fixed convention; DRBs get logicalChannelIdentity values assigned in RLC-BearerConfig, commonly from 4 upward
33Extended LCID field, two octetsRel-16. The two following octets give codepoints 320 .. 65855
34Extended LCID field, one octetRel-16. The following octet gives codepoints 64 .. 319
35 – 46Reserved in Rel-15; progressively assigned in Rel-16 and Rel-17New MAC CEs for positioning, multi-TRP and SCell handling landed here. Always check the release of the table you are decoding against
47Recommended bit rateNetwork suggests a bit rate to the UE
48SP ZP CSI-RS Resource Set Activation/Deactivation--
49PUCCH spatial relation Activation/Deactivation--
50SP SRS Activation/Deactivation--
51SP CSI reporting on PUCCH Activation/Deactivation--
52TCI State Indication for UE-specific PDCCHBeam for control
53TCI States Activation/Deactivation for UE-specific PDSCHBeam candidate set for data
54Aperiodic CSI Trigger State Subselection--
55SP CSI-RS / CSI-IM Resource Set Activation/Deactivation--
56Duplication Activation/DeactivationPDCP duplication control
57SCell Activation/Deactivation (four octets)For serving cell indices above 7
58SCell Activation/Deactivation (one octet)--
59Long DRX CommandFixed size, R/LCID subheader
60DRX CommandFixed size, R/LCID subheader
61Timing Advance CommandTwo octets: 2-bit TAG identity, 6-bit relative TA command
62UE Contention Resolution Identity48 bits echoing the MSG3 CCCH SDU. See the companion 03 Random Access document
63PaddingAlways last. R/LCID subheader, no length field

Table 4. DL-SCH LCID codepoints, TS 38.321 Table 6.2.1-1. Note the structure: SDUs at the bottom of the range, control elements at the top, extension escapes in the middle.

5.2 UL-SCH LCID values

LCIDMeaningNotes
0CCCH of size 64 bitsCarries RRCResumeRequest1. The CCCH1 logical channel in TS 38.331
1 – 32Identity of a logical channelDCCH and DTCH, as in the downlink
33Extended LCID field, two octetsRel-16
34Extended LCID field, one octetRel-16
35 – 51Reserved in Rel-15; progressively assigned in Rel-16 and Rel-17Beam failure recovery, LBT failure, pre-emptive BSR, sidelink BSR and timing-advance reporting CEs occupy part of this range depending on release
52CCCH of size 48 bitsThe ordinary RRCSetupRequest / RRCResumeRequest / RRCReestablishmentRequest / RRCSystemInfoRequest path
53Recommended bit rate queryUE asks for a bit rate
54Multiple Entry PHR (four octets)Power headroom for many carriers. See the companion 10 BSR, PHR, SR document
55Configured Grant ConfirmationConfirms activation of a Type 2 configured grant
56Multiple Entry PHR (one octet)--
57Single Entry PHRTwo octets, one carrier
58C-RNTITwo octets. The implicit contention-resolution mechanism for a UE that already has a C-RNTI
59Short Truncated BSROne octet
60Long Truncated BSRVariable size, needs an L field
61Short BSROne octet: 3-bit LCG ID + 5-bit buffer size index
62Long BSRVariable size: an 8-bit LCG bitmap then one buffer size octet per reported group
63PaddingAlways last

Table 5. UL-SCH LCID codepoints, TS 38.321 Table 6.2.1-2. The asymmetry at 0 and 52 exists purely so that the two CCCH sizes are distinguishable without a length field.

5.3 The extended LCID space

Rel-16 needed more control-element codepoints than the 6-bit field had left, and could not simply reuse reserved values because a receiver that does not recognise a fixed-size CE cannot find the next subheader — there is no length field to skip over. The solution was two escape codepoints that introduce a wider field.

🧮
Worked Calculation

How much room the escape actually bought.

Native 6-bit LCID: 64 codepoints (0 .. 63)

One-octet eLCID via LCID 34: 256 values → codepoints 64 .. 319

Two-octet eLCID via LCID 33: 65 536 values → codepoints 320 .. 65 855

Total addressable: 64 + 256 + 65 536 = 65 856 codepoints

The cost is one or two extra octets per subPDU that uses the extension, which is why the escape was reserved for control elements that are rare and never for logical channel identities. Logical channels are still capped at 32 per UE per direction.

In a decoded log the eLCID appears as a two-line construct: an LCID of 33 or 34, then a codepoint. Older decoders that predate Rel-16 print LCID 33 or 34 as reserved and then desynchronise on the rest of the PDU, which produces a spray of nonsense subheaders after the first extended CE. That signature — one plausible subPDU followed by garbage — is almost always a decoder version problem, not a radio problem.

6. Transport Channels and Their Properties

A transport channel is defined by how MAC offers data to the physical layer, and the property list is short because it is exactly the set of things the physical layer has to know.

Transport channelDirHARQSchedulingAudienceCoding
BCH
DLNoFixed — tied to the SSB burst setBroadcast, whole cellPolar, fixed transport block size
PCH
DLNoDynamic, but constrained to paging occasionsBroadcast, whole cell; content targets specific UEsLDPC, on PDSCH
DL-SCH
DLYesDynamic, plus semi-persistent schedulingBoth — broadcast SI and UE-dedicated dataLDPC
UL-SCH
ULYesDynamic grants, plus Type 1 and Type 2 configured grantsUE-specificLDPC
RACH
ULNoNot scheduled — contention-based occasionsUE-specific per attemptNone. There is no transport block; the preamble is the information
SL-BCH
SLNoFixed — tied to the S-SSBBroadcast to all nearby UEsPolar, fixed transport block size
SL-SCH
SLYes — blind repetition or feedback-basedMode 1 (gNB-scheduled) or mode 2 (UE-autonomous)Unicast, groupcast or broadcastLDPC

Table 6. Transport channel properties. DL-SCH is the only one that is HARQ-protected and dynamically scheduled and able to carry either broadcast or dedicated content — which is why almost everything ended up on it.

Two entries in that table are unusual enough to be worth stating plainly. RACH carries no transport block. It exists in the model so that the preamble has a place in the layered picture, but there is no MAC PDU, no CRC, no coding and no HARQ; the physical layer detects a sequence and reports an index and a timing offset. BCH has a fixed transport format, meaning the transport block size, the coding, the rate matching and the resource mapping are all constants rather than scheduler decisions — because a UE has to be able to decode it before it knows anything at all.

🔍
What You See In Logs

PCH is a broadcast transport channel whose content is UE-specific. Both halves of that sentence matter. Every UE in the paging occasion decodes the same PDSCH, then searches the Paging message's record list for its own identity. So a UE reporting that it decoded a paging message is not reporting that it was paged, and a Paging message containing 20 records was decoded by every idle UE monitoring that occasion. See the companion 19 Paging document.

7. Transport Blocks, CRC, and Channel Coding

The transport block is where the layered model becomes arithmetic. MAC hands the physical layer a bit sequence of a size the scheduler chose; the physical layer attaches a CRC, possibly segments, encodes, rate matches to the resource elements available, and modulates. All of that is specified in TS 38.212.

ChannelCodeCRCPayloadRate matching
DL-SCH / UL-SCH / PCHLDPC, base graph 1 or 224 bits (CRC24A) if the TB is longer than 3824 bits, otherwise 16 bits. A further 24 bits (CRC24B) per code block when segmentedThe transport block size chosen by the scheduler, up to about 1.2 Mbit per TB at the highest configurationsTo the resource elements the grant provides, after subtracting DM-RS and any overlapping signals
BCH
Polar, N = 51224 bits (CRC24C)Fixed: 24 bits of MIB plus 8 additional timing bits = 32 bits, so 56 bits into the encoderFixed to E = 864 bits — the 432 available PBCH data REs at QPSK
DCI on PDCCHPolar24 bits (CRC24C), with the RNTI XORed into the CRCFormat-dependent, roughly 20 to 140 bitsTo the CCEs of the selected aggregation level: 1, 2, 4, 8 or 16 CCEs, each 6 REGs of 12 REs
UCI on PUCCH or PUSCHRepetition / simplex / Reed-Muller block code up to 11 bits; Polar above 11None below 12 bits; 6 bits (CRC6) for 12–19 bits; 11 bits (CRC11) for 20 bits and above1 bit (an ACK) to over a thousand (a full CSI report)To the PUCCH resource, bounded by the configured maxCodeRate
SL-BCH / SL-SCHPolar / LDPC24 bitsFixed for SL-BCH; scheduler-chosen for SL-SCHAs for the Uu equivalents

Table 7. Coding per channel, TS 38.212 clause 5 onward. The pattern is consistent: LDPC where the block is large and HARQ exists, Polar where the block is small and there is no second chance.

The reason for the split is not aesthetic. LDPC has excellent performance on long blocks and supports incremental-redundancy HARQ naturally through its rate-matching circular buffer, which is exactly what a data channel needs. Polar performs better on very short blocks and has no HARQ requirement to satisfy, which is exactly what control needs. BCH sits at the extreme: 56 bits into 864, a code rate of about 0.065, because there is no retransmission, no feedback and no prior channel knowledge.

🧮
Worked Calculation

Segmenting a transport block. A DL-SCH transport block of A = 8 456 bits at a code rate above 0.67:

A = 8 456 > 3 824 → attach CRC24A → B = 8 456 + 24 = 8 480 bits

A > 3 824 and R > 0.67 → base graph 1 → K_cb = 8 448

B = 8 480 > K_cb, so segmentation is required:

C = ceil(B / (K_cb − 24)) = ceil(8 480 / 8 424) = 2 code blocks

B' = B + C × 24 = 8 480 + 48 = 8 528 bits

K_r = B' / C = 4 264 bits per code block, then zero-padded up to the nearest lifting-size-compatible K

Two code blocks means two independent CRC24B checks, which is what makes code-block-group HARQ retransmission possible: the receiver can report which code block failed instead of failing the whole transport block. See the companion 05 HARQ document.

🔍
What You See In Logs

A transport block that fails its CRC is discarded whole, and MAC never sees it — so a logical channel cannot be blamed for a decode failure. This is worth being firm about when reading logs: PDSCH CRC failures, RLC retransmissions and PDCP reordering timeouts are three different layers reporting one event, and the count of each will differ. Only the PDCP-level loss is a loss to the application.

8. Physical Channels and Physical Signals

TS 38.211 cl. 4.3.2 draws a distinction that the word "channel" tends to blur: a physical channel is a set of resource elements carrying information that originated in a higher layer, while a physical signal is a set of resource elements used by the physical layer that carries no higher-layer information at all. PSS, SSS, DM-RS, PT-RS, CSI-RS and SRS are signals. They are not channels, they have no logical or transport channel above them, and they never appear in any mapping diagram.

Where the Physical Channels and Signals Actually SitWhere the Physical Channels and Signals Actually SitOne 'S' slot of a DDDSU pattern: 10 downlink symbols, 2 flexible, 2 uplinkPDSCHPDCCH(DCI)PDSCHDM-RSPDSCHCSI-RSPDSCHDM-RSflexible(guard)SRSunusedPUCCH(UCI)0163244012345678910111213OFDM symbol index within the slotFrequency, in groups of 4 PRBsPhysical channelControl channel: DCI or UCIPhysical signalNot used in this slotA physical signal carries nothing from any transport channel: DM-RS, CSI-RS, PT-RS and SRS have no logical ortransport channel above them at all. That is the difference the resource grid makes visible.
Figure 4. One TDD 'S' slot with channels and signals side by side. The distinction is visible in the resource grid: a signal occupies resource elements that would otherwise carry a channel, which is why reference-signal density is a direct throughput cost.
Physical channelDirCarriesNotes
PBCH
DLBCH — i.e. the MIB plus 8 timing bitsFixed position inside the SS/PBCH block: 576 REs across symbols 1, 2 and 3. See the companion 02 Radio Frame Structure document
PDSCH
DLDL-SCH and PCH transport blocksDynamically scheduled, and can also carry a successRAR or a paging message. May carry one or two transport blocks per slot per UE
PDCCH
DLDCI — nothing from any higher layerTransmitted in a CORESET, found by blind decoding of candidates in a search space; CRC scrambled by an RNTI
PUSCH
ULUL-SCH transport blocks, and UCI when multiplexedDynamically granted or configured. Carries MSG3, and MSGA payload in 2-step RACH
PUCCH
ULUCI — nothing from any higher layerFive formats (§11). Can be pre-empted by a PUSCH in the same slot, in which case the UCI rides on the PUSCH instead
PRACH
ULA random access preamble sequenceNo transport block, no coding. The information is which sequence and when

Table 8. Physical channels. Only three of the six sit under a transport channel; the other three terminate their own chains.

Physical signalDirPurposeWhere it is configured
PSS / SSSDLTime and frequency synchronisation, and half of the physical cell identity each: N_ID_cell = 3 × N_ID(1) + N_ID(2)Not configurable. Fixed inside the SS/PBCH block
DM-RS
DL and ULCoherent demodulation of the channel it accompanies. Separate DM-RS exists for PDSCH, PUSCH, PDCCH and PBCHDMRS-DownlinkConfig / DMRS-UplinkConfig; PBCH DM-RS is fixed
PT-RS
DL and ULPhase-tracking against oscillator phase noise. Essentially an FR2 featurePTRS-DownlinkConfig / PTRS-UplinkConfig
CSI-RS
DLChannel state measurement, beam management, and interference measurement (CSI-IM). Also used for radio link monitoring and mobilityNZP-CSI-RS-Resource, CSI-IM-Resource, CSI-ResourceConfig
SRS
ULUplink channel sounding, for uplink scheduling, beam management and downlink reciprocity in TDDSRS-Config, SRS-Resource
TRS
DLTracking reference signal — a CSI-RS resource set configured for tracking rather than reportingA NZP-CSI-RS-ResourceSet with trs-Info present

Table 9. Physical signals. None of them has a transport channel, a MAC header, a CRC or a HARQ process — which is why a 'CSI-RS failure' is never a decode failure, only a measurement that came back wrong.

⚠️
Common Pitfall

Calling PSS and SSS "channels" is common and harmless in conversation and wrong in a specification. The practical consequence: there is no "SSS BLER", because there is nothing to decode — SSS is correlated against 336 hypotheses, and the outcome is a cell identity, not a bit sequence. If a tool reports an error rate for a physical signal, find out what it is actually measuring.

9. RNTIs: Who Addresses What

Because five downlink logical channels share two physical channels, the receiver needs something to tell it what it is about to decode. That something is the RNTI used to scramble the PDCCH CRC. The RNTI is therefore part of the channel mapping, not an addressing detail bolted on beside it — it is the only thing that distinguishes a PDSCH carrying SIB1 from a PDSCH carrying a video frame.

RNTIValueScrambles the CRC ofWhich identifies content as
SI-RNTI
0xFFFFA PDCCH scheduling a PDSCHBCCH → DL-SCH: SIB1 or an SI message, in a transparent MAC PDU
P-RNTI
0xFFFEA PDCCH scheduling a PDSCH, or a DCI 1_0 with no PDSCH at allPCCH → PCH: a Paging message; or, with no PDSCH, a Short Message carried in the DCI itself
RA-RNTI
0x0001–0xFFEF, computed from the PRACH occasionA PDCCH scheduling a PDSCHA RAR MAC PDU (MSG2). Not a logical channel at all — the RAR is built by MAC directly
MSGB-RNTI
0x0001–0xFFEF, RA-RNTI + 17920A PDCCH scheduling a PDSCHA MSGB MAC PDU (2-step RACH)
TC-RNTI
0x0001–0xFFEF, assigned in the RARA PDCCH scheduling a PUSCH or a PDSCHMSG3 retransmission grants, and MSG4 — CCCH → DL-SCH plus a UE Contention Resolution Identity CE
C-RNTI
0x0001–0xFFEFA PDCCH scheduling a PDSCH or a PUSCHDCCH and DTCH → DL-SCH / UL-SCH: everything dedicated
MCS-C-RNTI
0x0001–0xFFEFA PDCCH scheduling a PDSCH or a PUSCHThe same content as C-RNTI, but selects the alternative MCS table. Same channels, different modulation interpretation
CS-RNTI
0x0001–0xFFEFA PDCCH activating, reactivating or releasing configured schedulingSPS in the downlink, configured grant Type 2 in the uplink
SFI-RNTI
0x0001–0xFFEFA PDCCH carrying DCI format 2_0Slot format indication. No transport channel and no PDSCH
INT-RNTI
0x0001–0xFFEFA PDCCH carrying DCI format 2_1Pre-emption indication: resources the UE should assume carried nothing for it
TPC-PUSCH-RNTI / TPC-PUCCH-RNTI0x0001–0xFFEFA PDCCH carrying DCI format 2_2Group power control commands
TPC-SRS-RNTI
0x0001–0xFFEFA PDCCH carrying DCI format 2_3Group SRS power control commands
CI-RNTI
0x0001–0xFFEFA PDCCH carrying DCI format 2_4Rel-16 uplink cancellation: stop transmitting in these resources
PS-RNTI
0x0001–0xFFEFA PDCCH carrying DCI format 2_6Rel-16 power saving indication outside DRX Active Time
SP-CSI-RNTI
0x0001–0xFFEFA PDCCH activating semi-persistent CSI reporting on PUSCHA PUSCH that carries CSI and no UL-SCH data
G-RNTI / G-CS-RNTI0x0001–0xFFEFA PDCCH scheduling a group-common PDSCHRel-17 multicast/broadcast services: one PDSCH for many UEs
Reserved0x0000, 0xFFF0–0xFFFD--Never used for addressing. A log showing one of these is a decode error

Table 10. RNTI to content mapping, TS 38.321 cl. 7.1. Everything except SI-RNTI and P-RNTI is assigned per UE or per group, so the same numeric value means different things in different cells.

💡
Key Point

The two fixed values are fixed for a reason: a UE must be able to receive system information and paging before it has any assigned identity, so SI-RNTI = 0xFFFF and P-RNTI = 0xFFFE are the same in every NR cell in the world. Everything else is allocated from 0x0001–0xFFEF, which is why C-RNTI 0x4C08 in one cell and 0x4C08 in the next cell are unrelated and why a C-RNTI in a log is meaningless without the cell.

⚠️
Common Pitfall

P-RNTI addressing a DCI 1_0 with no associated PDSCH is a real and easily-missed case. The Short Message field in that DCI carries systemInfoModification and ETWS/CMAS indication bits, so the network can announce an SI change without transmitting a paging message at all. A log showing a P-RNTI PDCCH and no PDSCH is not a scheduling error — check the Short Message indicator bit in the DCI. See the companion 17 System Information document.

10. DCI: Formats and Content

DCI is the content of PDCCH. It has no logical channel and no transport channel; it is generated by the physical layer of the gNB and consumed by the physical layer of the UE, and its only relationship to the mapping model is that it tells the UE which mapping to expect next.

FormatPurposeSearch spaceRNTINotes
0_0
Schedule one PUSCH — fallback formatCommon or UE-specificC-RNTI, TC-RNTI, MCS-C-RNTI, CS-RNTIDeliberately minimal so it works before dedicated configuration exists. Its size is derived from the initial UL BWP
0_1
Schedule one PUSCH — full-featuredUE-specific onlyC-RNTI, MCS-C-RNTI, CS-RNTI, SP-CSI-RNTIAdds BWP indicator, SRS resource indicator, precoding, CBG transmission information, multi-layer support
0_2
Schedule one PUSCH — configurable-size formatUE-specific onlyC-RNTI, MCS-C-RNTI, CS-RNTIRel-16. Field presence and widths are configurable so the DCI can be made small for URLLC reliability
1_0
Schedule one PDSCH — fallback formatCommon or UE-specificC-RNTI, TC-RNTI, MCS-C-RNTI, CS-RNTI, SI-RNTI, P-RNTI, RA-RNTI, MSGB-RNTIThe one format that carries broadcast content. Field interpretation differs by RNTI — the SI-RNTI variant has no HARQ process number, the P-RNTI variant has a Short Message field
1_1
Schedule one PDSCH — full-featuredUE-specific onlyC-RNTI, MCS-C-RNTI, CS-RNTIAdds BWP indicator, antenna ports, TCI, CBG fields, two transport blocks
1_2
Schedule one PDSCH — configurable-size formatUE-specific onlyC-RNTI, MCS-C-RNTI, CS-RNTIRel-16, URLLC
2_0
Slot format indication, and from Rel-16 available RB sets, channel occupancy duration and search space group switchingCommonSFI-RNTIGroup-common. See §14 of the companion 02 Radio Frame Structure document
2_1
Pre-emption indicationCommonINT-RNTITells a UE that PRBs and symbols it was scheduled in carried nothing for it
2_2
TPC commands for PUCCH and PUSCHCommonTPC-PUCCH-RNTI, TPC-PUSCH-RNTIGroup power control
2_3
TPC commands for SRSCommonTPC-SRS-RNTI--
2_4
Uplink cancellation indicationCommonCI-RNTIRel-16. Clears uplink resources for a higher-priority UE
2_5
Availability of soft resourcesCommonAI-RNTIRel-16, IAB nodes
2_6
Power saving information outside DRX Active TimeCommonPS-RNTIRel-16. The wake-up / go-to-sleep indication
2_7
Paging early indicationCommonPEI-RNTIRel-17. Lets a UE skip the paging occasion entirely
3_0 / 3_1Schedule NR sidelink / LTE sidelinkUE-specificSL-RNTI, SLCS-RNTIMode 1 sidelink resource allocation

Table 11. DCI formats, TS 38.212 cl. 7.3.1. Only 0_0/0_1/0_2 and 1_0/1_1/1_2 schedule a transport channel; every 2_x format is pure physical-layer control with no data underneath.

10.1 What is actually in a scheduling DCI

For DCI format 1_0 with a C-RNTI, the fields in order are: format identifier (1 bit), frequency-domain resource assignment, time-domain resource assignment (4 bits, an index into a configured table of start-symbol and length pairs), VRB-to-PRB mapping (1 bit), modulation and coding scheme (5 bits), new data indicator (1 bit), redundancy version (2 bits), HARQ process number (4 bits), downlink assignment index (2 bits), TPC command for the scheduled PUCCH (2 bits), PUCCH resource indicator (3 bits) and PDSCH-to-HARQ-feedback timing indicator (3 bits). That is a complete description of one PDSCH and its acknowledgement.

📘
Spec Detail

The four-bit HARQ process number is why Rel-15 has 16 downlink HARQ processes, and the two-bit redundancy version is why there are four RVs. Neither number is a design choice made in isolation — both are DCI field widths, and both were revisited in Rel-17 for non-terrestrial networks, where a round trip can exceed the time 16 processes can cover. See the companion 05 HARQ document.

DCI 1_0 addressed to SI-RNTI uses the same format with a different field interpretation: there is no HARQ process number, no NDI and no DAI, because system information is not HARQ-protected and not UE-acknowledged; the freed bits become reserved. This is why a decoder that applies the C-RNTI field layout to an SI-RNTI DCI produces a plausible-looking but wrong PRB allocation — a failure mode worth recognising, because the symptom is a PDSCH decode failure with perfect PDCCH statistics.

11. UCI and the PUCCH Formats

UCI is the uplink counterpart: physical-layer control, no logical channel, no transport channel, no MAC PDU. It carries four kinds of information:

  • HARQ-ACK — acknowledgement of received PDSCH transport blocks or code block groups. The number of bits is the codebook size, which is semi-statically or dynamically determined and can be anything from 1 to several hundred with carrier aggregation.
  • Scheduling Request (SR) — a single bit per configured SR configuration, meaning "I have uplink data and no grant". See the companion 10 BSR, PHR, SR document.
  • CSI — channel state reports, split into Part 1 (fixed size: rank indicator, CQI, and the information needed to size Part 2) and Part 2 (variable size, dependent on Part 1).
  • Link Recovery Request — Rel-16, for beam failure recovery on a secondary cell where RACH is not available. See the companion 12 Beam Failure Recovery document.
FormatUCI payloadSymbolsPRBsHow it works
0
1 or 2 bits1 or 21Sequence selection — the UE transmits one of several cyclic shifts of a base sequence and the shift is the payload. No DM-RS, because there is nothing to demodulate coherently
1
1 or 2 bits4 to 141BPSK or QPSK with DM-RS, spread by a time-domain orthogonal cover code so several UEs share the same PRB. The long, low-rate choice for cell-edge acknowledgements
2
More than 2 bits1 or 21 to 16QPSK with DM-RS, no spreading. The short high-capacity format — used when a large HARQ codebook or a CSI report has to fit in a couple of symbols
3
More than 2 bits4 to 141 to 6, 8, 9, 10, 12, 15 or 16DFT-spread OFDM with π/2-BPSK or QPSK. The long high-capacity format, and the only one that can carry a really large CSI report from the cell edge
4
More than 2 bits4 to 141Like format 3 but with pre-DFT orthogonal spreading of factor 2 or 4, so two or four UEs share one PRB at the cost of payload

Table 12. PUCCH formats, TS 38.211 cl. 6.3.2 and TS 38.213 cl. 9.2. Formats 0 and 2 are the short formats, 1, 3 and 4 the long ones; the payload split at 2 bits is the dividing line between sequence-based and coded transmission.

🧮
Worked Calculation

Choosing a format is not a free decision. The UE picks from the resources the network configured, and the network must configure at least one that fits the largest UCI payload the UE could ever have to send. Under 3 bits: format 0 or 1. Over 2 bits: format 2, 3 or 4, subject to maxCodeRate.

A 20-bit HARQ codebook with maxCodeRate = 0.25 needs at least 20 / 0.25 = 80 coded bits, i.e. 40 QPSK symbols. Format 2 over 2 symbols gives 8 REs per PRB for data (4 of the 12 REs per symbol are DM-RS), so ceil(40 / 8) = 5 PRBs. If the configured format 2 resource is 2 PRBs, the UCI cannot be transmitted and the UE drops the lowest-priority part of it — usually CSI, silently.

⚠️
Common Pitfall

UCI dropping is the single most under-diagnosed uplink problem, because nothing reports it. The UE follows the priority rules TS 38.213 cl. 9.2.5 and discards CSI, then SR, before it discards HARQ-ACK; the network simply receives less than it asked for. Symptom: CSI reports arriving at a lower rate than configured, with no errors anywhere. Check the PUCCH resource size against the worst-case payload before suspecting the reporting configuration.

12. Sidelink Channel Mapping

NR sidelink (PC5, used for V2X and for public-safety direct communication) reuses the three-layer model wholesale, which makes it easy to read once you know the Uu version. The differences are all consequences of there being no base station in the path.

Sidelink Channel Mapping (NR V2X, PC5 Interface)Sidelink Channel Mapping (NR V2X, PC5 Interface)TS 38.300 cl. 16 / TS 38.321 cl. 4.4 -- the same three layers, with two extra physical channelsLogical channelsSBCCHMIB-SidelinkSCCHPC5-RRC and PC5-SSTCHsidelink user dataTransport channelsSL-BCHfixed formatSL-SCHHARQ; mode 1 or mode 2 resource allocationPhysical channelsPSBCHinside the S-SSBPSSCHSL-SCH + 2nd-stage SCIPSCCH1st-stage SCIPSFCHHARQ feedbackNote what does not map: PSCCH carries the first-stage SCI and PSFCH carries HARQ feedback, so like PDCCH andPUCCH they sit under no transport channel. SBCCH maps to SL-BCH and PSBCH, mirroring BCCH/BCH/PBCH exactly --the sidelink broadcast path is the downlink broadcast path with an S prefix.
Figure 5. Sidelink. Note that SBCCH follows the broadcast path — SL-BCH and PSBCH — exactly as BCCH follows BCH and PBCH, and that PSCCH and PSFCH terminate their own chains just as PDCCH and PUCCH do.
ChannelLayerCarries
SBCCH
LogicalMasterInformationBlockSidelink — sidelink synchronisation and resource-pool information, so a UE with no network coverage can still find a timing reference
SCCH
LogicalPC5-RRC (RRCReconfigurationSidelink and its response) and PC5-S (direct link establishment, keep-alive, release)
STCH
LogicalSidelink user data, through SDAP and PDCP as on Uu
SL-BCH
TransportSBCCH with a fixed transport format, Polar-coded, no HARQ
SL-SCH
TransportSCCH and STCH. HARQ by blind repetition, or with PSFCH feedback where configured
PSBCH
PhysicalSL-BCH, inside the S-SSB alongside S-PSS and S-SSS
PSSCH
PhysicalSL-SCH, plus the second-stage SCI which is multiplexed into the PSSCH resource
PSCCH
PhysicalThe first-stage SCI only. No transport channel — the sidelink equivalent of PDCCH
PSFCH
PhysicalHARQ feedback only. No transport channel — the sidelink equivalent of PUCCH

Table 13. Sidelink channels. The two-stage SCI is the notable structural difference from Uu: the first stage is on its own physical channel so that any nearby UE can read it for sensing, while the second stage is inside the data resource and only the intended receiver needs it.

📘
Spec Detail

The two-stage SCI exists because of mode 2, where UEs allocate their own resources by sensing what others have reserved. The first-stage SCI on PSCCH carries the resource reservation and priority in the clear, so every UE in range can build a picture of occupancy without decoding anyone's data. That is a genuinely different design goal from PDCCH, which is addressed to one UE and deliberately hard for others to read.

13. Multiplexing Rules: What Can Share a Transport Block

The mapping diagrams say what may map where. The multiplexing rules say what may travel together, and they are what a decoder actually relies on.

MAC demultiplexing decision flowFrom a Transport Block to a Delivered SDU: MAC DemultiplexingTS 38.321 cl. 6.1.2 and 6.2.1 -- the LCID value alone decides whether the payload ever leaves MACTransport block delivered to MAC(CRC passed, HARQ complete)Read the next MAC subheaderLCID = 33 or 34?yesRead eLCID octet(s):codepoint 64.. or 320..noLCID or codepointin 1..32?yesMAC SDU -> the RLC entityfor that logical channelRLC reassembly -> PDCPdeciphering -> SDAP -> QoS flownoLCID = 63?yesPadding -- discardnoMAC control element --consumed inside MACRepeat for the next subPDU until the transport block is exhaustedThere is no length field for a fixed-size MAC CE, so a receiver can only find the next subheader if it recognises the LCID.An unrecognised fixed-size CE codepoint therefore destroys the rest of the PDU, not just that one element -- which is whyRel-16 added the eLCID space rather than reusing reserved values.
Figure 6. Receive-side demultiplexing. The loop is only walkable because every subheader either carries a length or has an LCID whose fixed size the receiver knows.
RuleApplies toWhyConsequence in a log
One MAC PDU per transport block, one transport block per HARQ processDL-SCH, UL-SCHHARQ operates on transport blocks; a partially-delivered MAC PDU has no meaningA HARQ retransmission repeats the whole PDU, so every SDU in it is delayed by the retransmission, not just the one that mattered
A MAC PDU may mix SDUs from several logical channels, plus several MAC CEs, plus paddingDL-SCH, UL-SCHIt is the only way to fill a grant efficientlyOne PDSCH can carry DCCH signalling and DTCH data in the same transport block. Do not assume a grant belonged to one bearer
Downlink order: MAC CEs first, then MAC SDUs, then paddingDL-SCHControl elements are fixed or small; putting them first lets the UE act on them before parsing the bulkA Timing Advance Command CE will always be at the front of the PDU that carries it
Uplink order: MAC SDUs first, then MAC CEs, then paddingUL-SCHThe reverse, because the UE builds the SDU content against the grant and then appends whatever reports fitA BSR appears after the data it reports on, which is exactly what makes a padding BSR possible
BCCH and PCCH use a transparent MAC PDU: the SDU alone, no subheaderBCCH → DL-SCH, PCCH → PCH, BCCH → BCHThere is nothing to multiplex — the whole PDSCH is one broadcast message, and the RNTI already said what it isThere is no LCID for BCCH or PCCH anywhere in the LCID tables. Do not go looking for one
Broadcast and dedicated content never share a PDSCHAll downlinkThe RNTI addresses the whole physical channel instance, and one PDSCH has one RNTIA UE that is receiving SIB1 in a given slot is not simultaneously receiving its own data in that slot on the same PDSCH
Which logical channel gets how much of an uplink grant is decided by logical channel prioritisationUL-SCHBearers have different priorities and prioritised bit ratesA high-priority bearer starving a low-priority one is correct behaviour. See the companion 09 Logical Channel Prioritisation document

Table 14. Multiplexing rules and what each one implies when you are staring at a decoded PDU. The placement rules are the ones a decoder depends on.

One Downlink MAC PDU, Every Header ExposedOne Downlink MAC PDU, Every Header ExposedA 64-octet transport block: one fixed-size MAC CE, one DTCH SDU, and paddingbit76543210Oct 1RRLCID = 61 Timing Advance Command CEOct 2TAG=0Timing Advance Command = 33Oct 3RF=0LCID = 4 DTCH, i.e. DRB 1Oct 4L = 58 bytes of MAC SDU followOct 5D/C=1P=0SI=00RLC SN 11..8Oct 6RLC SN 7..0 AM PDU, complete SDU, SN = 1204Oct 7D/C=1R R RPDCP SN 11..8Oct 8PDCP SN 7..0 Data PDU, 12-bit SN, SN = 872Oct 9RDI=0RQI=0QFI = 5Oct 10IP packet, 53 octets (ciphered by PDCP)Oct 11RRLCID = 63 padding, to the end of the TBReading upward from octet 5 is the whole point of the three-layer model: MAC only knows LCID 4 and a length of 58,RLC only knows a sequence number, PDCP only knows a ciphered payload, and SDAP is the first layer that knows thisis QoS flow 5.
Figure 7. A concrete PDU obeying those rules: control element first, SDU second, padding last, and four layers of header stacked inside the SDU.
🧮
Worked Calculation

The byte budget of that PDU. The MAC SDU is 58 bytes, and inside it:

RLC AM header (12-bit SN, complete SDU, no SO) ....... 2 bytes

PDCP Data PDU header (12-bit SN) .................... 2 bytes

SDAP header (DL: RDI, RQI, QFI) ..................... 1 byte

IP packet ........................................... 53 bytes

Plus the MAC subheader itself (2 bytes) and the 2-byte TA Command subPDU: 64 bytes of transport block for 53 bytes of payload, i.e. 17 % header overhead.

On a 1 400-byte packet the same headers cost 0.5 %. This is why small-packet traffic is expensive and why PDCP header compression and SDAP header suppression exist.

14. End-to-End Traces: Six Messages Down the Stack

Six Messages, Each Labelled With Its Own Channel ChainSix Messages, Each Labelled With Its Own Channel ChainBroadcast and pagingAccess and setupDataUEgNB-DUgNB-CUMIBBCCH -> BCH -> PBCH | no RNTI, no MAC header, no RLC header1SIB1BCCH -> DL-SCH -> PDSCH | SI-RNTI 0xFFFF, transparent MAC PDU2Paging messagePCCH -> PCH -> PDSCH | P-RNTI 0xFFFE, transparent MAC PDU3the UE now has something to sayRRCSetupRequestCCCH -> UL-SCH -> PUSCH | TC-RNTI 0x4C08, LCID 52, R/LCID subheader4F1AP INITIAL UL RRC MESSAGE TRANSFERthe CCCH SDU crosses F1-C unchangedF1AP DL RRC MESSAGE TRANSFERcarries the RRCSetup PDU back downRRCSetupCCCH -> DL-SCH -> PDSCH | TC-RNTI, LCID 0, alongside a Contention Resolution CE5RRCSetupCompleteDCCH (SRB1) -> UL-SCH -> PUSCH | C-RNTI 0x4C08, LCID 1user plane establishedDL data PDUDTCH (DRB1) -> DL-SCH -> PDSCH | C-RNTI, LCID 4, SDAP+PDCP+RLC headers inside6HARQ-ACKUCI -> PUCCH format 1 | no logical channel, no transport channel, no MAC PDU7Step 7 is the exception that defines the rule: HARQ-ACK is physical-layer control, so it has no logical or transport channeland never appears in a MAC PDU. Anything a MAC PDU can carry has all three layers; anything carried in DCI or UCI has only one.
Figure 8. Six messages with their chains written out. Nothing else in this document is as useful as being able to read a message name and immediately know its three channels and its RNTI.

The chains below are structural: the field names, sizes and encodings follow 3GPP, while the identity and sequence-number values are constructed for this document so that the six traces stay consistent with each other. They are not a capture from any deployed or lab network.

MessageLogicalTransportPhysicalRNTIHeaders added
MIB
BCCHBCHPBCHnoneNone at all. RRC → 24 bits → PHY adds 8 timing bits and a 24-bit CRC. No RLC header (TM), no MAC subheader (transparent MAC PDU)
SIB1
BCCHDL-SCHPDSCHSI-RNTI 0xFFFFNone above the transport block. RLC TM, transparent MAC PDU, then a 24-bit transport block CRC
Paging
PCCHPCHPDSCHP-RNTI 0xFFFENone above the transport block, same as SIB1
RRCSetupRequest
CCCH (48-bit)UL-SCHPUSCHTC-RNTI (from the RAR)1-byte R/LCID subheader with LCID 52, then the transport block CRC. No RLC header (TM), no PDCP, no SDAP
DL data PDUDTCH (DRB 1)DL-SCHPDSCHC-RNTISDAP 1 byte, PDCP 2 bytes, RLC AM 2 bytes, MAC subheader 2 bytes, then the transport block CRC
HARQ-ACK
nonenonePUCCHnone — implicit in the resourceNone. UCI is 1–2 bits and gets a sequence, not a header

Table 15. The summary table. The header column is the interesting one: overhead ranges from nothing at all to seven bytes, entirely determined by which logical channel was used.

14.1 MIB — the shortest chain in NR

MIB: BCCH -> BCH -> PBCH
RRC:   MIB  (24 bits of ASN.1, unaligned PER)
  |
  +--> logical channel  BCCH        -- RLC transparent mode: NO RLC header
       |
       +--> transport channel  BCH  -- transparent MAC PDU: NO MAC subheader
            |  PHY prepends 8 additional payload bits:
            |    SFN 4 LSBs (4), half-frame bit (1), k_SSB MSB or SSB idx (3)
            |  = 32-bit PBCH payload
            |  + 24-bit CRC (CRC24C)        -> 56 bits
            |  Polar encode, N = 512
            |  rate match to E = 864 bits   -> code rate ~ 0.065
            |  QPSK -> 432 REs
            +--> physical channel  PBCH     -- symbols 1,2,3 of the SSB

Total overhead above the physical layer: ZERO bytes.
Total UE prior knowledge required: the SSB position. Nothing else.

14.2 SIB1 — broadcast, but on the data channel

SIB1: BCCH -> DL-SCH -> PDSCH
RRC:   BCCH-DL-SCH-Message { message: c1: systemInformationBlockType1 }
  |    ~ 400 - 900 bytes of ASN.1 depending on configuration
  +--> logical channel  BCCH        -- RLC TM: NO RLC header, NO segmentation
       |
       +--> transport channel  DL-SCH
            |  transparent MAC PDU: NO MAC subheader, NO LCID
            |  A = TBS bits, A > 3824 -> CRC24A -> B = A + 24
            |  LDPC base graph 1 or 2 depending on A and R
            |  segmentation if B > K_cb
            +--> physical channel  PDSCH
                 scheduled by DCI 1_0, CRC scrambled by SI-RNTI 0xFFFF
                 in the Type0-PDCCH common search space of CORESET#0

-- Why SIB1 is not on BCH: BCH's transport format is FIXED at 32 payload
-- bits. SIB1 is two orders of magnitude larger and its size varies with
-- configuration, so it needs a scheduled, variable-size transport channel.

14.3 Paging — a broadcast channel carrying targeted content

Paging: PCCH -> PCH -> PDSCH, and the DCI-only variant
RRC:   PCCH-Message { message: c1: paging }
  |      pagingRecordList: up to 32 records, each with a ue-Identity
  +--> logical channel  PCCH        -- RLC TM
       |
       +--> transport channel  PCH  -- transparent MAC PDU
            |  no HARQ: an idle UE has no HARQ entity and cannot ACK
            +--> physical channel  PDSCH
                 scheduled by DCI 1_0, CRC scrambled by P-RNTI 0xFFFE
                 in the Type2-PDCCH common search space

-- The alternative path with no PDSCH at all:
     DCI 1_0 with P-RNTI, Short Message Indicator = 'short message only'
       Short Message (8 bits):
         bit 1  systemInfoModification
         bit 2  etwsAndCmasIndication
         bits 3-8  reserved / later releases
     -- no PCCH, no PCH, no transport block. The DCI IS the message.

14.4 RRCSetupRequest — the smallest real uplink message

RRCSetupRequest: CCCH -> UL-SCH -> PUSCH
RRC:   UL-CCCH-Message { message: c1: rrcSetupRequest }
  |      rrcSetupRequest
  |        ue-Identity        CHOICE { ng-5G-S-TMSI-Part1 | randomValue }  40 bits
  |        establishmentCause ENUMERATED, 16 values                         4 bits
  |        spare              BIT STRING (SIZE(1))                          1 bit
  |      + 3 bits of CHOICE encoding                    = 48 bits = 6 bytes
  |
  +--> logical channel  CCCH (48-bit variant)   -- RLC TM, no header
       |
       +--> transport channel  UL-SCH
            |  MAC subheader: R | R | LCID = 52     -- 1 byte, R/LCID form,
            |                                          no L field: fixed size
            |  MAC PDU = 1 + 6 = 7 bytes, padded to the TBS
            |  A <= 3824 -> 16-bit CRC
            +--> physical channel  PUSCH
                 granted by the UL grant inside the RAR, TC-RNTI 0x4C08

-- The first 48 bits of this CCCH SDU are what the gNB echoes back in the
-- UE Contention Resolution Identity MAC CE (DL LCID 62). That is why CCCH
-- must be exactly 48 bits and why it cannot be segmented.

14.5 A downlink data PDU — the full seven bytes of header

DL data: DTCH -> DL-SCH -> PDSCH
Application:  53-byte IP packet on QoS flow 5
  |
  +--> SDAP     + 1 byte  { RDI | RQI | QFI = 5 }            -> 54 bytes
       |            (SDAP header may be suppressed if configured)
       +--> PDCP + 2 bytes { D/C | R R R | SN(12) }          -> 56 bytes
            |       payload ciphered; MAC-I appended only if the DRB has
            |       integrity protection configured (+ 4 bytes)
            +--> RLC AM + 2 bytes { D/C | P | SI | SN(12) }  -> 58 bytes
                 |       SI = 00 -> complete SDU, no segment offset
                 +--> logical channel  DTCH, LCID 4
                      |
                      +--> transport channel  DL-SCH
                           |  MAC subheader R | F=0 | LCID=4 , L = 58
                           |  -> 2 + 58 = 60 bytes
                           |  plus a 2-byte TA Command subPDU at the front
                           |  plus padding subheader = 64-byte TB
                           +--> physical channel  PDSCH, C-RNTI 0x4C08

53 bytes of payload in a 64-byte transport block: 17 % overhead.

14.6 HARQ-ACK — the chain that does not exist

HARQ-ACK: UCI -> PUCCH
PHY (UE):  PDSCH transport block CRC check passes for HARQ process 6
  |
  +--> UCI: 1 bit of HARQ-ACK
       |    no logical channel      -- nothing came from RLC
       |    no transport channel    -- no transport block, no CRC
       |    no MAC PDU              -- MAC is not involved at all
       |
       |  PUCCH resource selected by the PUCCH resource indicator in the
       |  scheduling DCI; slot given by the PDSCH-to-HARQ feedback timing
       |  indicator (k1)
       +--> physical channel  PUCCH format 1
            1 PRB, 4-14 symbols, BPSK on the data symbols, DM-RS on the
            others, spread by a time-domain OCC

-- No RNTI is needed: the resource itself identifies the UE, because the
-- network told this UE and no other to use it.

15. Failure Modes and What Each One Means

FailureDetected byImmediate effectDiagnostic pointer
Unknown LCID in a received MAC PDUReceiving MACThe subPDU is discarded. If the LCID was a fixed-size CE the receiver cannot find the next subheader, so the rest of the PDU is lost tooA single plausible subPDU followed by nonsense is the signature. Almost always a decoder that predates the release of the CE, especially around the eLCID escapes (LCID 33 / 34)
Logical channel configured on one side onlyReceiving MAC — it has no RLC entity for that LCIDEvery SDU on that channel is dropped. RLC never sees it, so there are no RLC retransmissions and no PDCP gap reportsCompare logicalChannelIdentity in RLC-BearerConfig against the LCIDs actually appearing in PDUs. A bearer with traffic counters at the sender and zero at the receiver
RLC mode mismatch between the two endsRLCHeader misparse: an AM header read as UM, or a TM channel given a header it does not expectSymptom is SDU-level corruption with clean MAC and PHY statistics — the transport block decoded perfectly and the bytes are still wrong
Wrong RNTI assumed for a PDSCHThe UE, silentlyThe DCI descrambles (CRC passes by chance is rare, so usually the DCI is simply not found), or the DCI field layout is misappliedPerfect PDCCH detection statistics with failing PDSCH decodes. Check whether an SI-RNTI or P-RNTI DCI 1_0 is being parsed with the C-RNTI field layout (§10)
PUCCH resource too small for the UCI payloadNobody reports itThe UE drops the lowest-priority UCI — CSI first, then SR. HARQ-ACK survivesCSI reports arriving less often than configured, with no errors anywhere. Recompute the payload against maxCodeRate and the resource size (§11)
Transport block CRC failureReceiving PHYThe whole block is discarded; MAC never sees any of it. HARQ retransmission follows if the channel supports itDo not attribute this to a logical channel — the block was undecodable before any demultiplexing happened. Compare PHY BLER, RLC retransmission rate and PDCP loss separately (§7)
SIB1 or paging not decoded although the PDCCH was foundThe UENo system information, or a missed pageFor SI-RNTI and P-RNTI, DCI 1_0 has a different field layout from the C-RNTI case. Also check that the transparent MAC PDU is not being parsed for a subheader that is not there
MSG3 CCCH SDU longer than 48 bitsgNB MACContention resolution cannot work: the echoed identity will not matchOnly RRCResumeRequest1 legitimately exceeds 48 bits, and it uses the 64-bit CCCH with LCID 0. A 48-bit CCCH carrying a 64-bit message is a configuration or encoder fault
A MAC CE arriving for a feature the UE did not declareThe UE — it treats the LCID as unknownAs for an unknown LCID: the CE is discarded and, if fixed-size, so is the rest of the PDUCross-check against the UE capability exchange. See the companion 26 UE Capability document
Padding subheader not last, or padding LCID used mid-PDUReceiving MACParsing stops; the remainder is lostLCID 63 means 'everything from here to the end of the transport block is padding'. Any subheader after it is unreachable by definition

Table 16. Channel-mapping failures. The pattern to internalise is that almost all of them are silent on at least one side, because the mapping is agreed by configuration and never negotiated on the wire.

💡
Key Point

Two of these deserve extra weight because they are so often misattributed. Unknown LCID looks like corruption and is a version mismatch. UCI dropping looks like a reporting-configuration problem and is a resource-sizing problem. Neither has anything to do with the radio, and both cost days if you start from the radio.

16. Illustrative Message Traces

🔍
About These Traces

Illustrative trace. Field names and encodings follow 3GPP; the values are constructed for this document and are not a capture from any deployed or lab network.

16.1 Walking a downlink MAC PDU, octet by octet

[MAC] Downlink MAC PDU walk
14:22:08.1035  [MAC-DL] C-RNTI 0x4C08, HARQ process 6, TBS 512 bits = 64 bytes
               raw: 3D 21 04 3A 84 B4 83 68 05 45 00 00 35 ...  3F 00

  offset 0  : 0x3D = 0011 1101   R=0 R=0 LCID=61   Timing Advance Command
  offset 1  : 0x21 = 0010 0001   TAG=0  TA Command=33
              -> fixed-size CE, 1 octet payload, no L field
  offset 2  : 0x04 = 0000 0100   R=0 F=0 LCID=4    DTCH  (DRB 1)
  offset 3  : 0x3A = 58                             L = 58 bytes follow
  offset 4  : 0x84 = 1000 0100   D/C=1 P=0 SI=00 SN[11:8]=0100
  offset 5  : 0xB4                                 SN[7:0] -> RLC SN 1204
              -> RLC AM PDU, complete SDU, no poll requested
  offset 6  : 0x83 = 1000 0011   D/C=1 R=000 SN[11:8]=0011
  offset 7  : 0x68                                 SN[7:0] -> PDCP SN 872
  offset 8  : 0x05 = 0000 0101   RDI=0 RQI=0 QFI=5
  offset 9..61                                     53 bytes of IP
  offset 62 : 0x3F = 0011 1111   R=0 R=0 LCID=63   Padding
  offset 63 : 0x00                                 padding byte

  -- reconciles: 2 (CE) + 2 (subhdr) + 58 (SDU) + 1 (pad subhdr) + 1 = 64

Listing 1. The same PDU as the bitfield figure, decoded from the octets. Every layer's header is visible and the byte count reconciles exactly against the transport block size.

16.2 An uplink PDU: SDU first, control elements after

[MAC] Uplink MAC PDU with two logical channels
14:22:09.7150  [MAC-UL] C-RNTI 0x4C08, grant 24 PRB, TBS 1544 bits = 193 bytes

  subPDU 1   R=0 F=0 LCID=1   L=42     DCCH  (SRB1)
               RLC AM PDU, SN 88
                 PDCP Data PDU, 12-bit SN 512, integrity-protected
                   RRC: MeasurementReport
                     measId 1, servCellId 0, rsrpResult 68, rsrqResult 41
  subPDU 2   R=0 F=0 LCID=4   L=132    DTCH  (DRB 1)
               RLC AM PDU, SN 3311, SI=01 (first segment of a larger SDU)
  subPDU 3   R=0 R=0 LCID=61          Short BSR
               LCG ID=1  Buffer Size index=12   -> 1132 .. 1326 bytes
  subPDU 4   R=0 R=0 LCID=57          Single Entry PHR
               PH=41 (2.0 .. 3.0 dB)  P_CMAX index=23
  subPDU 5   R=0 R=0 LCID=63          Padding, 6 bytes

  -- note the ORDER: SDUs (subPDU 1,2) come before CEs (3,4) in the uplink.
  -- The BSR reports the buffer AFTER this PDU was built, which is what
  -- makes it useful to the scheduler and why it must come last.

Listing 2. An uplink PDU carrying two logical channels and two control elements. The placement order is the reverse of the downlink and is what makes a padding BSR meaningful.

16.3 The transparent case: SIB1 with no MAC header at all

[PHY/MAC/RRC] SIB1 reception
14:19:55.0200  [PHY-DL] PDCCH candidate, CORESET#0, aggregation level 8
               DCI format 1_0, CRC descrambled with SI-RNTI 0xFFFF -> match
                 frequencyDomainResourceAssignment ... 24 PRB from PRB 0
                 timeDomainResourceAssignment ........ row 2 (S=2, L=12)
                 vrb-to-PRB mapping .................. non-interleaved
                 modulationAndCodingScheme ........... 4
                 redundancyVersion ................... 0
                 systemInformationIndicator .......... sib1
                 reserved ............................ 15 bits
               -- no HARQ process number, no NDI, no DAI: SI is not
               -- HARQ-protected and not UE-acknowledged

14:19:55.0203  [MAC-DL] transport block 2 976 bits = 372 bytes
               transparent MAC PDU: the entire TB is one MAC SDU
               NO subheader, NO LCID, NO length field

14:19:55.0203  [RLC]    BCCH is transparent mode: SDU delivered unchanged
14:19:55.0204  [RRC-DL-BCCH] BCCH-DL-SCH-Message
                 message: c1: systemInformationBlockType1
                   cellSelectionInfo, servingCellConfigCommon,
                   si-SchedulingInfo, ue-TimersAndConstants, ...

-- A decoder that looks for a MAC subheader here will read the first two
-- bytes of ASN.1 as R/F/LCID/L and produce a confident, wrong answer.

Listing 3. Broadcast reception with no MAC or RLC header anywhere. The RNTI did all the work that a subheader would otherwise do.

16.4 A failure: an extended LCID an old decoder cannot follow

[MAC] eLCID misparse
15:08:41.3300  [MAC-DL] C-RNTI 0x4C08, TBS 328 bits = 41 bytes
               raw: 22 1C 3D 21 04 12 C4 ...

  offset 0 : 0x22 = 0010 0010   R=0 F=0 LCID=34
             -> Rel-16 one-octet eLCID escape
  offset 1 : 0x1C = 28                       eLCID 28 -> codepoint 64+28 = 92

  DECODER A (Rel-18 aware):
    codepoint 92 recognised, fixed size 2 octets, consumed
    offset 4 : 0x04  R=0 F=0 LCID=4  DTCH -> parses cleanly to the end

  DECODER B (Rel-15 tables only):
    offset 0 : LCID=34 -> 'Reserved' in the Rel-15 table
               no length field and no known size: the walk cannot resume
               (a decoder that assumes zero length carries on anyway:)
    offset 1 : 0x1C = 0001 1100  read as R=0 F=0 LCID=28
               -> 'logical channel 28', which is not configured for this UE
    offset 2 : 0x3D              read as L = 61 bytes of SDU
               61 claimed, 38 remaining in a 41-byte TB -> overrun
    result: 'malformed MAC PDU'. The real control element and the real
            DTCH SDU are both lost, and a logical channel that does not
            exist appears in the per-LCID statistics.

-- Both decoders report success. Only one of them is right. This is the
-- most dangerous class of channel-mapping fault because it is silent.

Listing 4. Two decoders, one PDU, two confident answers. An unrecognised fixed-size codepoint desynchronises everything after it, which is precisely why the eLCID escape exists rather than reusing reserved values.

🔍
What You See In Logs

Two things to take from that trace. First, traffic attributed to a logical channel identity that is not in the UE's RLC-BearerConfig list is never real — it is a desynchronised subheader walk, and the LCID it reports is just whatever byte happened to be there. Second, a rising "malformed MAC PDU" counter alongside normal PHY BLER points at the decoder, not the radio. Check the release of the LCID tables in use before anything else.

17. Configuration Reference (ASN.1 and Ranges)

Logical channels are configured one at a time, each as an RLC-BearerConfig that binds a logical channel identity to a radio bearer, an RLC configuration and a set of MAC parameters. There is no single "channel mapping" IE — the mapping is implicit in which bearer the logical channel serves.

RLC-BearerConfig ::= SEQUENCE {
    logicalChannelIdentity      LogicalChannelIdentity,   -- INTEGER (1..32)
    servedRadioBearer           CHOICE {
        srb-Identity                SRB-Identity,         -- INTEGER (0..3)
        drb-Identity                DRB-Identity          -- INTEGER (1..32)
    }                                                     OPTIONAL,
    reestablishRLC              ENUMERATED {true}         OPTIONAL,
    rlc-Config                  RLC-Config                OPTIONAL,
    mac-LogicalChannelConfig    LogicalChannelConfig      OPTIONAL,
    ...
}

RLC-Config ::= CHOICE {
    am SEQUENCE {
        ul-AM-RLC   UL-AM-RLC,       -- sn-FieldLength: size12 | size18
        dl-AM-RLC   DL-AM-RLC        -- t-Reassembly, t-StatusProhibit, ...
    },
    um-Bi-Directional  SEQUENCE { ul-UM-RLC, dl-UM-RLC },
    um-Uni-Directional-UL  SEQUENCE { ul-UM-RLC },
    um-Uni-Directional-DL  SEQUENCE { dl-UM-RLC },
    ...
}
-- note: there is no 'tm' branch. Transparent mode is used only for
-- BCCH, PCCH and CCCH, none of which is configured by RLC-BearerConfig.

LogicalChannelConfig ::= SEQUENCE {
    ul-SpecificParameters SEQUENCE {
        priority                    INTEGER (1..16),
        prioritisedBitRate          ENUMERATED {kBps0, kBps8, kBps16,
                                                ..., kBps65536, infinity},
        bucketSizeDuration          ENUMERATED {ms5, ms10, ms20, ms50,
                                                ms100, ms150, ms300,
                                                ms500, ms1000, ...},
        allowedServingCells         SEQUENCE OF ServCellIndex   OPTIONAL,
        allowedSCS-List             SEQUENCE OF SubcarrierSpacing OPTIONAL,
        maxPUSCH-Duration           ENUMERATED {ms0p02, ms0p04, ms0p0625,
                                                ms0p125, ms0p25, ms0p5,
                                                ...}           OPTIONAL,
        configuredGrantType1Allowed ENUMERATED {true}           OPTIONAL,
        logicalChannelGroup         INTEGER (0..maxLCG-ID)      OPTIONAL,
        schedulingRequestID         SchedulingRequestId         OPTIONAL,
        logicalChannelSR-Mask       BOOLEAN,
        logicalChannelSR-DelayTimerApplied  BOOLEAN,
        ...
    }                                                          OPTIONAL,
    ...
}
-- maxLCG-ID = 7, so eight logical channel groups for BSR reporting.

Listing 5. Abridged from TS 38.331. ... marks omitted enumeration members and extension markers. Note the absence of a transparent-mode branch in RLC-Config.

ParameterRange or valuesTypicalEffect on the mapping
logicalChannelIdentity
1 .. 321–3 for SRBs, 4 upward for DRBsIs the LCID on the wire. Must match at both ends or every SDU on the channel is dropped
srb-Identity
0 .. 3 (4 from Rel-17)0, 1, 2SRB0 is CCCH and is never configured — it always exists. SRB1/2/3 use DCCH with fixed LCIDs 1/2/3
drb-Identity
1 .. 321–4Identifies the bearer; the logical channel identity is separate and need not equal it
rlc-Config
am, um-Bi-Directional, um-Uni-Directional-UL/DLam for DCCH and default DRBsDetermines the RLC header size and whether ARQ exists. A mismatch corrupts SDUs with clean PHY statistics
sn-FieldLength
size12 or size18 (AM); size6 or size12 (UM)size12RLC header size, and the reordering window. Longer SNs cost a byte per PDU and tolerate more outstanding data
priority
1 .. 16 (1 is highest)1–5 for SRBs, 6–13 for DRBsWhich logical channel wins a contested uplink grant. See the companion 09 Logical Channel Prioritisation document
prioritisedBitRate
kBps0 .. kBps65536, or infinitykBps0 for most DRBs, infinity for SRBsThe guaranteed share of the grant before strict priority takes over
logicalChannelGroup
0 .. 70 for SRBs, 1–3 for DRBsWhich LCG this channel's buffer is reported under in a BSR. Eight groups, not thirty-two channels
sdap-Configsdap-HeaderDL / sdap-HeaderULpresent or absentpresent for multi-flow DRBsWhether the 1-byte SDAP header exists at all. Absent means one QoS flow per DRB, implicitly
pdcp-Configdrbpdcp-SN-SizeDL/ULlen12bits or len18bitslen18bits for high-throughput DRBsPDCP header size, 2 or 3 bytes
integrityProtection
enabled or absentabsent for most DRBsAdds a 4-byte MAC-I to every PDCP PDU when enabled. See the companion 27 AS Security Mode document

Table 17. Configuration that determines how much header a logical channel costs and how it competes for resources. Typical values are what many vendors ship, not specification requirements.

18. Release Deltas: Rel-15 to Rel-18

ReleaseChangeWhy it matters when reading channel mapping
Rel-15The three-layer model as described: five Uu logical channels, five transport channels, six physical channels, 64 LCID codepoints, DCI 0_0/0_1/1_0/1_1/2_0–2_3, PUCCH formats 0–4The baseline. Sections 3 to 11 are Rel-15 except where noted.
Rel-16Extended LCID (eLCID): escape codepoints 33 and 34 opening 65 792 additional control-element codepointsA decoder without the Rel-16 tables desynchronises silently on any PDU containing an extended CE (§16.4).
Rel-16Sidelink: SCCH, STCH, SBCCH, SL-SCH, SL-BCH, PSSCH, PSCCH, PSBCH, PSFCH, two-stage SCI, DCI 3_0 / 3_1A whole parallel channel hierarchy appears in logs from V2X-capable devices (§12).
Rel-16DCI 0_2 / 1_2 with configurable field sizes; DCI 2_4 uplink cancellation; DCI 2_5 IAB soft resources; DCI 2_6 power savingDCI size is no longer determined by format alone, so a size-based decoder heuristic can pick the wrong format.
Rel-16NR-U: DCI 2_0 extended with available RB sets and channel occupancy time; LBT failure reportingA transmission can be absent because of channel access, with no mapping or scheduling fault at all.
Rel-17MBS: group-common PDSCH addressed by G-RNTI and G-CS-RNTI, with multicast MTCH and MCCH logical channelsThe first time a downlink logical channel is neither cell-wide broadcast nor single-UE dedicated.
Rel-17SRB4 for application-layer measurement reporting; SRB-Identity extended to 4A new DCCH instance that carries neither RRC control nor NAS.
Rel-17Paging early indication via DCI 2_7 and PEI-RNTIA UE can decide not to decode the paging PDSCH at all, so absence of a PCCH reception is no longer evidence that no page was sent.
Rel-17RedCap: reduced bandwidth and relaxed capabilities, with separate initial BWPsThe same logical channels over narrower physical resources, so PUCCH and PUSCH sizing assumptions change.
Rel-17NTN: extended HARQ process counts and disabled HARQ feedback for some bearersA DL-SCH transport channel that is not HARQ-protected, which contradicts the property table in §6 for those configurations.
Rel-18Further MBS, network-controlled repeaters with side control information, AI/ML-driven CSI reporting, more UCI multiplexing flexibilityMore content sharing PUCCH and PUSCH, so UCI dropping (§11) becomes more likely rather than less.

Table 18. Channel-mapping changes by release. Almost every entry adds either a codepoint or a new physical-layer control format — the three-layer model itself has not changed since Rel-15.

19. Reading Channel Mapping in Logs: A Checklist

1. Start from the RNTI, not the payload. The RNTI that descrambled the PDCCH CRC tells you what the PDSCH contains before you decode a single byte of it (§9). SI-RNTI means BCCH, P-RNTI means PCCH or a Short Message, RA-RNTI means a RAR, C-RNTI means DCCH or DTCH.

2. Decide whether a MAC subheader should exist at all. For BCCH, PCCH and BCH there is none — the PDU is a transparent MAC PDU. Parsing one produces confident nonsense (§16.3).

3. Walk the subheaders and reconcile the byte count. Every subPDU is either a subheader with an L field, or a subheader whose LCID implies a fixed size. If the total does not equal the transport block size, your walk went wrong somewhere — probably at an unrecognised LCID.

4. Map each LCID to a logical channel using the right table and the right direction. LCID 61 is a Timing Advance Command in the downlink and a Short BSR in the uplink. The tables are different (§5).

5. Check LCID 33 and 34 first if anything looks corrupt. An eLCID escape parsed by an old decoder produces a plausible spray of spurious control elements (§16.4).

6. Verify the logical channel is configured at both ends. Compare the LCIDs appearing on the wire against logicalChannelIdentity in the RLC-BearerConfig list. A bearer with sender-side counters and no receiver-side counters is a configuration mismatch, not a radio problem.

7. Separate the three loss counters. PHY transport block CRC failures, RLC retransmissions and PDCP loss are three layers reporting overlapping events. Only PDCP loss is loss to the application (§7).

8. For anything on PDCCH or PUCCH, stop looking for a logical channel. DCI and UCI have none. If a tool prints one, it is guessing.

9. When UCI seems to be missing, size the PUCCH resource against the worst-case payload. CSI that arrives less often than configured, with no errors, is almost always dropped UCI rather than a reporting fault (§11).

10. Read the message name and predict the chain before you look. If RRCReestablishment appears on CCCH, or a MeasurementReport on SRB2, or a NAS message on SRB1 after SRB2 was established, something is not what you think it is (§4).

20. Glossary

TermExpansionMeaning in this document
Logical channel--A channel defined by the type of information, at the RLC/MAC boundary. Becomes an LCID on the wire.
Transport channel--A channel defined by how MAC offers data to PHY — HARQ, scheduling, coding, transport block structure.
Physical channel--A set of resource elements carrying information that came from a higher layer.
Physical signal--A set of resource elements used by the physical layer that carries nothing from above: PSS, SSS, DM-RS, PT-RS, CSI-RS, SRS.
LCIDLogical Channel IDThe 6-bit field in the MAC subheader. 0–63, with 33 and 34 reserved as escapes to the extended space.
eLCIDExtended LCIDRel-16 one- or two-octet extension reached via LCID 34 or 33, giving codepoints 64–319 and 320–65855.
MAC subPDU--One subheader plus its optional payload. A MAC PDU is a sequence of subPDUs.
Transparent MAC PDU--A MAC PDU consisting of a MAC SDU alone, with no subheader. Used for BCCH, PCCH and BCH.
SDU / PDUService / Protocol Data UnitAn SDU is what a layer receives from above; a PDU is what it emits downward after adding its header.
TM / UM / AMTransparent / Unacknowledged / Acknowledged ModeRLC modes. TM adds no header; UM adds a header and segmentation; AM adds ARQ as well.
RNTIRadio Network Temporary IdentifierThe value scrambling a PDCCH CRC. Functions as part of the channel mapping, because it identifies what the scheduled PDSCH contains (§9).
DCIDownlink Control InformationThe content of PDCCH. No logical or transport channel.
UCIUplink Control InformationHARQ-ACK, SR, CSI and link recovery requests. No logical or transport channel.
SCISidelink Control InformationThe sidelink equivalent of DCI, in two stages: first on PSCCH, second multiplexed into PSSCH.
CCE / REGControl Channel Element / Resource Element GroupPDCCH granularity: one REG is 12 REs in one symbol, one CCE is 6 REGs, and aggregation levels are 1 to 16 CCEs.
Code block--A segment of a transport block after LDPC segmentation, each with its own 24-bit CRC (§7).
QFIQoS Flow IdentifierThe 6-bit field in the SDAP header identifying which QoS flow a packet belongs to — the first layer at which the mapping becomes application-visible.
SRB / DRBSignalling / Data Radio BearerSRBs map to CCCH and DCCH, DRBs to DTCH. One logical channel per bearer per direction.

21. References

  • 3GPP TS 38.300NR overall description. Clause 6.1 (protocol architecture), 6.2 (channels and channel mapping, including the downlink and uplink mapping figures), 6.3 (physical layer), 16 (sidelink).
  • 3GPP TS 38.321NR MAC protocol specification. Clause 4.2 (channel architecture and logical channels), 4.4 (sidelink), 5.4 (uplink data transfer and logical channel prioritisation), 6.1 (MAC PDU formats, subheader variants and the transparent MAC PDU), 6.1.2 (subheader formats and subPDU ordering), 6.2.1 (LCID and eLCID tables, Tables 6.2.1-1 and 6.2.1-2), clause 7.1 (RNTI values, Table 7.1-1).
  • 3GPP TS 38.211Physical channels and modulation. Clause 4.3.2 (the physical channel / physical signal distinction), 6.2 and 6.3 (uplink physical channels and signals, PUCCH formats), 7.3 and 7.4 (downlink physical channels and signals, PBCH and the SS/PBCH block).
  • 3GPP TS 38.212Multiplexing and channel coding. Clause 5 (CRC, LDPC and Polar coding, code block segmentation), 7.1 (BCH encoding: payload generation, scrambling, CRC, Polar, rate matching to 864), 7.2 (DL-SCH and UL-SCH), 7.3.1 (DCI formats), 6.3 (UCI coding).
  • 3GPP TS 38.213Physical layer procedures for control. Clause 9.2 (UCI on PUCCH, resource determination and formats), 9.2.5 (UCI multiplexing and dropping rules), 10 (search spaces and RNTI monitoring), 11.1 (slot format indication).
  • 3GPP TS 38.322RLC protocol specification. Clause 6.2 (TM, UM and AM PDU formats and header sizes).
  • 3GPP TS 38.323PDCP protocol specification. Clause 6.2 (data PDU formats, 12-bit and 18-bit sequence numbers, MAC-I).
  • 3GPP TS 37.324SDAP protocol specification. Clause 6.2 (SDAP header formats, uplink and downlink).
  • 3GPP TS 38.331RRC protocol specification. RLC-BearerConfig, LogicalChannelConfig, RLC-Config, SDAP-Config, PDCP-Config, SRB-Identity, DRB-Identity, and the UL-CCCH-Message, DL-CCCH-Message, UL-DCCH-Message, DL-DCCH-Message, BCCH-DL-SCH-Message and PCCH-Message containers.

Companion documents in this set

  • 02 Radio Frame Structure — the resource grid every physical channel is placed on, and where the SS/PBCH block sits inside it.
  • 03 Random Access — the CCCH/UL-SCH/PUSCH path for MSG3, the RAR that has no logical channel, and the UE Contention Resolution Identity CE.
  • 05 HARQ — what the transport channel HARQ property in §6 actually does, and code block group retransmission.
  • 07 MAC PDU and Control Elements — the subheader formats of §5 and every MAC CE the LCID tables point at, in detail.
  • 08 Scheduling — how a DCI's resource allocation fields turn into the PDSCH and PUSCH of §8.
  • 09 Logical Channel Prioritisation — how an uplink grant is divided between the logical channels of §3.
  • 10 BSR, PHR, SR — the uplink control elements and the SR that rides as UCI.
  • 13 RRC Overview / 15 RRC Procedures — the messages of §4 and the SRBs they use.
  • 17 System Information / 18 MIB and SIB1 IEs — the BCCH content of §14.1 and §14.2.
  • 19 Paging — the PCCH/PCH path and the Short Message alternative.
  • 26 UE Capability — which control elements, DCI formats and PUCCH formats a given UE actually supports.