Skip to content

RACH

Summary
  • RACH (Random Access Channel) is the procedure a UE uses to establish uplink synchronization and request access to a cell.
  • It allows a UE to:
    • Move from "I can hear the cell" (after SSB detection) to "the cell can hear me"
    • Obtain uplink timing alignment (Timing Advance)
    • Request and be assigned a C-RNTI
    • Resolve contention if multiple UEs attempt access at the same time

Think of RACH as:

"Hello gNB, I'd like to talk. Here's my timing — please tell me how to adjust it and give me an identity."

RACH Procedure Overview

4-Step Random Access Sequence

Figure 1. 4-Step Random Access Message Sequence1

RACH is triggered in several scenarios, not just initial access:3

  • Initial access from RRC_IDLE
  • RRC re-establishment after radio link failure
  • Handover to a new cell
  • DL or UL data arrival while uplink is not synchronized
  • Beam failure recovery
  • Scheduling request when no PUCCH resource is configured
  • Transition from RRC_INACTIVE
  • Timing advance re-acquisition for an SCell (e.g., in carrier aggregation)
If you are confused...

RACH sits right after SSB in the access flow. The UE has already detected a cell and read the MIB/SIB1 — RACH is the next step, where the UE actually announces itself and gets synchronized for uplink transmission. The rest of this page walks through the 4-step procedure first, since it's the foundation, then the 2-step variant introduced later.

Contention Based vs. Contention Free

Contention Based vs. Contention Free

Figure 2. Contention Based vs. Contention Free2

Random access always runs in one of two modes, chosen based on why the procedure was triggered:

  • Contention-Based Random Access (CBRA) — used for initial access, RRC re-establishment, or any scenario where the network hasn't already dedicated resources to this specific UE. The UE picks a preamble at random from a shared pool, so more than one UE may select the same preamble in the same PRACH occasion — which is exactly why a contention-resolution step exists later in the procedure.
  • Contention-Free Random Access (CFRA) — used when the network already knows which specific UE needs access, most commonly during handover or beam failure recovery. The gNB assigns a dedicated preamble (and, in 2-step RA, a dedicated PUSCH resource too) directly to that UE, so collision is structurally impossible — no other UE can pick the same resource — and the later contention-resolution step can be skipped entirely.
Rule of thumb
  • If the network already knows exactly which UE is about to show up (handover, beam recovery) → CFRA.
  • If the UE is showing up "cold" (initial access, re-establishment) → CBRA.

4-Step Random Access (Type 1)

Msg1 – Random Access Preamble

The UE transmits a preamble sequence on the PRACH, selected either randomly from a shared pool (contention-based) or assigned by the network (contention-free). See PRACH Preamble Structure below for how the preamble sequence itself is generated and how a preamble index is selected from the pool.

Purpose

"gNB, I'm here — can you hear me and tell me how far off my timing is?"

Quick reminder

See Contention Based vs. Contention Free above for how preamble selection differs between CBRA and CFRA — that choice is made right here, at Msg1.

Msg2 – Random Access Response (RAR)

The gNB detects the preamble and responds with an RAR carrying the Timing Advance command, an uplink grant for Msg3, and a Temporary C-RNTI. Because the UE has no identity of its own yet, the PDCCH scheduling this RAR is addressed to an RA-RNTI instead — see RA-RNTI Derivation for how the UE knows which RA-RNTI to monitor.

Purpose

"I heard you — here's your timing correction, an uplink grant, and a temporary identity to use next."

Using the uplink grant from Msg2, the UE transmits its identity (e.g., an RRC Setup Request or C-RNTI, depending on the trigger) on the PUSCH.

Purpose

"Here's who I am and what I'm asking for."

Msg4 – Contention Resolution

The gNB echoes back the UE identity received in Msg3. Only the UE that recognizes its own identity considers contention resolved and promotes its Temporary C-RNTI to a full C-RNTI; other UEs that collided restart the procedure.

Purpose

"Confirmed — you're the one I heard. You're now connected."

What happens on collision?

