MIB & SIB1 — Every IE Explained in 5G NR
A field-by-field reference for the two bootstrap messages — every MIB IE (on PBCH) and every SIB1 IE (cell access, selection, SI scheduling, servingCellConfigCommon), what each one does and why the UE needs it.
The MIB is the smallest RRC message in NR by a wide margin -- 24 bits, including the CHOICE bit -- and SIB1 is one of the largest that a UE receives without any dedicated configuration. Between them they carry every decision a UE has to make before it is allowed to transmit: whether the cell is barred, whether it belongs to a PLMN the UE may use, whether its signal is strong enough, whether this particular access attempt is permitted, and where the PRACH is. Get any of it wrong and the failure is silent: the UE walks away and the gNB never learns it was there.
Contents
- 01Why MIB and SIB1 Get Their Own Document
- 02The 24-Bit MIB and the 32-Bit PBCH Payload
- 03MIB Fields, One at a Time
- 04pdcch-ConfigSIB1: Decomposing Eight Bits
- 05CORESET#0 and the Type0-PDCCH Monitoring Occasions
- 06SIB1: the Whole IE Tree
- 07cellAccessRelatedInfo: Who the Cell Belongs To
- 08cellSelectionInfo and the S-Criterion, Worked
- 09connEstFailureControl: How a Cell Earns a Penalty
- 10servingCellConfigCommon in SIB1
- 11ue-TimersAndConstants
- 12uac-BarringInfo and a Worked Barring Check
- 13Failure Modes and What Each One Means
- 14ASN.1: MIB and SIB1
- 15Illustrative Message Traces
- 16Release Deltas: Rel-15 to Rel-18
- 17Reading MIB and SIB1 in Logs: A Checklist
- 18Glossary
- 19References
1. Why MIB and SIB1 Get Their Own Document
The MIB is the smallest RRC message in NR by a wide margin -- 24 bits, including the CHOICE bit -- and SIB1 is one of the largest that a UE receives without any dedicated configuration. Between them they carry every decision a UE has to make before it is allowed to transmit: whether the cell is barred, whether it belongs to a PLMN the UE may use, whether its signal is strong enough, whether this particular access attempt is permitted, and where the PRACH is. Get any of it wrong and the failure is silent: the UE walks away and the gNB never learns it was there.
The two messages also differ in a way that matters constantly when debugging. The MIB is not scheduled -- it is part of the SSB, so a UE that found the SSB has it. SIB1 is scheduled on DL-SCH, which means it needs a control resource set, a search space, a monitoring occasion and a PDCCH grant, and every one of those is derived from eight bits inside the MIB. Section 4 and section 5 are about those eight bits, because they are where cells become undecodable.
This document is deliberately field-by-field. The companion 17 System Information document covers how SIB2 and beyond are scheduled, notified and re-acquired; the companion 01 Registration Process document covers what the UE does with SIB1 once it has it.
There is no acknowledgement anywhere in this document. Neither the MIB nor SIB1 is HARQ-protected, neither is retransmitted on demand, and neither produces a UE report on failure. Every fault described in §13 has to be found by reading the configuration and doing the arithmetic. If you are looking for a counter that goes up when SIB1 is broken, there is not one.
2. The 24-Bit MIB and the 32-Bit PBCH Payload
The RRC message on BCCH is BCCH-BCH-Message, and it is exactly 24 bits: one CHOICE bit selecting mib over messageClassExtension, then the 23 bits of the MIB SEQUENCE. MIB has no extension marker -- unusually for TS 38.331 -- which is precisely why it has a fixed length and why it ends in a single explicit spare bit.
controlResourceSetZero straddles the boundary between octets 2 and 3, which is where hand-decoding a MIB hex dump usually goes wrong.| Field | Bits | Encoded value | Meaning |
|---|---|---|---|
BCCH-BCH-MessageType CHOICE | 1 | 0 = mib, 1 = messageClassExtension | A CHOICE with two alternatives and no extension marker, so one bit. No release has ever used the second alternative. |
systemFrameNumber | 6 | The 6 MSBs of the 10-bit SFN | The 4 LSBs are not in the ASN.1 at all -- see below |
subCarrierSpacingCommon | 1 | scs15or60 / scs30or120 | The SCS for SIB1, MSG2 and MSG4 of Random Access, and paging. Which of the two values in each pair applies is decided by the frequency range. |
ssb-SubcarrierOffset | 4 | 0..15 | The 4 LSBs of k_SSB. The 5th bit is in the PBCH payload for FR1. |
dmrs-TypeA-Position | 1 | pos2 / pos3 | Symbol of the first DM-RS for PDSCH mapping type A. Wrong value = SIB1, MSG2 and MSG4 all fail to demodulate. |
pdcch-ConfigSIB1 | 8 | Two INTEGER (0..15) in sequence | controlResourceSetZero then searchSpaceZero (§4) |
cellBarred | 1 | barred / notBarred | Absolute. A barred cell is excluded for 300 s. |
intraFreqReselection | 1 | allowed / notAllowed | Whether the 300 s exclusion of a barred cell extends to other cells on the same frequency |
spare | 1 | 0 | Exists only because 23 bits of content had to fill a fixed 24-bit message |
Table 1. BCCH-BCH-Message accounting: 1 + 6 + 1 + 4 + 1 + 8 + 1 + 1 + 1 = 24 bits exactly TS 38.331.
2.1 The eight bits the physical layer adds
The PBCH transmits a 32-bit payload, not 24 TS 38.212 cl. 7.1.1. The physical layer appends eight bits that do not exist anywhere in the ASN.1, and they carry information the MIB could not: they change from one SSB to the next inside the same MIB transmission period, which is exactly why they cannot be in a message whose content is fixed for 80 ms.
| Added bits | Count | Content | Why it cannot be in the MIB |
|---|---|---|---|
| SFN LSBs | 4 | The 4 least significant bits of the 10-bit SFN | The MIB is the same in every SSB across an 80 ms period, which spans eight radio frames -- so the low SFN bits change while the MIB does not |
| Half-frame bit | 1 | Which half of the radio frame this SSB is in | Same reason: two SSB bursts can occur in one radio frame |
| Conditional field | 3 | For L_max = 4 or 8 (FR1): the MSB of k_SSB plus two reserved bits.
For L_max = 64 (FR2): the three MSBs of the SS/PBCH block index. | The SSB index differs per SSB by definition. k_SSB needs a 5th bit only on FR1, where its range is 0..23 in 15 kHz subcarriers -- so the same three bits do two different jobs depending on frequency range. |
Table 2. The PBCH extra bits TS 38.212 cl. 7.1.1. 24 + 8 = 32 bits, which is then CRC-attached, polar-coded and rate-matched onto the PBCH resource elements.
2.2 Where the SSB index actually comes from
Even with the three conditional bits, the low bits of the SSB index are never transmitted in the payload. They are carried by the PBCH DMRS sequence, whose initialisation depends on the candidate SSB index TS 38.211 cl. 7.4.1.4.1:
c_init = 2^11 x (i_SSB + 1) x (FLOOR(N_ID_cell / 4) + 1)
+ 2^6 x (i_SSB + 1)
+ (N_ID_cell mod 4)
L_max = 4 i_SSB = (SSB index mod 4) + 4 x n_hf
L_max = 8 or 64 i_SSB = SSB index mod 8
n_hf = half-frame number, 0 or 1
The UE correlates against each i_SSB hypothesis; whichever one produces a
successful PBCH decode is the SSB index (and, for L_max = 4, also the
half frame). For L_max = 64 the three MSBs then come from the payload.So the SSB index reaches the UE by three different mechanisms at once, depending on frequency range: the 3 LSBs via the DMRS scrambling hypothesis, the 3 MSBs via the PBCH payload on FR2, and -- for L_max = 4 only -- the half-frame folded into i_SSB as well. This is why an analyser that reports an SSB index for an FR2 cell has done more work than one that reports it for FR1, and why an SSB index shown alongside a hex dump of the MIB cannot have come from that dump.
The payload itself is scrambled with a sequence initialised from the cell ID, and the scrambling position depends on low SFN bits TS 38.212 cl. 7.1.2 -- so a UE that does not yet know the SFN tries several hypotheses across the 80 ms PBCH transmission period. A subset of the added bits is excluded from scrambling so that the UE can recover the timing information it needs to pick the right hypothesis.
3. MIB Fields, One at a Time
| Field | Range | Common value | Effect, and what a wrong value does |
|---|---|---|---|
systemFrameNumber | BIT STRING (6) -- the SFN MSBs | counts 0..1023 with the PBCH LSBs | Frame timing for everything: paging occasions, SI windows, PRACH occasion periodicity. A wrong value puts the UE on a different frame boundary from the cell and nothing works. |
subCarrierSpacingCommon | scs15or60, scs30or120 | scs30or120 on FR1 mid-band, scs15or60 on low band | The SCS of the initial DL BWP, and so of SIB1, paging, MSG2 and MSG4. It is not necessarily the SCS of user-plane traffic later on. |
ssb-SubcarrierOffset (k_SSB) | INTEGER (0..15) in the MIB; 0..23 on FR1 with the PBCH bit, 0..11 on FR2 | 0 to 11 | The frequency offset from subcarrier 0 of common RB 0 of the SSB to subcarrier 0 of the SSB. Units are 15 kHz on FR1 regardless of the SSB SCS, and the SSB SCS on FR2. Wrong value = the UE looks for CORESET#0 in the wrong place. |
| k_SSB above range | 24..31 on FR1, 12..15 on FR2 | not used | Indicates that SIB1 is not transmitted with this SSB. pdcch-ConfigSIB1 is then reinterpreted as frequency-position information for an SSB that does carry SIB1, or as a range where none does TS 38.213 cl. 13. |
dmrs-TypeA-Position | pos2, pos3 | pos2 | Symbol index of the first PDSCH DM-RS for mapping type A. A mis-signalled value makes the receiver look for reference symbols where there are none, so SIB1 fails with a clean CRC error rather than a coverage-like degradation. |
pdcch-ConfigSIB1 | INTEGER pair, each 0..15 | see §4 | The entire CORESET#0 and searchSpaceZero configuration (§4, §5) |
cellBarred | barred, notBarred | notBarred | barred excludes the cell for 300 s. Used deliberately for maintenance, and set automatically by many gNBs when they lose their N2 connection -- which is a useful diagnostic: a barred cell that is otherwise healthy usually means the core is unreachable. |
intraFreqReselection | allowed, notAllowed | allowed | notAllowed extends the 300 s exclusion of a barred cell to all intra-frequency cells, pushing the UE to a different frequency or RAT. Setting it in a single-carrier deployment strands the UE. |
spare | BIT STRING (1) | 0 | Nothing. Its presence is what makes the message exactly 24 bits. |
Table 3. MIB fields with ranges, typical values and consequences. Only two of the nine carry configuration the UE keeps after SIB1 arrives; the rest exist to get SIB1 decoded.
subCarrierSpacingCommon values are pairs -- scs15or60 and scs30or120 -- because the same bit means different things in FR1 and FR2. On FR1 it selects 15 or 30 kHz; on FR2 it selects 60 or 120 kHz. A decoder that prints the enumerator name rather than the resolved value is not being unhelpful, it genuinely cannot resolve it without knowing the band. Resolve it yourself from the ARFCN before using it in any arithmetic.
4. pdcch-ConfigSIB1: Decomposing Eight Bits
PDCCH-ConfigSIB1 is a SEQUENCE of two INTEGER (0..15), so it encodes as four bits then four bits, controlResourceSetZero first. In a log it usually appears as a single decimal number -- and the first thing to do with that number is split it.
pdcch-ConfigSIB1 = 152 in full. Neither nibble means anything on its own: each is a row index into a table selected by the subcarrier-spacing pair and the band's minimum channel bandwidth.pdcch-ConfigSIB1 = 152
152 = 0x98 = 1001 1000 binary
controlResourceSetZero = 152 >> 4 = 1001b = 9
searchSpaceZero = 152 & 0x0F = 1000b = 8
And the value the original of this document used, for comparison:
pdcch-ConfigSIB1 = 24 = 0x18 = 0001 1000
controlResourceSetZero = 24 >> 4 = 0001b = 1
searchSpaceZero = 24 & 0x0F = 1000b = 8
Same searchSpaceZero, a completely different CORESET#0: index 9 gives a 48-RB, 2-symbol CORESET at offset 16, while index 1 gives a 24-RB, 2-symbol CORESET at offset 2 (Table 13-1). The two cells look nearly identical in a log and place their control channel in entirely different places.
4.1 The CORESET#0 table
controlResourceSetZero indexes one of Tables 13-1 to 13-10 of TS 38.213, selected by the {SS/PBCH block, PDCCH} subcarrier spacing pair and, for the FR1 tables, the band's minimum channel bandwidth. Every row gives four things: the SSB-to-CORESET multiplexing pattern, the number of resource blocks, the number of symbols, and an RB offset.
| Index | Pattern | N_RB | N_symb | Offset (RB) | Notes |
|---|---|---|---|---|---|
| 0 | 1 | 24 | 2 | 0 | Narrowest and cheapest; fits a 5 MHz channel |
| 1 | 1 | 24 | 2 | 2 | |
| 2 | 1 | 24 | 2 | 4 | |
| 3 | 1 | 24 | 3 | 0 | Three symbols buys coding gain for the SIB1 grant at the cost of PDSCH symbols |
| 4 | 1 | 24 | 3 | 2 | |
| 5 | 1 | 24 | 3 | 4 | |
| 6 | 1 | 48 | 1 | 12 | 48 RB needs at least a 10 MHz channel |
| 7 | 1 | 48 | 1 | 16 | |
| 8 | 1 | 48 | 2 | 12 | |
| 9 | 1 | 48 | 2 | 16 | The worked example in §4 and §5 |
| 10 | 1 | 48 | 3 | 12 | |
| 11 | 1 | 48 | 3 | 16 | |
| 12 | 1 | 96 | 1 | 38 | 96 RB needs at least a 20 MHz channel |
| 13 | 1 | 96 | 2 | 38 | |
| 14 | 1 | 96 | 3 | 38 | |
| 15 | -- | -- | -- | -- | Reserved |
Table 4. TS 38.213 Table 13-1, for {SS/PBCH block, PDCCH} SCS = {15, 15} kHz in bands with a 5 MHz or 10 MHz minimum channel bandwidth. Other SCS pairs use different tables with different values -- always confirm which table applies before using a row.
The offset is measured in resource blocks, from the lowest RB of CORESET#0 up to the lowest RB of the SSB. Combined with k_SSB, which gives the sub-RB alignment, that fixes the CORESET's absolute position in the carrier.
4.2 The searchSpaceZero table
| Index | O | M | First symbol index | Effect |
|---|---|---|---|---|
| 0 | 0 | 1 | 0 | One occasion per slot, starting at symbol 0 |
| 1 | 0 | 2 | 0 and N_symb^CORESET | Two occasions per slot, back to back |
| 2 | 2 | 1 | 0 | Offset by 2 slots (scaled by 2^mu) |
| 3 | 2 | 2 | 0 and N_symb^CORESET | |
| 4 | 5 | 1 | 0 | |
| 5 | 5 | 2 | 0 and N_symb^CORESET | The worked example in §5.2 |
| 6 | 7 | 1 | 0 | |
| 7 | 7 | 2 | 0 and N_symb^CORESET | |
| 8 | 0 | 1 | 1 | Leaves symbol 0 free; the worked example in §5.1 |
| 9 | 5 | 1 | 1 | |
| 10 | 0 | 1 | 2 | Leaves symbols 0 and 1 free |
| 11 | 5 | 1 | 2 | |
| 12 | 2 | 1 | 1 | |
| 13 | 2 | 1 | 2 | |
| 14 | 7 | 1 | 1 | |
| 15 | 7 | 1 | 2 |
Table 5. TS 38.213 Table 13-11, for SSB-and-CORESET multiplexing pattern 1. O is a slot offset, M the number of monitoring occasions per slot. Patterns 2 and 3 (FR2 only) use Tables 13-12 and 13-13 and place occasions relative to the SSB instead.
5. CORESET#0 and the Type0-PDCCH Monitoring Occasions
With the two table rows in hand, the UE knows where in frequency to look and when in time. Frequency first:
5.1 Monitoring occasions, worked once
For SSB-and-CORESET multiplexing pattern 1 -- the only pattern used in FR1 -- the Type0-PDCCH common search space occasions are computed from O, M and the SSB index TS 38.213 cl. 13:
n_0 = ( O x 2^mu + FLOOR( i x M ) ) mod N_slot_frame
and the system frame parity:
if FLOOR( ( O x 2^mu + FLOOR(i x M) ) / N_slot_frame ) mod 2 = 0
-> the occasion is in a radio frame with SFN mod 2 = 0
else -> the occasion is in a radio frame with SFN mod 2 = 1
The UE monitors two consecutive slots starting from n_0.
i SS/PBCH block index
O, M from searchSpaceZero (Table 13-11)
mu numerology of the PDCCH SCS
N_slot_frame slots per radio frame = 10 x 2^musearchSpaceZero = 8, so O = 0, M = 1, first symbol index 1. 15 kHz PDCCH SCS, so mu = 0 and N_slot_frame = 10. Four SSBs (L_max = 4, FR1 below 3 GHz):
i = 0: n_0 = (0 x 1 + 0) mod 10 = 0 FLOOR(0/10) = 0 -> even SFN
i = 1: n_0 = (0 x 1 + 1) mod 10 = 1 FLOOR(1/10) = 0 -> even SFN
i = 2: n_0 = (0 x 1 + 2) mod 10 = 2 FLOOR(2/10) = 0 -> even SFN
i = 3: n_0 = (0 x 1 + 3) mod 10 = 3 FLOOR(3/10) = 0 -> even SFN
So a UE that selected SSB #2 monitors slots 2 and 3 of every even radio frame, at symbols 1 and 2 (first symbol index 1, N_symb = 2). Everything fits inside one radio frame, and every occasion is in an even frame.
5.2 The same arithmetic when it overflows the frame
Change the numerology and the beam count and the picture changes completely -- which is why the SFN-parity half of the formula exists:
searchSpaceZero = 5, so O = 5, M = 2, first symbols {0, N_symb}. 30 kHz PDCCH SCS, so mu = 1 and N_slot_frame = 20. Eight SSBs (L_max = 8):
O x 2^mu = 5 x 2 = 10
i = 0: 10 + 0 = 10 n_0 = 10 FLOOR(10/20) = 0 -> even SFN
i = 1: 10 + 2 = 12 n_0 = 12 FLOOR(12/20) = 0 -> even SFN
i = 2: 10 + 4 = 14 n_0 = 14 FLOOR(14/20) = 0 -> even SFN
i = 3: 10 + 6 = 16 n_0 = 16 FLOOR(16/20) = 0 -> even SFN
i = 4: 10 + 8 = 18 n_0 = 18 FLOOR(18/20) = 0 -> even SFN
i = 5: 10 + 10 = 20 n_0 = 0 FLOOR(20/20) = 1 -> odd SFN
i = 6: 10 + 12 = 22 n_0 = 2 FLOOR(22/20) = 1 -> odd SFN
i = 7: 10 + 14 = 24 n_0 = 4 FLOOR(24/20) = 1 -> odd SFN
The last three beams' occasions have wrapped into the following radio frame. A UE on SSB #6 monitors slots 2 and 3 of odd frames only -- and sees nothing at all in even frames.
In TDD, those computed slots have to be downlink slots. A tdd-UL-DL-ConfigurationCommon pattern that makes slot 2 and slot 3 uplink removes SIB1 for beam #6 in the §5.2 example, and only for beam #6. The symptom is a cell that works from most directions and is completely dead from one -- with no RACH, no measurement report and nothing in the gNB log, because every UE on that beam fails SIB1 acquisition and treats the cell as barred. Cross-check the computed occasions against the TDD pattern for every SSB index, not just SSB #0.
6. SIB1: the Whole IE Tree
cellAccessRelatedInfo is OPTIONAL, and each omission has a specific consequence rather than a generic one -- see the note below.| Top-level IE | Presence | Purpose | What its absence means |
|---|---|---|---|
cellSelectionInfo | O | The S-criterion thresholds: q-RxLevMin, q-QualMin and their offsets | No level or quality threshold is signalled, so the UE applies the defaults in TS 38.304. q-QualMin absent means Q_qualmin is treated as negative infinity, so the Squal test always passes. |
cellAccessRelatedInfo | M | PLMN list, TAC, RAN area code, cell identity, operator-reservation flags | Cannot be absent. This is the only mandatory IE in SIB1. |
connEstFailureControl | O | How many failed establishment attempts earn a cell a penalty, how large the penalty is, and how long it lasts | No penalty is ever applied, so a cell that consistently fails establishment keeps being reselected to (§9) |
si-SchedulingInfo | O | The schedule for every other SIB | The cell provides no Other SI at all. See the companion 17 System Information document. |
servingCellConfigCommon | O | Downlink and uplink common configuration, SSB positions and periodicity, TDD pattern, SSB transmit power | The cell cannot be accessed -- there is no rach-ConfigCommon, so there is no PRACH configuration. Legal, and used for cells that exist only as SCells. |
ims-EmergencySupport | O | IMS emergency call support over this cell | The UE assumes emergency calls over IMS are not supported here |
eCallOverIMS-Support | O | eCall over IMS support | Same, for eCall |
ue-TimersAndConstants | O | T300, T301, T310, N310, T311, N311, T319 | The UE applies its own default values (§11) |
uac-BarringInfo | O | Unified access control: barring factors, times and per-category mappings | No access barring at all in this cell (§12) |
useFullResumeID | O | Whether RRCResumeRequest1 with a full 40-bit I-RNTI is used instead of the short form | The short I-RNTI form applies. See the companion 14 RRC States document. |
Table 6. SIB1 top-level IEs TS 38.331 cl. 6.2.2. M = mandatory, O = optional. The absence of servingCellConfigCommon is the one worth remembering: it turns a visible cell into an unusable one.
7. cellAccessRelatedInfo: Who the Cell Belongs To
This is the only mandatory IE, and its structure has one subtlety that trips people up: the PLMN list is a list of lists. plmn-IdentityInfoList holds up to twelve PLMN-IdentityInfo entries, and each of those holds up to twelve PLMN identities that all share the same TAC, RAN area code, cell identity and reservation flags.
| Field | Type / range | Scope | Meaning and consequence |
|---|---|---|---|
plmn-IdentityList | 1..12 PLMN-Identity, each MCC (3 digits, optional) + MNC (2 or 3 digits) | Per PLMN-IdentityInfo entry | The PLMNs this entry describes. RRCSetupComplete's selectedPLMN-Identity is a 1-based index into the flattened list across all entries, which is why resolving it needs the SIB1 from the same cell. |
trackingAreaCode | BIT STRING (SIZE (24)), optional | Per entry | The TAC these PLMNs use for this cell. Absence means the cell supports only PSCell and SCell functionality -- it cannot be camped on for normal service. |
ranac | INTEGER (0..255), optional | Per entry | RAN Area Code, used for RAN-based notification of RRC_INACTIVE UEs. Absence means the cell is not part of a RAN notification area. |
cellIdentity | BIT STRING (SIZE (36)) | Per entry | The NR Cell Identity. Combined with the PLMN it forms the NCGI. The split between gNB ID and cell ID within the 36 bits is an operator choice (gNB-ID-Length is 22 to 32 bits), so the same 36-bit value means different things in different networks. |
cellReservedForOperatorUse | reserved, notReserved | Per entry | reserved means only UEs with Access Identity 11 or 15 may treat the cell as a candidate; every other UE behaves as if it were barred TS 38.304 cl. 5.3.1. Per-PLMN, so a shared cell can be reserved for one operator's staff and open to another's subscribers. |
cellReservedForOtherUse | true, optional | The whole cell | true means the UE behaves as if the cell is barred, for every PLMN. Unlike cellBarred in the MIB this is not time-limited to 300 s -- it holds as long as the SIB1 says so. |
Table 7. CellAccessRelatedInfo and PLMN-IdentityInfo TS 38.331. The three reservation and barring mechanisms -- cellBarred, cellReservedForOtherUse and cellReservedForOperatorUse -- are independent and applied in that order.
An entry in plmn-IdentityInfoList with no `trackingAreaCode` is not a broken entry. It means the cell offers that PLMN for SCell or PSCell use only -- carrier aggregation and dual connectivity -- and cannot be camped on. A UE will therefore measure the cell, report it, and be added to it as a secondary cell, while never once selecting it. If a cell shows plenty of measurement activity and zero RACH, check for a missing TAC before checking anything else.
8. cellSelectionInfo and the S-Criterion, Worked
cellSelectionInfo carries five values, and four of the five are optional. Their units are the single most common source of misreading in the whole of SIB1.
| Field | ASN.1 range | Unit | Default if absent | Feeds into |
|---|---|---|---|---|
q-RxLevMin | INTEGER (-70..-22) | 2 dBm -- actual dBm = 2 x the field value | Mandatory within cellSelectionInfo | Q_rxlevmin in Srxlev |
q-RxLevMinOffset | INTEGER (1..8) | 2 dB | 0 dB | Added to Q_rxlevmin, and applied only when the UE is searching for a higher-priority PLMN while camped in a VPLMN |
q-RxLevMinSUL | INTEGER (-70..-22) | 2 dBm | Not applicable | The SUL-carrier variant of Q_rxlevmin, used when the UE selects the supplementary uplink |
q-QualMin | INTEGER (-43..-20) | 1 dB | negative infinity, so the Squal test always passes | Q_qualmin in Squal |
q-QualMinOffset | INTEGER (1..8) | 1 dB | 0 dB | Added to Q_qualmin, same VPLMN condition as q-RxLevMinOffset |
Table 8. CellSelectionInfo fields TS 38.331. Note that q-RxLevMin and q-RxLevMinOffset are in 2 dB units while q-QualMin and q-QualMinOffset are in 1 dB units -- the two halves of the same IE use different scalings.
Srxlev = Q_rxlevmeas - (q-RxLevMin x 2 + q-RxLevMinOffset x 2)
- Pcompensation - Qoffset_temp > 0
Squal = Q_qualmeas - (q-QualMin + q-QualMinOffset)
- Qoffset_temp > 0
Q_rxlevmeas measured SS-RSRP [dBm]
Q_qualmeas measured SS-RSRQ [dB]
Pcompensation max(P_EMAX - P_PowerClass, 0) [dB]
P_EMAX from p-Max in frequencyInfoUL, or the band default
P_PowerClass from the UE's power class (23 dBm for cl. 3)
Qoffset_temp 0, or connEstFailOffset while its validity timer runs (S9)
A cell is *suitable* only if BOTH are strictly greater than zero.q-RxLevMin = -60, q-QualMin = -18, no offsets, UE power class 3, p-Max = 23 dBm.
Measured: SS-RSRP = -102 dBm, SS-RSRQ = -11 dB.
Q_rxlevmin = 2 x (-60) = -120 dBm
Pcompensation = max(23 - 23, 0) = 0 dB
Qoffset_temp = 0 dB
Srxlev = -102 - (-120) - 0 - 0 = +18 dB > 0 OK
Squal = -11 - ( -18) - 0 = +7 dB > 0 OK
Now raise p-Max to 26 dBm, as a cell configured for high-power UEs might:
Pcompensation = max(26 - 23, 0) = 3 dB
Srxlev = -102 + 120 - 3 - 0 = +15 dB > 0 still OK
Squal = unchanged at +7 dB
Pcompensation is the cell telling a power-class-3 UE "you cannot reach me at the power I am assuming", so it raises the bar by exactly the shortfall.
Same cell, but the UE has just had two connection establishment failures here and connEstFailOffset = 10 dB is in force (§9):
Qoffset_temp = 10 dB, applied to both criteria
Srxlev = -102 + 120 - 0 - 10 = +8 dB > 0 OK
Squal = -11 + 18 - 10 = -3 dB < 0 FAILS
The cell is no longer suitable, and it failed on quality while its level margin still looked comfortable. Because q-QualMin has a much narrower usable range than q-RxLevMin, Qoffset_temp almost always bites Squal first. Setting connEstFailOffset from the level margin alone is how a cell gets excluded harder than intended.
A logged q-RxLevMin of -70 does not mean -70 dBm. It means 2 x (-70) = -140 dBm, which is below the thermal noise floor of any bandwidth a UE will measure in -- so the level half of the S-criterion is effectively disabled and every cell the UE can hear at all is suitable. That is occasionally intentional in a lab, and in a live network it is almost always a default nobody filled in. Reading the raw integer as dBm produces exactly the opposite conclusion, which is why this one field generates so many wrong answers.
9. connEstFailureControl: How a Cell Earns a Penalty
A cell can pass the S-criterion comfortably and still be unable to admit anyone -- because its PRACH is misconfigured, because it has no N2 connection, or because it is simply overloaded. connEstFailureControl is the mechanism that lets a UE stop trying without waiting for the cell to bar itself.
| Field | ASN.1 values | Typical | What it does |
|---|---|---|---|
connEstFailCount | n1, n2, n3, n4 | n2 | Consecutive connection establishment failures in the same cell before the offset is applied |
connEstFailOffset | INTEGER (0..15), in dB, optional | 10 | The value of Qoffset_temp applied to that cell. If absent, the UE applies 15 dB -- so omitting the field is the harshest setting, not the mildest. |
connEstFailOffsetValidity | s30, s60, s120, s240, s300, s420, s600, s900 | s120 or s300 | How long the offset stays in force after the failure count is reached |
Table 9. ConnEstFailureControl TS 38.331. Qoffset_temp feeds straight into both halves of the S-criterion, which is what makes the interaction in §8 possible.
The counter is per cell and per UE, and it resets on a successful establishment. The offset makes the cell less attractive for reselection as well as potentially unsuitable altogether, so a UE that keeps failing on one cell drifts to a neighbour without any network involvement.
The UE also stores a connEstFailReport -- the measured RSRP and RSRQ of the failed cell and its neighbours, the number of preambles sent, and whether contention was detected -- and hands it to the next cell it successfully connects to, on request. That report is the intended way to diagnose exactly this situation, and it is the only UE-side evidence you will get for a cell that fails establishment silently. See the companion 03 Random Access document.
10. servingCellConfigCommon in SIB1
ServingCellConfigCommonSIB is the largest branch of SIB1 and the one the UE actually needs in order to transmit. It is a reduced form of the dedicated ServingCellConfigCommon -- everything a UE can be told without a dedicated connection.
| Field | Contents | Range / values | Why it matters here |
|---|---|---|---|
downlinkConfigCommon -> | offsetToPointA, SCS-specific carrier list, frequency band list | offsetToPointA INTEGER (0..2199) | Anchors the common resource block grid, which is what the CORESET#0 offset of §5 is measured against |
downlinkConfigCommon -> | genericParameters (location and bandwidth, SCS, cyclic prefix), pdcch-ConfigCommon, pdsch-ConfigCommon | locationAndBandwidth INTEGER (0..37949) | The BWP in which SIB1, paging, MSG2 and MSG4 live. CORESET#0 must fit inside it. |
downlinkConfigCommon -> | modificationPeriodCoeff | n2, n4, n8, n16 | One of the two factors in the BCCH modification period -- see the companion 17 System Information document |
downlinkConfigCommon -> | defaultPagingCycle, nAndPagingFrameOffset, ns, firstPDCCH-MonitoringOccasionOfPO | defaultPagingCycle rf32, rf64, rf128, rf256 | Paging occasions, and the other factor in the modification period. See the companion 19 Paging document. |
uplinkConfigCommon -> | SCS-specific carrier list, p-Max, frequencyShift7p5khz | p-Max INTEGER (-30..33) dBm | p-Max is P_EMAX in the Pcompensation term of §8, and the ceiling on PRACH and PUSCH power |
uplinkConfigCommon -> | rach-ConfigCommon, pusch-ConfigCommon, pucch-ConfigCommon | see the companion 03 Random Access document | This is the PRACH configuration. Without it the cell cannot be accessed at all. |
uplinkConfigCommon -> | Cell-wide default time alignment timer | ms500, ms750, ms1280, ms1920, ms2560, ms5120, ms10240, infinity | How long uplink timing stays valid without a TA update. See the companion 04 Timing Advance document. |
ssb-PositionsInBurst | inOneGroup BIT STRING (8), optional groupPresence BIT STRING (8) | 8 or 64 positions | Which SSB candidate positions are actually transmitted. A UE will not measure a position this bitmap says is absent. |
ssb-PeriodicityServingCell | SSB burst periodicity | ms5, ms10, ms20, ms40, ms80, ms160 | A UE performing initial cell selection assumes 20 ms, so a longer value costs extra blind decode attempts before the cell is found |
tdd-UL-DL-ConfigurationCommon | referenceSubcarrierSpacing, pattern1, optional pattern2 | periodicity ms0p5 to ms10, plus slot and symbol counts | Which slots are downlink. Cross-check against the computed Type0-PDCCH occasions (§5.2). |
ss-PBCH-BlockPower | SSB EPRE as transmitted | INTEGER (-60..50) dBm | The UE's only reference for downlink pathloss, and therefore the anchor of its open-loop PRACH power calculation |
n-TimingAdvanceOffset | Fixed N_TA offset applied on top of the timing advance | n0, n25600, n39936 (in T_c units) | Absence implies the FR-dependent default. Wrong value = a constant uplink timing error across every UE in the cell. |
Table 10. ServingCellConfigCommonSIB, abridged TS 38.331. Two rows carry consequences far beyond their apparent scope: initialUplinkBWP because it holds the PRACH configuration, and ss-PBCH-BlockPower because every UE's uplink power derives from it.
ss-PBCH-BlockPower wrong by 6 dB puts every UE's PRACH transmission in the cell wrong by 6 dB in the opposite direction -- too low, and preambles are not detected until the power ramping catches up; too high, and every UE in the cell interferes with every other UE's PRACH. Neither symptom looks like a broadcast-information problem. It looks like a coverage problem or a PRACH capacity problem, and both diagnoses lead away from the actual cause. See the companion 03 Random Access document for the open-loop power formula this value feeds.
11. ue-TimersAndConstants
Seven values that govern how long the UE persists before giving up. They are cell-wide defaults; a dedicated RRCReconfiguration can override some of them per UE once a connection exists.
| Field | ASN.1 values | Typical | Started on | On expiry / reaching |
|---|---|---|---|---|
t300 | ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000 | ms1000 | RRCSetupRequest transmitted | Connection establishment failure: go to RRC_IDLE, store a connEstFailReport, increment the connEstFailureControl counter |
t301 | Same enumeration as t300 | ms1000 | RRCReestablishmentRequest transmitted | Go to RRC_IDLE with release cause RRC connection failure |
t310 | ms0, ms50, ms100, ms200, ms500, ms1000, ms2000 | ms1000 | N310 consecutive out-of-sync indications from lower layers | Radio link failure. See the companion 16 RLM and RLF document. |
n310 | n1, n2, n3, n4, n6, n8, n10, n20 | n10 | Counting out-of-sync indications | Start t310 |
t311 | ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000 | ms10000 | RRC re-establishment initiated, cell selection under way | Go to RRC_IDLE -- re-establishment has failed to find a cell |
n311 | n1, n2, n3, n4, n5, n6, n8, n10 | n1 | Counting in-sync indications while t310 runs | Stop t310 |
t319 | Same enumeration as t300 | ms1000 | RRCResumeRequest transmitted | Go to RRC_IDLE; the stored RRC_INACTIVE context is discarded |
Table 11. UE-TimersAndConstants TS 38.331. If the whole IE is absent from SIB1 the UE applies its own defaults, which are not specified to be any particular value -- so a cell that omits it gets whatever the chipset vendor chose.
t310 includes the value ms0, and it does what it says: an out-of-sync condition becomes a radio link failure immediately, with no recovery window at all. It exists for deployments that would rather re-establish fast than ride out a fade. If you see unexplained RLF rates in a cell, read t310 before reading anything else -- ms0 and ms50 both produce RLF from conditions a normal cell absorbs silently.
12. uac-BarringInfo and a Worked Barring Check
Unified Access Control is the last gate before the UE transmits, and it is the only one that is re-evaluated on every access attempt rather than once at camp time. It works on two independent axes: access identity, which is about who the subscriber is and can exempt them outright, and access category, which is about what the attempt is for and is subject to a probabilistic barring factor.
| Field | Type / range | What it does |
|---|---|---|
uac-BarringForCommon | UAC-BarringPerCatList, optional | Per-access-category barring that applies to every PLMN in the cell |
uac-BarringPerPLMN-List | 1..12 UAC-BarringPerPLMN, optional | Per-PLMN overrides, indexed by the same PLMN index as selectedPLMN-Identity. Where present for the selected PLMN it replaces uac-BarringForCommon entirely. |
uac-BarringInfoSetList | 1..8 UAC-BarringInfoSet | The actual barring parameters. The per-category lists hold indices into this list, so several categories can share one setting. |
uac-AccessCategory1-SelectionAssistanceInfo | ENUMERATED {a, b, c}, either common or per PLMN, optional | Tells the UE which of the three TS 22.261 conditions decides whether an attempt belongs to Access Category 1 |
UAC-BarringPerCat.accessCategory | INTEGER (1..63) | The category this entry applies to. Category 0 cannot appear -- it is never barred, which is what keeps paging responses working. |
UAC-BarringPerCat.uac-barringInfoSetIndex | INTEGER (1..8) | Which UAC-BarringInfoSet applies |
UAC-BarringInfoSet.uac-BarringFactor | ENUMERATED {p00, p05, p10, ..., p95} | The probability the attempt is allowed. p00 bars everything, p95 bars one attempt in twenty. |
UAC-BarringInfoSet.uac-BarringTime | ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512} | The base of the T390 back-off, which is randomised around it |
UAC-BarringInfoSet.uac-BarringForAccessIdentity | BIT STRING (SIZE (7)) | One bit per access identity, in the order 1, 2, 11, 12, 13, 14, 15. A 0 means that identity is not barred and skips the draw entirely. |
Table 12. UAC-BarringInfo and its children TS 38.331. The access-identity bitmap is checked first and is absolute; the barring factor is only reached by UEs that no bit exempts.
12.1 The barring check, worked
A UE with Access Identity 0 only (an ordinary subscriber) makes an MO-data attempt, which maps to Access Category 7.
uac-BarringPerCatList: { accessCategory 7, uac-barringInfoSetIndex 2 }
uac-BarringInfoSetList[2]:
uac-BarringFactor ............... p40 -> 0.40
uac-BarringTime ................. s32 -> 32 s
uac-BarringForAccessIdentity .... 0111111
Step 1 -- access identity. The bitmap covers identities 1, 2, 11, 12, 13, 14, 15. This UE holds none of them, so no bit exempts it and it must draw. (Had it held Access Identity 1, the leftmost bit is 0, meaning not barred, and the check would end here with access allowed.)
Step 2 -- the factor. Draw rand1 uniform in [0,1):
rand1 = 0.28 0.28 < 0.40 -> access allowed
Later, the same UE, same configuration, different draw:
rand1 = 0.55 0.55 >= 0.40 -> access barred
Step 3 -- the back-off. Draw rand2 = 0.62:
T390 = (0.7 + 0.6 x rand2) x uac-BarringTime
= (0.7 + 0.372) x 32
= 1.072 x 32 = 34.3 s
Note that T390 can exceed uac-BarringTime: the multiplier ranges from 0.7 to 1.3. T390 runs per access category, so this UE can still answer a page (Access Category 0, never barred) during those 34 seconds.
| Access identity | Who holds it | Bitmap position |
|---|---|---|
| 0 | Any UE -- the ordinary case | Not in the bitmap at all. A UE with only identity 0 always reaches the barring-factor draw. |
| 1 | Multimedia Priority Service (MPS) | 1st (leftmost) bit |
| 2 | Mission Critical Service (MCS) | 2nd bit |
| 11 | PLMN use (former Access Class 11) | 3rd bit |
| 12 | Security services (AC 12) | 4th bit |
| 13 | Public utilities (AC 13) | 5th bit |
| 14 | Emergency services (AC 14) | 6th bit |
| 15 | PLMN staff (AC 15) | 7th bit |
Table 13. Access identities and their bitmap positions TS 22.261 / TS 24.501 cl. 4.5.2. Value 0 in a bit position means not barred, which is the opposite of the intuitive reading and worth checking twice.
Access Category 0 -- mobile-originated signalling resulting from paging -- is never barred, by specification. This is what makes a heavily barred cell still show paging responses in the gNB log: the network can page a UE and the UE will answer, while the same UE cannot originate anything. A cell with normal paging response counts and near-zero MO access is behaving exactly as configured, not failing.
13. Failure Modes and What Each One Means
| What fails | Who detects it | What the UE does | What it points at |
|---|---|---|---|
cellBarred = barred | UE RRC | Exclude the cell for 300 s; intraFreqReselection sets the scope | Deliberate barring, or a gNB that barred itself after losing its N2 connection. A healthy-looking barred cell usually means the core is unreachable. |
| k_SSB above range (>23 FR1, >11 FR2) | UE RRC | Conclude SIB1 is not carried by this SSB; reinterpret pdcch-ConfigSIB1 as frequency-position information | Normal for an SSB placed only for measurement. Unexpected on a cell meant to be camped on. |
| CORESET#0 does not fit the carrier | Nobody | Cannot decode SIB1; treats the cell as barred for 300 s, silently | controlResourceSetZero whose N_RB exceeds the carrier, or whose offset pushes the low edge below the carrier's first RB. Check the index against the actual channel bandwidth (§4.1). |
| Wrong CORESET#0 table used at configuration time | Nobody | As above -- SIB1 never decodes | The table is chosen by the {SSB, PDCCH} SCS pair and the minimum channel bandwidth. A 30 kHz cell configured from the 15 kHz table gives plausible-looking numbers that are wrong. |
| Type0-PDCCH occasions land in uplink slots | Nobody | Cannot decode SIB1 on the affected beams only | searchSpaceZero versus tdd-UL-DL-ConfigurationCommon. Symptom: a cell that is dead from one direction (§5.2). |
dmrs-TypeA-Position wrong | UE PHY | PDSCH demodulation fails cleanly with CRC errors | A configuration error, not a coverage one. It also breaks MSG2 and MSG4, so RACH fails at step 2 for every UE. |
subCarrierSpacingCommon inconsistent with the actual initial BWP | UE PHY | SIB1 grant decodes, PDSCH does not | Configuration inconsistency between MIB and initialDownlinkBWP.genericParameters.subcarrierSpacing |
servingCellConfigCommon absent | UE RRC | Camp is possible; access is not -- there is no PRACH configuration | Legal for an SCell-only cell. On a cell meant to be accessed, it is a template that was never completed. |
trackingAreaCode absent for the selected PLMN | UE RRC | Use the cell for SCell / PSCell only; never select it | Symptom: plenty of measurement reports naming the cell, zero RACH (§7) |
cellReservedForOperatorUse = reserved | UE RRC | Behave as if barred unless the UE holds Access Identity 11 or 15 | Per-PLMN, so on a shared cell one operator's subscribers are excluded and another's are not |
q-RxLevMin misread as dBm at configuration time | Nobody | Either every audible cell is suitable, or none is | The 2 dBm unit. -70 means -140 dBm (S-criterion effectively off); -22 means -44 dBm (nothing is ever suitable). |
q-QualMin absent | Nobody | The Squal test always passes | Q_qualmin defaults to negative infinity. A cell with terrible SINR and adequate RSRP becomes suitable, and UEs camp on it and then fail establishment. |
connEstFailOffset absent | Nobody | Applies the 15 dB default -- the harshest available value | Omitting the field is not the neutral choice. A cell with two transient failures becomes 15 dB less attractive for up to 900 s. |
ss-PBCH-BlockPower wrong | Nobody | Every UE's open-loop PRACH power is wrong by the same amount | Looks like a coverage or PRACH-capacity problem in every metric you have (§10) |
ssb-PositionsInBurst inconsistent with what is transmitted | Nobody | Measures positions that carry nothing, or ignores beams that exist | Beam management degrades with no error anywhere. See the companion 12 Beam Failure Recovery document. |
t310 = ms0 or ms50 | Nobody | Any out-of-sync condition becomes an immediate radio link failure | An aggressive ue-TimersAndConstants. Symptom: RLF rates far above what the radio conditions justify (§11). |
Table 14. Sixteen MIB and SIB1 failure modes. In eleven of them nobody detects the fault: the UE draws a correct conclusion from wrong information and leaves, and the gNB never knows a UE was there.
Group the sixteen rows by symptom and there are only three: a cell that nobody accesses (rows 1-8), a cell that everybody accesses and nobody succeeds on (rows 11-13), and a cell that works unevenly across beams or power levels (rows 5, 14, 15). Matching the symptom to the group before reading fields is much faster than reading fields in order.
14. ASN.1: MIB and SIB1
-- TS 38.331, verbatim in structure; ... marks omitted members
BCCH-BCH-Message ::= SEQUENCE {
message BCCH-BCH-MessageType
}
BCCH-BCH-MessageType ::= CHOICE {
mib MIB,
messageClassExtension SEQUENCE {}
}
MIB ::= SEQUENCE {
systemFrameNumber BIT STRING (SIZE (6)),
subCarrierSpacingCommon ENUMERATED {scs15or60, scs30or120},
ssb-SubcarrierOffset INTEGER (0..15),
dmrs-TypeA-Position ENUMERATED {pos2, pos3},
pdcch-ConfigSIB1 PDCCH-ConfigSIB1,
cellBarred ENUMERATED {barred, notBarred},
intraFreqReselection ENUMERATED {allowed, notAllowed},
spare BIT STRING (SIZE (1))
} -- note: no extension marker
PDCCH-ConfigSIB1 ::= SEQUENCE {
controlResourceSetZero ControlResourceSetZero, -- INTEGER (0..15)
searchSpaceZero SearchSpaceZero -- INTEGER (0..15)
}Listing 1. MIB in full -- it is short enough to quote without abridging. The absence of an extension marker is what fixes the length at 23 bits and forces the spare bit.
SIB1 ::= SEQUENCE {
cellSelectionInfo SEQUENCE {
q-RxLevMin Q-RxLevMin, -- INTEGER (-70..-22)
q-RxLevMinOffset INTEGER (1..8) OPTIONAL,
q-RxLevMinSUL Q-RxLevMin OPTIONAL,
q-QualMin Q-QualMin OPTIONAL,
q-QualMinOffset INTEGER (1..8) OPTIONAL
} OPTIONAL,
cellAccessRelatedInfo CellAccessRelatedInfo,
connEstFailureControl ConnEstFailureControl OPTIONAL,
si-SchedulingInfo SI-SchedulingInfo OPTIONAL,
servingCellConfigCommon ServingCellConfigCommonSIB OPTIONAL,
ims-EmergencySupport ENUMERATED {true} OPTIONAL,
eCallOverIMS-Support ENUMERATED {true} OPTIONAL,
ue-TimersAndConstants UE-TimersAndConstants OPTIONAL,
uac-BarringInfo SEQUENCE {
uac-BarringForCommon UAC-BarringPerCatList OPTIONAL,
uac-BarringPerPLMN-List UAC-BarringPerPLMN-List OPTIONAL,
uac-BarringInfoSetList UAC-BarringInfoSetList,
uac-AccessCategory1-SelectionAssistanceInfo CHOICE {
plmnCommon UAC-AccessCategory1-SelectionAssistanceInfo,
individualPLMNList SEQUENCE (SIZE (2..maxPLMN)) OF
UAC-AccessCategory1-SelectionAssistanceInfo
} OPTIONAL
} OPTIONAL,
useFullResumeID ENUMERATED {true} OPTIONAL,
lateNonCriticalExtension OCTET STRING OPTIONAL,
nonCriticalExtension SIB1-v1610-IEs OPTIONAL
}
CellAccessRelatedInfo ::= SEQUENCE {
plmn-IdentityInfoList PLMN-IdentityInfoList,
cellReservedForOtherUse ENUMERATED {true} OPTIONAL,
...
}
PLMN-IdentityInfo ::= SEQUENCE {
plmn-IdentityList SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-Identity,
trackingAreaCode TrackingAreaCode OPTIONAL,
-- BIT STRING (SIZE (24))
ranac RAN-AreaCode OPTIONAL,
-- INTEGER (0..255)
cellIdentity CellIdentity,
-- BIT STRING (SIZE (36))
cellReservedForOperatorUse ENUMERATED {reserved, notReserved},
...
}
ConnEstFailureControl ::= SEQUENCE {
connEstFailCount ENUMERATED {n1, n2, n3, n4},
connEstFailOffsetValidity ENUMERATED {s30, s60, s120, s240, s300,
s420, s600, s900},
connEstFailOffset INTEGER (0..15) OPTIONAL
}
UE-TimersAndConstants ::= SEQUENCE {
t300 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000,
ms1500, ms2000},
t301 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000,
ms1500, ms2000},
t310 ENUMERATED {ms0, ms50, ms100, ms200, ms500, ms1000, ms2000},
n310 ENUMERATED {n1, n2, n3, n4, n6, n8, n10, n20},
t311 ENUMERATED {ms1000, ms3000, ms5000, ms10000, ms15000,
ms20000, ms30000},
n311 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10},
t319 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000,
ms1500, ms2000},
...
}
UAC-BarringInfoSet ::= SEQUENCE {
uac-BarringFactor ENUMERATED {p00, p05, p10, p15, p20, p25,
p30, p40, p50, p60, p70, p75,
p80, p85, p90, p95},
uac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128,
s256, s512},
uac-BarringForAccessIdentity BIT STRING (SIZE (7))
}Listing 2. SIB1 and the four IEs this document works through in detail, abridged from TS 38.331. ServingCellConfigCommonSIB and SI-SchedulingInfo are left as type references -- see §10 and the companion 17 System Information document respectively.
15. Illustrative Message 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.
One cell throughout: PCI 217, PLMN 310-410, band n8 (FR1 low), 15 kHz SSB and PDCCH subcarrier spacing, 20 MHz channel, four SSBs, cellIdentity 0x01A2B3C40, TAC 0x4A2F1.
15.1 The MIB, decoded from the PBCH payload
08:15:02.104 [PHY] SSB detected PCI 217 SS-RSRP -102.0 dBm
SS-RSRQ -11.0 dB SS-SINR 14.2 dB
PBCH DMRS hypothesis i_SSB = 2 correlated -> SSB index 2,
half frame 0 (L_max = 4, so i_SSB folds in n_hf)
08:15:02.104 [PHY] PBCH payload, 32 bits, descrambled
0000 0110 0110 0100 1100 0100 0100 0000
|-- BCCH-BCH-Message, 24b --| |8 PHY b|
08:15:02.104 [RRC-DL-BCCH] BCCH-BCH-Message
message: mib -- CHOICE bit = 0
systemFrameNumber ........... 000011 -- 6 MSBs = 3
subCarrierSpacingCommon ..... scs15or60 -> 15 kHz (FR1)
ssb-SubcarrierOffset ........ 6 -- 4 LSBs of k_SSB
dmrs-TypeA-Position ......... pos2
pdcch-ConfigSIB1 ............ 152
controlResourceSetZero .... 9
searchSpaceZero ........... 8
cellBarred .................. notBarred
intraFreqReselection ........ allowed
spare ....................... 0
08:15:02.104 [PHY] the eight appended bits
SFN LSBs 4,3,2,1 ............ 0100 -- = 4
half frame .................. 0
k_SSB MSB ................... 0 -- FR1, L_max=4
reserved .................... 00
08:15:02.104 [RRC] assembled values
SFN = (000011 << 4) | 0100 = 0000110100b = 52
k_SSB = (0 << 4) | 6 = 6 -- 6 x 15 kHz subcarriers
-- Two things in this trace are NOT in the MIB: the SSB index (from the
-- DMRS hypothesis) and the 4 SFN LSBs plus the k_SSB MSB (from the
-- appended bits). An analyser that prints them alongside the MIB is
-- combining three sources.Listing 3. A MIB decode with the physical-layer contributions kept separate. The SFN assembly is the step most often skipped, and it is what makes every subsequent timing calculation possible.
15.2 From pdcch-ConfigSIB1 to a monitoring occasion
08:15:02.105 [RRC] pdcch-ConfigSIB1 = 152 -> (9, 8)
{SS/PBCH block, PDCCH} SCS = {15, 15} kHz
band n8, minimum channel bandwidth 5 MHz
-> TS 38.213 Table 13-1
controlResourceSetZero = 9
multiplexing pattern ...... 1
N_RB_CORESET .............. 48
N_symb_CORESET ............ 2
offset .................... 16 RB
searchSpaceZero = 8 -> TS 38.213 Table 13-11
O ......................... 0
M ......................... 1
first symbol index ........ 1
08:15:02.105 [RRC] CORESET#0 frequency position
offsetToPointA ............ 42
SSB lowest RB (CRB) ....... 42
CORESET#0 lowest RB ....... 42 - 16 = 26
CORESET#0 span ............ CRB 26 .. 73 (48 RB)
carrier span .............. CRB 0 .. 105
(106 PRB, 20 MHz @15 kHz)
-> 26 >= 0 and 73 <= 105: CORESET#0 fits OK
-- Two comparisons. S15.6 is the same cell after the carrier was
-- narrowed and this check was not repeated.
08:15:02.105 [RRC] Type0-PDCCH monitoring occasions, mu = 0, N_slot = 10
n_0 = (O x 2^mu + FLOOR(i x M)) mod N_slot
i = 0 -> n_0 = 0, even SFN, slots 0 and 1
i = 1 -> n_0 = 1, even SFN, slots 1 and 2
i = 2 -> n_0 = 2, even SFN, slots 2 and 3 <- our SSB
i = 3 -> n_0 = 3, even SFN, slots 3 and 4
-> monitor slots 2 and 3 of even radio frames,
symbols 1 and 2, SI-RNTI 0xFFFFListing 4. The full derivation, including the carrier-fit check that §13 row 3 is about. It costs one subtraction and one addition, and it prevents a cell that no UE can use.
15.3 SIB1, decoded
08:15:02.148 [PHY] SFN 54 slot 2 sym 1 PDCCH DCI 1_0, CRC = SI-RNTI
-> PDSCH 28 PRB, MCS 4, TBS 1288 bits
08:15:02.149 [RRC-DL-BCCH] SIB1
cellSelectionInfo
q-RxLevMin ......................... -60 -- = -120 dBm
q-RxLevMinOffset ................... (absent) -- = 0 dB
q-QualMin .......................... -18 -- dB
q-QualMinOffset .................... (absent) -- = 0 dB
cellAccessRelatedInfo
plmn-IdentityInfoList
[1] plmn-IdentityList
[1] mcc 310 mnc 410
trackingAreaCode ............... 0x4A2F1
ranac ......................... 12
cellIdentity .................. 0x01A2B3C40 -- 36 bits
cellReservedForOperatorUse .... notReserved
cellReservedForOtherUse ............ (absent)
connEstFailureControl
connEstFailCount ................... n2
connEstFailOffsetValidity .......... s300
connEstFailOffset .................. 10 -- dB
si-SchedulingInfo .................... (see companion doc 17)
servingCellConfigCommon
downlinkConfigCommon
frequencyInfoDL
offsetToPointA ................... 42
initialDownlinkBWP
genericParameters
locationAndBandwidth ............ 28875 -- 106 PRB from PRB 0
subcarrierSpacing ............... kHz15
bcch-Config
modificationPeriodCoeff .......... n4
pcch-Config
defaultPagingCycle ............... rf128
uplinkConfigCommon
frequencyInfoUL
p-Max ........................... 23 -- dBm
initialUplinkBWP
rach-ConfigCommon ............... (see companion doc 03)
timeAlignmentTimerCommon ......... ms1920
ssb-PositionsInBurst
inOneGroup ...................... 11110000 -- SSB 0..3 transmitted
ssb-PeriodicityServingCell ........ ms20
ss-PBCH-BlockPower ................ 18 -- dBm EPRE
n-TimingAdvanceOffset ............. (absent)
ims-EmergencySupport ................ true
ue-TimersAndConstants
t300 ms1000 t301 ms1000 t310 ms1000 n310 n10
t311 ms10000 n311 n1 t319 ms1000
uac-BarringInfo
uac-BarringForCommon
[1] accessCategory 7 uac-barringInfoSetIndex 2
uac-BarringInfoSetList
[1] uac-BarringFactor p95 uac-BarringTime s4
uac-BarringForAccessIdentity 0000000
[2] uac-BarringFactor p40 uac-BarringTime s32
uac-BarringForAccessIdentity 0111111Listing 5. A complete, realistic SIB1. Every value in it is used somewhere in §7 to §12, and the uac-BarringInfoSetList here is the one the worked barring check in §12.1 uses.
15.4 The cell selection decision
08:15:02.150 [RRC] cell suitability evaluation, PCI 217
MIB cellBarred .................. notBarred PASS
SIB1 acquired ................... yes PASS
cellReservedForOtherUse ......... absent PASS
selected PLMN 310-410 in list ... yes, index 1 PASS
cellReservedForOperatorUse ...... notReserved PASS
trackingAreaCode ................ 0x4A2F1 present PASS
TAI 310-410-4A2F1 in forbidden lists .. no PASS
S-criterion
Q_rxlevmeas ................... -102.0 dBm
q-RxLevMin x 2 ................ -120.0 dBm
q-RxLevMinOffset x 2 .......... 0.0 dB
p-Max ......................... 23 dBm
P_PowerClass .................. 23 dBm (class 3)
Pcompensation = max(23-23,0) .. 0.0 dB
Qoffset_temp .................. 0.0 dB
Srxlev = -102 - (-120) - 0 - 0 = +18.0 dB PASS
Q_qualmeas .................... -11.0 dB
q-QualMin ..................... -18 dB
Squal = -11 - (-18) - 0 = +7.0 dB PASS
08:15:02.150 [RRC] cell 217 is SUITABLE -> camp on it
08:15:02.151 [RRC] adopt ue-TimersAndConstants from SIB1
t300 1000 ms, t310 1000 ms, n310 10, t311 10000 msListing 6. Every gate in figure 7, evaluated in order, with the arithmetic of §8 shown. A log in this shape answers the "why did the UE not camp here" question in one screen.
15.5 The access barring check
08:17:44.902 [NAS] MO data attempt -> Access Category 7,
Access Identities held: { 0 }
08:17:44.902 [RRC] UAC check, PCI 217, selected PLMN index 1
uac-BarringPerPLMN-List ......... absent
-> use uac-BarringForCommon
accessCategory 7 -> uac-barringInfoSetIndex 2
set[2] uac-BarringFactor ........ p40 (0.40)
uac-BarringTime .......... s32 (32 s)
uac-BarringForAccessIdentity 0111111
access identity check
bitmap covers identities 1,2,11,12,13,14,15
UE holds none of them -> no exemption, must draw
rand1 = 0.5473 >= 0.40 -> BARRED
rand2 = 0.6200
T390(cat 7) = (0.7 + 0.6 x 0.6200) x 32 = 34.30 s
08:17:44.902 [RRC] access barred for Access Category 7, T390 started
-- Access Category 0 is unaffected: a page can still be
-- answered during these 34.3 s
08:17:52.310 [RRC] paging received -> Access Category 0, never barred
08:17:52.310 [RRC] RRCSetupRequest, establishmentCause mt-Access
08:18:19.204 [RRC] T390(cat 7) expired -> Access Category 7 allowed againListing 7. The barring check and its selective effect. A cell in this state shows healthy paging response counts and almost no MO access, which is correct behaviour and not a fault.
15.6 Failure path: CORESET#0 outside the carrier
-- Same MIB and same SSB position as S15.1, but the DL carrier was
-- narrowed from 106 PRB to 52 PRB (20 MHz -> 10 MHz) while
-- pdcch-ConfigSIB1 was left at 152 and offsetToPointA at 42.
09:02:11.070 [PHY] SSB detected PCI 217 SS-RSRP -98.0 dBm
09:02:11.070 [RRC] MIB decoded, cellBarred = notBarred
09:02:11.070 [RRC] pdcch-ConfigSIB1 152 -> CORESET#0 index 9
N_RB_CORESET 48, offset 16
SSB lowest CRB .................. 42
CORESET#0 span .................. CRB 26 .. 73
carrier .......................... CRB 0 .. 51
(52 PRB, 10 MHz @15 kHz)
-> CORESET#0 requires CRB up to 73; the carrier ends at 51
09:02:11.070 [PHY] monitoring slots 2,3 of even SFN, symbols 1-2
09:02:11.230 [PHY] no PDCCH candidate decoded with SI-RNTI
09:02:11.550 [PHY] no PDCCH candidate decoded with SI-RNTI
09:02:12.190 [PHY] no PDCCH candidate decoded with SI-RNTI
09:02:12.190 [RRC] SIB1 acquisition failed
-> TS 38.331 cl. 5.2.2.1: consider the cell as barred
-> bar for 300 s; intraFreqReselection = allowed, so other
cells on this frequency remain candidates
09:02:12.191 [RRC] no other suitable cell on this frequency
-> search other frequencies / RATs
-- gNB-side evidence over the same interval:
PRACH preambles received ................. 0
RRC connection establishment attempts .... 0
SIB1 transmissions ....................... normal
alarms, error counters, KPI degradation ... none
-- The cell is transmitting SSB and SIB1 perfectly. It is simply
-- unreachable, and the only place that shows is the subtraction
-- 42 - 16 = 26, 26 + 48 = 74 > 52.Listing 8. The most consequential failure in this document, in full. A bandwidth change that left pdcch-ConfigSIB1 alone produces a cell that looks perfect from the network side and is invisible from the UE side.
16. Release Deltas: Rel-15 to Rel-18
| Release | Change | Why it matters when reading MIB or SIB1 |
|---|---|---|
| Rel-15 | MIB as defined in §2, with no extension marker; pdcch-ConfigSIB1; SIB1 with cellAccessRelatedInfo, cellSelectionInfo, connEstFailureControl, si-SchedulingInfo, servingCellConfigCommon, ue-TimersAndConstants, uac-BarringInfo | The baseline. The MIB has not changed since Rel-15 and cannot -- there is no extension marker and no spare capacity beyond one bit. |
| Rel-16 | SIB1-v1610-IEs: idleModeMeasurementsEUTRA and idleModeMeasurementsNR, posSI-SchedulingInfo, hsdn-Cell, uac-BarringInfo extensions for NPN | SIB1 grew a non-critical extension chain. A Rel-15 decoder reads the Rel-15 part correctly and silently ignores the rest. |
| Rel-16 | NPN support: npn-IdentityInfoList with CAG and SNPN identities alongside plmn-IdentityInfoList | A cell can offer network identities that are not PLMNs. A decoder that only shows plmn-IdentityInfoList will report a cell as offering fewer networks than it does. |
| Rel-16 | useFullResumeID and the 40-bit I-RNTI | Changes which RRCResumeRequest variant the UE sends. See the companion 14 RRC States document. |
| Rel-17 | RedCap: intraFreqReselectionRedCap, cellBarredRedCap (separate barring for RedCap UEs), separate initial BWPs | A cell can be barred for RedCap UEs and open for everyone else. The MIB's cellBarred is no longer the whole answer, and it is the field everybody looks at first. |
| Rel-17 | NTN: SIB19 with ephemeris and ta-Common; ntn-Config references in the common configuration | On an NTN cell, SIB1 alone is not enough to transmit uplink -- SIB19 is required as well |
| Rel-17 | Slice-based cell reselection (SIB16) and sliceInfoList support in the common configuration | Reselection priorities can differ per slice, so two UEs reading the same SIB1 can rank the same neighbours differently |
| Rel-17 | eDRX in RRC_IDLE, with extended defaultPagingCycle handling in pcch-Config | A longer paging cycle also lengthens the BCCH modification period, because the two are multiplied |
| Rel-18 | Further non-critical extensions to SIB1 and further SIB types in SIB-TypeInfo | Confirm which release your decoder was built against before treating an unrecognised extension as corruption |
Table 15. MIB and SIB1 changes by release. The asymmetry is the point: the MIB is frozen by its own encoding, while SIB1 has grown a long non-critical extension chain that a decoder must be built for.
Rel-17 introduced separate barring for RedCap UEs. A cell can set cellBarredRedCap while the MIB's cellBarred reads notBarred, and a RedCap device will then refuse a cell that every other device uses happily. If a RedCap UE will not attach where a normal UE does, this is the first field to check, and it is in SIB1 rather than in the MIB where instinct sends you.
17. Reading MIB and SIB1 in Logs: A Checklist
1. Split `pdcch-ConfigSIB1` immediately. Integer-divide by 16 for controlResourceSetZero, take the remainder for searchSpaceZero. A single decimal number in a log tells you nothing until you do (§4).
2. Confirm which CORESET#0 table applies before using a row. It is chosen by the {SS/PBCH block, PDCCH} subcarrier-spacing pair and the band's minimum channel bandwidth. Using the wrong table produces plausible numbers and a cell nobody can decode.
3. Check that CORESET#0 fits the carrier. Compute the SSB's lowest common RB, subtract the offset, add N_RB, and compare both ends against the carrier. This is one subtraction and one addition and it catches the single worst failure in this document (§15.6).
4. Compute the Type0-PDCCH occasions for every SSB index, not just #0, and cross-check them against tdd-UL-DL-ConfigurationCommon. Beam-specific SIB1 failure is invisible in aggregate statistics (§5.2).
5. Multiply `q-RxLevMin` by two before doing anything with it. Same for q-RxLevMinOffset. q-QualMin and q-QualMinOffset are plain dB. Two different scalings inside one IE (§8).
6. Check whether `q-QualMin` is present at all. Absent means Q_qualmin is negative infinity and the quality criterion is disabled, which lets UEs camp on cells they cannot use.
7. Read `connEstFailOffset` as 15 dB when it is absent, not as zero. Absence is the harshest setting available.
8. Check `trackingAreaCode` for the selected PLMN entry. Its absence means the cell is SCell/PSCell-only, which explains measurement activity with no access attempts (§7).
9. Read all three barring mechanisms, not just `cellBarred`. cellReservedForOtherUse bars the whole cell; cellReservedForOperatorUse bars it per PLMN for UEs without Access Identity 11 or 15; and from Rel-17 cellBarredRedCap bars it for one UE class only.
10. Resolve `selectedPLMN-Identity` against the SIB1 from the same cell. It is a 1-based index into the flattened PLMN list, not a PLMN value, and a different cell's SIB1 will resolve it to the wrong operator.
11. Sanity-check `ss-PBCH-BlockPower` against the cell's actual EIRP. Every UE's open-loop PRACH power derives from it, so an error here looks exactly like a coverage problem (§10).
12. Read `t310` and `n310` before investigating an RLF rate. ms0 and ms50 produce radio link failures from conditions a normal cell absorbs (§11).
13. For UAC, read the access-identity bitmap first and remember that 0 means not barred. Then check whether Access Category 0 traffic is present -- if paging responses are healthy and MO access is near zero, the cell is barred as configured, not broken (§12).
18. Glossary
| Term | Expansion | Meaning in this document |
|---|---|---|
| MIB | Master Information Block | The 23-bit RRC message inside the 24-bit BCCH-BCH-Message. Fixed since Rel-15 and unable to grow. |
| SIB1 | System Information Block 1 | Also called RMSI. Everything the UE needs to decide about the cell and to access it. |
| PBCH | Physical Broadcast Channel | Carries the 32-bit payload: the 24-bit RRC message plus eight physical-layer bits (§2.1). |
| k_SSB | ssb-SubcarrierOffset | Frequency offset from subcarrier 0 of common RB 0 to subcarrier 0 of the SSB. 5 bits on FR1, 4 on FR2. |
| CORESET#0 | Control Resource Set 0 | The control resource set in which the SIB1 grant appears. Configured entirely by controlResourceSetZero plus k_SSB. |
| searchSpaceZero | -- | The Type0-PDCCH common search space configuration: a slot offset O, a count M of occasions per slot, and a first symbol index. |
| Type0-PDCCH CSS | Common Search Space | Where the SIB1 grant is monitored. Type0A is for Other SI, Type1 for the RAR, Type2 for paging TS 38.213 cl. 10.1. |
| L_max | -- | The maximum number of SSB candidate positions in a burst: 4 or 8 on FR1, 64 on FR2. It decides what the three conditional PBCH bits carry. |
| Srxlev / Squal | -- | The level and quality margins of the cell suitability criterion. Both must exceed zero (§8). |
| Q_rxlevmin / Q_qualmin | -- | The thresholds those margins are measured against, from q-RxLevMin (x2 dBm) and q-QualMin (dB). |
| Pcompensation | -- | max(P_EMAX - P_PowerClass, 0). The cell raising its own bar for a UE that cannot transmit at the power the cell assumes. |
| Qoffset_temp | -- | A temporary penalty applied to a cell's Srxlev and Squal after repeated establishment failures (§9). |
| NCGI | NR Cell Global Identity | PLMN identity plus the 36-bit cellIdentity. Globally unique. |
| UAC | Unified Access Control | The SIB1 barring mechanism: access identity for who you are, access category for what you are doing (§12). |
| T390 | -- | The per-access-category UAC back-off timer, (0.7 + 0.6 x rand) x uac-BarringTime. |
| RMSI | Remaining Minimum System Information | The TS 38.300 name for SIB1. Common in vendor logs. |
19. References
- 3GPP TS 38.331 -- RRC protocol specification. Clause 5.2.2.1 (SI acquisition, including the requirement to treat the cell as barred on SIB1 failure), 5.3.14 (unified access control), 6.2.2 (message definitions:
BCCH-BCH-Message,MIB,SIB1), 6.3.2 (IE definitions:CellAccessRelatedInfo,PLMN-IdentityInfo,ConnEstFailureControl,PDCCH-ConfigSIB1,ServingCellConfigCommonSIB,UAC-BarringInfoSet,UE-TimersAndConstants), 7.1 (UE timers and constants defaults). - 3GPP TS 38.212 -- Multiplexing and channel coding. Clause 7.1.1 (PBCH payload generation and the eight appended bits), 7.1.2 (PBCH scrambling), 7.1.3-7.1.5 (CRC, polar coding, rate matching).
- 3GPP TS 38.211 -- Physical channels and modulation. Clause 7.4.1.4 (PBCH DM-RS, including the sequence initialisation that carries the SSB index), 7.4.3 (SS/PBCH block structure and candidate positions).
- 3GPP TS 38.213 -- Physical layer procedures for control. Clause 10.1 (search space sets and the common search space types), clause 13 (CORESET#0 and searchSpaceZero, Tables 13-1 to 13-10 for the control resource set and Tables 13-11 to 13-13 for the monitoring occasions).
- 3GPP TS 38.304 -- UE procedures in idle mode and RRC inactive state. Clause 5.2.3.2 (cell selection criterion S), 5.2.4 (cell reselection), 5.3.1 (cell status and barring, including
cellReservedForOperatorUsehandling). - 3GPP TS 38.101-1 / 38.101-2 -- UE radio transmission and reception, for the power classes that P_PowerClass in the Pcompensation term refers to, and for the per-band minimum channel bandwidths that select the CORESET#0 table.
- 3GPP TS 24.501 -- NAS protocol for 5GS. Clause 4.5.2 (access categories and access identities, the NAS half of unified access control).
- 3GPP TS 22.261 -- Service requirements for the 5G system, for the definitions of the access identities in §12.
- 3GPP TS 23.003 -- Numbering, addressing and identification. Clause 19.6 (NR Cell Global Identity and the gNB ID / cell ID split within the 36-bit
cellIdentity).
Companion documents in this set
- 17 System Information -- how SIB2 and beyond are scheduled, notified and re-acquired; the
si-SchedulingInfobranch this document leaves as a type reference. - 02 Radio Frame Structure -- SFN, half-frames, slots per frame, and the SSB candidate positions the L_max discussion of §2.1 depends on.
- 03 Random Access -- the
rach-ConfigCommoninsideinitialUplinkBWP, the open-loop power formula that consumesss-PBCH-BlockPower, and theconnEstFailReportof §9. - 01 Registration Process -- what the UE does with SIB1 once it has it, and the cell-selection and barring gates of figure 7 in their procedural context.
- 16 RLM and RLF -- what
t310,n310,t311andn311from §11 actually govern. - 19 Paging --
pcch-ConfiganddefaultPagingCyclefrom §10, and the paging occasion arithmetic they drive. - 14 RRC States --
useFullResumeIDand the RRC_INACTIVE resume identity of §6. - 12 Beam Failure Recovery -- what
ssb-PositionsInBurstfrom §10 means for beam management. - 20 Measurements and Events -- the reselection thresholds and offsets SIB2 to SIB5 carry, which build on the S-criterion of §8.