If two UEs pick the same preamble in the same PRACH occasion, the gNB may fail to decode either one (no RAR received, both UEs retry), or successfully decode one and not the other (only the successful UE recognizes its identity in Msg4; the other silently retries from Msg1).

2-Step Random Access (Type 2)

4-Step vs. 2-Step Random Access Message Sequence (Contention Based)

Figure 3: 4-Step vs. 2-Step Random Access Message Sequence (Contention Based)4

2-step RA collapses the four messages into two, at the cost of needing more resources up front:

Message Combines Direction
MsgA Preamble (like Msg1) + payload (like Msg3) UE → gNB
MsgB Random Access Response + Contention Resolution (like Msg2 + Msg4) gNB → UE

Table 1. 2-step RA summary

Purpose

"Let's skip the round trip — here's my preamble and my request together. Just confirm both at once."

Both CBRA and CFRA exist in 2-step RA too, but the mechanics shift slightly since Msg1 and Msg3 are no longer separate events.

Contention Based

In 2-step CBRA, the UE selects both a preamble (PRACH) and a payload resource (PUSCH) from shared, contention-based pools, and transmits them together as MsgA — the payload is typically a CCCH SDU (for a UE with no existing identity) or a C-RNTI (for a UE that already has one).5

The gNB responds with MsgB, which folds together the roles of Msg2 and Msg4. If a CCCH SDU was sent in the MsgA payload, contention is resolved by checking whether the identity echoed back in MsgB matches what the UE sent; if a C-RNTI was used, resolution is simply confirmed by receiving a PDCCH addressed to that C-RNTI.

If the gNB detects the preamble but can't decode the payload, it can still respond with a fallback RAR — the procedure then continues as ordinary 4-step RA from Msg3 onward, rather than failing outright.

Contention Free

In 2-step CFRA, the gNB assigns the UE a dedicated preamble and a dedicated PUSCH resource (and, where relevant, a specific RACH Occasion) for the MsgA transmission — removing collision risk on both the preamble and the payload, not just the preamble.5

Because there's nothing to contend over, the procedure completes as soon as the UE receives a PDCCH addressed to its C-RNTI, or receives fallback information tied to the preamble it transmitted. This makes 2-step CFRA a natural fit for the same triggers as 4-step CFRA — handover and beam failure recovery — but with the latency savings of the 2-step flow.4

PRACH Preamble Structure

Before a UE can transmit anything meaningful, it needs a preamble the gNB can reliably detect — even when several UEs might transmit at the same time, and even before the network knows anything about who's transmitting.

The preamble sequence transmitted in Msg1/MsgA is generated from a Zadoff-Chu (ZC) sequence, a family of complex-valued sequences with constant amplitude and, for prime lengths, ideal periodic autocorrelation — first described by Chu in 1972,6 long before cellular RACH existed, and later adopted for LTE and NR because those correlation properties are exactly what preamble detection and timing estimation need.

\[ x_u(n) = e^{-j \pi u \, n (n+1) / N_{ZC}}, \quad 0 \leq n \leq N_{ZC}-1 \]

where \(u\) is the root sequence index and \(N_{ZC}\) is the sequence length.

Different cyclic shifts of the same root sequence produce additional, quasi-orthogonal preambles — this is what allows a single root to generate a full set of usable preambles (up to 64 per cell) without needing a unique root for each one.

Preamble Formats

Family Sequence length \(L_{RA}\) Subcarrier spacing Typical use case
Long (Format 0–3) 839 1.25 kHz or 5 kHz Large cells, FR1 — inherited conceptually from LTE
Short (Format A1–A3, B1–B4, C0, C2) 139 15 / 30 kHz (FR1), 60 / 120 kHz (FR2) Small cells, dense deployments, both FR1 and FR2

Table 2. Preamble Formats7

Ncs and restricted sets

\(N_{cs}\) (zero-correlation zone) defines the cyclic-shift spacing between preambles derived from the same root sequence, and is configured via zeroCorrelationZoneConfig. A larger \(N_{cs}\) supports a larger cell radius (more room for round-trip delay) at the cost of fewer available preambles per root sequence — this is the same fundamental trade-off LTE PRACH planning uses.7

RACH Occasions & PRACH Configuration

RACH preambles aren't transmitted just anywhere — they occupy specific, periodically recurring time-frequency resources called RACH Occasions (ROs), defined by the RRC parameter prach-ConfigurationIndex (broadcast in SIB1 via rach-ConfigCommon) together with msg1-FDM (frequency-domain occasions per slot) and msg1-FrequencyStart.

How does the UE know which RO and preamble to use?

Just like SSB beam sweeping determines which SSB index gives the UE the best signal, that same SSB index maps to a specific set of ROs and preambles, configured via ssb-perRACH-OccasionAndCB-PreamblesPerSSB. This closes the loop opened in the SSB page:

  1. UE measures all SSBs, picks the one with best RSRP
  2. That SSB's index determines the RO/preamble the UE must use for Msg1
  3. The gNB then knows which beam to use for Msg2/RAR, since it already knows which SSB (and therefore which beam) the UE selected

This is why the RACH procedure doesn't need a separate beam-discovery step — beam correspondence was already established during SSB detection.

RA-RNTI Derivation

Msg2 (or MsgB, for 2-step RA) can't be addressed to the UE's own identity, because at this point in the procedure the UE doesn't have one yet. Instead, the gNB schedules it on PDCCH using a temporary identity — the RA-RNTI — computed purely from the time/frequency location of the PRACH occasion the UE transmitted on. Since the UE already knows exactly when and where it sent its preamble, it can independently compute the same RA-RNTI value and monitor PDCCH for a match, without ever having been told the value explicitly.

Per TS 38.321, RA-RNTI is derived as:

\[ \text{RA-RNTI} = 1 + s_{id} + 14 \times t_{id} + 14 \times 80 \times f_{id} + 14 \times 80 \times 8 \times ul\_carrier\_id \]

Where:

  • \(s_{id}\): index of the first OFDM symbol of the PRACH occasion (\(0 \leq s_{id} < 14\))
  • \(t_{id}\): index of the first slot of the PRACH occasion within a system frame (\(0 \leq t_{id} < 80\))
  • \(f_{id}\): index of the PRACH occasion in the frequency domain (\(0 \leq f_{id} < 8\))
  • \(ul\_carrier\_id\): 0 for the normal uplink (NUL) carrier, 1 for the supplementary uplink (SUL) carrier
Why this matters

RA-RNTI is what makes it possible for the gNB to schedule Msg2/MsgB before the UE has any assigned identity at all — the "identity" being used is really just a fingerprint of when and where the UE showed up, not who it is. Contention resolution (Msg4/MsgB payload matching) is the step that later confirms who actually showed up.

In 2-step RA, MsgB is addressed similarly, using an RA-RNTI-derived identity computed from the MsgA PRACH occasion in the same way.

RACH Information Elements

Unlike LTE, which signals PRACH parameters through a separate PRACH-Config IE alongside RACH-ConfigCommon, NR folds everything — preamble pool, power ramping, response window, and the PRACH time/frequency resource itself — into a single nested pair of IEs: RACH-ConfigCommon (cell-wide, broadcast in SIB1) wrapping RACH-ConfigGeneric (the physical-layer PRACH resource and timing/power parameters). There's no standalone PRACH-Config IE in NR the way there is in TS 38.331.8

QXDM Tip

In QXDM/QCAT, the decoded RACH-ConfigCommon values (preamble pool size, prach-ConfigurationIndex, power ramping step, RAR window) show up inside the decoded SIB1 RRC OTA message. On the MAC/PHY side, look for the RACH attempt/trigger log packets to see the actual preamble index, RA-RNTI, and RAR outcome for each attempt — cross-referencing the two lets you confirm the UE is using the resource the cell actually broadcast.

RACH Message Catalog

IE
Purpose
RACH-ConfigCommon The IE RACH-ConfigCommon is used to specify the cell specific random-access parameters.
RACH-ConfigCommonTwoStepRA The IE RACH-ConfigCommonTwoStepRA is used to specify cell specific 2-step random-access type parameters.
RACH-ConfigDedicated The IE RACH-ConfigDedicated is used to specify the dedicated random access parameters.
RACH-ConfigGenericTwoStepRA The IE RACH-ConfigGenericTwoStepRA is used to specify the 2-step random access type parameters.
RACH-ConfigGeneric The IE RACH-ConfigGeneric is used to specify the random-access parameters both for regular random access as well as for beam failure recovery.

Table 3. RACH Message Catalog

RACH Message ASN.1 Examples

RACH-ConfigCommon
RACH-ConfigCommon ::=               SEQUENCE {
    rach-ConfigGeneric                  RACH-ConfigGeneric,
    totalNumberOfRA-Preambles           INTEGER (1..63)                                                     OPTIONAL,   -- Need S
    ssb-perRACH-OccasionAndCB-PreamblesPerSSB   CHOICE {
        oneEighth                                   ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        oneFourth                                   ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        oneHalf                                     ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        one                                         ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        two                                         ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32},
        four                                        INTEGER (1..16),
        eight                                       INTEGER (1..8),
        sixteen                                     INTEGER (1..4)
    }                                                                                                       OPTIONAL,   -- Need M

    groupBconfigured                    SEQUENCE {
        ra-Msg3SizeGroupA                   ENUMERATED {b56, b144, b208, b256, b282, b480, b640,
                                                        b800, b1000, b72, spare6, spare5,spare4, spare3, spare2, spare1},
        messagePowerOffsetGroupB            ENUMERATED { minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18},
        numberOfRA-PreamblesGroupA          INTEGER (1..64)
    }                                                                                                       OPTIONAL,   -- Need R
    ra-ContentionResolutionTimer            ENUMERATED { sf8, sf16, sf24, sf32, sf40, sf48, sf56, sf64},
    rsrp-ThresholdSSB                       RSRP-Range                                                      OPTIONAL,   -- Need R
    rsrp-ThresholdSSB-SUL                   RSRP-Range                                                      OPTIONAL,   -- Cond SUL
    prach-RootSequenceIndex                 CHOICE {
        l839                                    INTEGER (0..837),
        l139                                    INTEGER (0..137)
    },
    msg1-SubcarrierSpacing                  SubcarrierSpacing                                               OPTIONAL,   -- Cond L139
    restrictedSetConfig                     ENUMERATED {unrestrictedSet, restrictedSetTypeA, restrictedSetTypeB},
    msg3-transformPrecoder                  ENUMERATED {enabled}                                            OPTIONAL,   -- Need R
    ...,
    [[
    ra-PrioritizationForAccessIdentity-r16  SEQUENCE {
        ra-Prioritization-r16                   RA-Prioritization,
        ra-PrioritizationForAI-r16              BIT STRING (SIZE (2))
    }                                                                                                       OPTIONAL,   -- Cond InitialBWP-Only
    prach-RootSequenceIndex-r16             CHOICE {
        l571                                    INTEGER (0..569),
        l1151                                   INTEGER (0..1149)
    }   OPTIONAL   -- Need R
    ]],
    [[
    ra-PrioritizationForSlicing-r17         RA-PrioritizationForSlicing-r17                          OPTIONAL,   -- Cond InitialBWP-Only
    featureCombinationPreamblesList-r17     SEQUENCE (SIZE(1..maxFeatureCombPreamblesPerRACHResource-r17)) OF FeatureCombinationPreambles-r17 OPTIONAL -- Cond AdditionalRACH
    ]]
}
RACH-ConfigCommonTwoStepRA
RACH-ConfigCommonTwoStepRA-r16 ::=                   SEQUENCE {
    rach-ConfigGenericTwoStepRA-r16                      RACH-ConfigGenericTwoStepRA-r16,
    msgA-TotalNumberOfRA-Preambles-r16                   INTEGER (1..63)                                    OPTIONAL, -- Need S
    msgA-SSB-PerRACH-OccasionAndCB-PreamblesPerSSB-r16   CHOICE {
        oneEighth                                            ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        oneFourth                                            ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        oneHalf                                              ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        one                                                  ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
        two                                                  ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32},
        four                                                 INTEGER (1..16),
        eight                                                INTEGER (1..8),
        sixteen                                              INTEGER (1..4)
    }                                                                                                                   OPTIONAL, -- Cond 2StepOnly
    msgA-CB-PreamblesPerSSB-PerSharedRO-r16              INTEGER (1..60)                                                OPTIONAL, -- Cond SharedRO
    msgA-SSB-SharedRO-MaskIndex-r16                      INTEGER (1..15)                                                OPTIONAL, -- Need S
    groupB-ConfiguredTwoStepRA-r16                       GroupB-ConfiguredTwoStepRA-r16                                 OPTIONAL, -- Need S
    msgA-PRACH-RootSequenceIndex-r16                     CHOICE {
        l839                                                 INTEGER (0..837),
        l139                                                 INTEGER (0..137),
        l571                                                 INTEGER (0..569),
        l1151                                                INTEGER (0..1149)
    }                                                                                                                   OPTIONAL, -- Cond 2StepOnly
    msgA-TransMax-r16                                    ENUMERATED {n1, n2, n4, n6, n8, n10, n20, n50, n100, n200}     OPTIONAL, -- Need R
    msgA-RSRP-Threshold-r16                              RSRP-Range                                                     OPTIONAL, -- Cond 2Step4Step
    msgA-RSRP-ThresholdSSB-r16                           RSRP-Range                                                     OPTIONAL, -- Need R
    msgA-SubcarrierSpacing-r16                           SubcarrierSpacing                                              OPTIONAL, -- Cond 2StepOnlyL139
    msgA-RestrictedSetConfig-r16                         ENUMERATED {unrestrictedSet, restrictedSetTypeA,
                                                                    restrictedSetTypeB}                                OPTIONAL, -- Cond 2StepOnly
    ra-PrioritizationForAccessIdentityTwoStep-r16        SEQUENCE {
        ra-Prioritization-r16                                RA-Prioritization,
        ra-PrioritizationForAI-r16                           BIT STRING (SIZE (2))
    }                                                                                                                   OPTIONAL, -- Cond InitialBWP-Only
    ra-ContentionResolutionTimer-r16                     ENUMERATED {sf8, sf16, sf24, sf32, sf40, sf48, sf56, sf64}     OPTIONAL, -- Cond 2StepOnly
    ...,
    [[
    ra-PrioritizationForSlicingTwoStep-r17               RA-PrioritizationForSlicing-r17              OPTIONAL, -- Cond InitialBWP-Only
    featureCombinationPreamblesList-r17 SEQUENCE (SIZE(1..maxFeatureCombPreamblesPerRACHResource-r17)) OF FeatureCombinationPreambles-r17 OPTIONAL  -- Cond AdditionalRACH
    ]]
}

GroupB-ConfiguredTwoStepRA-r16 ::=                       SEQUENCE {
    ra-MsgA-SizeGroupA-r16                               ENUMERATED {b56, b144, b208, b256, b282, b480, b640, b800,
                                                                    b1000, b72, spare6, spare5, spare4, spare3, spare2, spare1},
    messagePowerOffsetGroupB-r16                         ENUMERATED {minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18},
    numberOfRA-PreamblesGroupA-r16                       INTEGER (1..64)
}
RACH-ConfigDedicated
RACH-ConfigDedicated ::=        SEQUENCE {
    cfra                            CFRA                                                                    OPTIONAL, -- Need S
    ra-Prioritization               RA-Prioritization                                                       OPTIONAL, -- Need N
    ...,
    [[
    ra-PrioritizationTwoStep-r16    RA-Prioritization                                                       OPTIONAL, -- Need N
    cfra-TwoStep-r16                CFRA-TwoStep-r16                                                        OPTIONAL  -- Need S
    ]]
}

CFRA ::=                    SEQUENCE {
    occasions                       SEQUENCE {
        rach-ConfigGeneric              RACH-ConfigGeneric,
        ssb-perRACH-Occasion            ENUMERATED {oneEighth, oneFourth, oneHalf, one, two, four, eight, sixteen}
                                                                                                            OPTIONAL  -- Cond Mandatory
    }                                                                                                       OPTIONAL, -- Need S
    resources                       CHOICE {
        ssb                             SEQUENCE {
            ssb-ResourceList                SEQUENCE (SIZE(1..maxRA-SSB-Resources)) OF CFRA-SSB-Resource,
            ra-ssb-OccasionMaskIndex        INTEGER (0..15)
        },
        csirs                           SEQUENCE {
            csirs-ResourceList              SEQUENCE (SIZE(1..maxRA-CSIRS-Resources)) OF CFRA-CSIRS-Resource,
            rsrp-ThresholdCSI-RS            RSRP-Range
        }
    },
    ...,
    [[
    totalNumberOfRA-Preambles INTEGER (1..63)                                                             OPTIONAL -- Cond Occasions
    ]]
}

CFRA-TwoStep-r16 ::=                    SEQUENCE {
    occasionsTwoStepRA-r16                  SEQUENCE {
        rach-ConfigGenericTwoStepRA-r16         RACH-ConfigGenericTwoStepRA-r16,
        ssb-PerRACH-OccasionTwoStepRA-r16       ENUMERATED {oneEighth, oneFourth, oneHalf, one,
                                                            two, four, eight, sixteen}
    }                                                                                                     OPTIONAL, -- Need S
    msgA-CFRA-PUSCH-r16                     MsgA-PUSCH-Resource-r16,
    msgA-TransMax-r16                       ENUMERATED {n1, n2, n4, n6, n8, n10, n20, n50, n100, n200}    OPTIONAL, -- Need S
    resourcesTwoStep-r16                    SEQUENCE {
        ssb-ResourceList                        SEQUENCE (SIZE(1..maxRA-SSB-Resources)) OF CFRA-SSB-Resource,
        ra-ssb-OccasionMaskIndex                INTEGER (0..15)
    },
    ...
}

CFRA-SSB-Resource ::=           SEQUENCE {
    ssb                             SSB-Index,
    ra-PreambleIndex                INTEGER (0..63),
    ...,
    [[
    msgA-PUSCH-Resource-Index-r16   INTEGER (0..3071)     OPTIONAL  -- Cond 2StepCFRA
    ]]

}

CFRA-CSIRS-Resource ::=         SEQUENCE {
    csi-RS                          CSI-RS-Index,
    ra-OccasionList                 SEQUENCE (SIZE(1..maxRA-OccasionsPerCSIRS)) OF INTEGER (0..maxRA-Occasions-1),
    ra-PreambleIndex                INTEGER (0..63),
    ...
}
RACH-ConfigGeneric
RACH-ConfigGeneric ::=              SEQUENCE {
    prach-ConfigurationIndex            INTEGER (0..255),
    msg1-FDM                            ENUMERATED {one, two, four, eight},
    msg1-FrequencyStart                 INTEGER (0..maxNrofPhysicalResourceBlocks-1),
    zeroCorrelationZoneConfig           INTEGER(0..15),
    preambleReceivedTargetPower         INTEGER (-202..-60),
    preambleTransMax                    ENUMERATED {n3, n4, n5, n6, n7, n8, n10, n20, n50, n100, n200},
    powerRampingStep                    ENUMERATED {dB0, dB2, dB4, dB6},
    ra-ResponseWindow                   ENUMERATED {sl1, sl2, sl4, sl8, sl10, sl20, sl40, sl80},
    ...,
    [[
    prach-ConfigurationPeriodScaling-IAB-r16    ENUMERATED {scf1,scf2,scf4,scf8,scf16,scf32,scf64}              OPTIONAL,   -- Need R
    prach-ConfigurationFrameOffset-IAB-r16      INTEGER (0..63)                                                 OPTIONAL,   -- Need R
    prach-ConfigurationSOffset-IAB-r16          INTEGER (0..39)                                                 OPTIONAL,   -- Need R
    ra-ResponseWindow-v1610                     ENUMERATED { sl60, sl160}                                       OPTIONAL,   -- Need R
    prach-ConfigurationIndex-v1610              INTEGER (256..262)                                              OPTIONAL    -- Need R
    ]],
    [[
    ra-ResponseWindow-v1700                     ENUMERATED {sl240, sl320, sl640, sl960, sl1280, sl1920, sl2560} OPTIONAL    -- Need R
    ]]
}
RACH-ConfigGenericTwoStepRA
RACH-ConfigGenericTwoStepRA-r16 ::=     SEQUENCE {
    msgA-PRACH-ConfigurationIndex-r16       INTEGER (0..262)                                                OPTIONAL, -- Cond 2StepOnly
    msgA-RO-FDM-r16                         ENUMERATED {one, two, four, eight}                              OPTIONAL, -- Cond 2StepOnly
    msgA-RO-FrequencyStart-r16              INTEGER (0..maxNrofPhysicalResourceBlocks-1)                    OPTIONAL, -- Cond 2StepOnly
    msgA-ZeroCorrelationZoneConfig-r16      INTEGER (0..15)                                                 OPTIONAL, -- Cond 2StepOnly
    msgA-PreamblePowerRampingStep-r16       ENUMERATED {dB0, dB2, dB4, dB6}                                 OPTIONAL, -- Cond 2StepOnlyNoCFRA
    msgA-PreambleReceivedTargetPower-r16    INTEGER (-202..-60)                                             OPTIONAL, -- Cond 2StepOnlyNoCFRA
    msgB-ResponseWindow-r16                 ENUMERATED {sl1, sl2, sl4, sl8, sl10, sl20, sl40, sl80, sl160, sl320}
                                                                                                            OPTIONAL, -- Cond NoCFRA
    preambleTransMax-r16                    ENUMERATED {n3, n4, n5, n6, n7, n8, n10, n20, n50, n100, n200}  OPTIONAL, -- Cond 2StepOnlyNoCFRA
    ...,
    [[
    msgB-ResponseWindow-v1700               ENUMERATED {sl240, sl640, sl960, sl1280, sl1920, sl2560}        OPTIONAL  -- Cond NoCFRA2
    ]]
}

Useful Resources

  • 3GPP TS 38.321, Clause 5.1 — MAC Random Access procedure, RA-RNTI derivation
  • 3GPP TS 38.211, Clause 5.3.2 / 6.3.3 — PRACH preamble generation, formats, \(N_{cs}\) tables
  • 3GPP TS 38.213, Clause 8 — Random Access Response reception, PDCCH monitoring
  • 3GPP TS 38.331 — RRC: RACH-ConfigCommon, RACH-ConfigGeneric, RACH-ConfigDedicated, RACH-ConfigCommonTwoStepRA, RACH-ConfigGenericTwoStepRA
  • ShareTechnote — 5G/NR: RACH
  • ShareTechnote — FAQ: PRACH Preamble Format

  1. Ryu, J. (n.d.). 5G/NR – RACH. ShareTechnote. https://www.sharetechnote.com/html/5G/5G_RACH.html ↩

  2. Mohiuddin, S. (n.d.). NR RACH process [LinkedIn post]. LinkedIn. https://www.linkedin.com/pulse/nr-rach-process-syed-mohiuddin ↩

  3. KP. (2019, September). 5G NR: Random access procedure (Blog post). How LTE Stuff Works. http://howltestuffworks.blogspot.com/2019/09/5g-nr-random-access-procedure.html ↩

  4. Singh, A. K. (2024, February). 4-step RA and 2-step RA in 5G-NR (LinkedIn post). LinkedIn. https://www.linkedin.com/pulse/4-step-ra-2-step-5g-nr-ajay-kumar-singh ↩↩

  5. KP. (2020, April). 5G NR: 2-step random access procedure (Release-16) (Blog post). How LTE Stuff Works. http://howltestuffworks.blogspot.com/2020/04/5g-nr-2-step-random-access-procedure.html ↩↩

  6. Chu, D. C. (1972). Polyphase codes with good periodic correlation properties. IEEE Transactions on Information Theory, 18(4), 531–532. https://doi.org/10.1109/TIT.1972.1054840 ↩

  7. 3GPP. (n.d.). NR; Physical channels and modulation (Technical Specification TS 38.211). 3rd Generation Partnership Project. https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3213 ↩↩

  8. 3GPP. (n.d.). NR; Radio Resource Control (RRC) protocol specification (Technical Specification TS 38.331). 3rd Generation Partnership Project. https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3197 ↩