Amarisoft

NR SA 2Step RACH

The purpose of this tutorial is to show you how to test 2Step RACH. Since I don't have any commercial UE supporting 2 step RACH I used Amari UEsim as DUT.  I will put the test with commercial UE when I have any commercial UE supporting the feature. The regular RACH that is commonly used is 4 step RACH. Obviously 2 step RACH takes less steps to complete. It would shorten the signaling time greatly and I can even shorten the required timing for PUSCH transmission since PUSCH can be transmitted at the first step (Step 1) of the process. Overall process and Configuration of 2 Step RACH is as follows.

NR SA 2Step RACH Overview 01

Image Source : Sharetechnote  

NOTE : This feature is supported from the release 2021-12-17

Table of Contents

Introduction

The 2-Step Random Access Channel (RACH) procedure represents a significant advancement in 5G NR (New Radio) access technologies, designed to enhance the efficiency and responsiveness of initial access mechanisms within cellular networks. Traditional 4-Step RACH, a well-established process in LTE and early 5G deployments, involves a sequence of message exchanges between User Equipment (UE) and the gNodeB (gNB) to establish uplink synchronization and initiate communication. The 2-Step RACH procedure, introduced in 3GPP Release 16 and supported by advanced simulation platforms like Amari UEsim, streamlines this process by consolidating signaling steps. This reduction in procedural overhead allows the UE to transmit both the preamble and initial uplink data in a single step, thereby decreasing access latency and improving resource utilization. Architecturally, the 2-Step RACH integrates tightly with the 5G NR physical layer, leveraging enhancements in PUSCH (Physical Uplink Shared Channel) transmission and RACH configuration parameters. Its adoption is particularly critical for latency-sensitive applications such as massive IoT deployments, URLLC (Ultra-Reliable Low Latency Communications), and scenarios requiring rapid network access. By shortening the signaling exchange, the 2-Step RACH procedure not only optimizes network responsiveness but also contributes to improved user experience and overall system capacity in dense network environments.

Summary of the Tutorial

The tutorial demonstrates the configuration and validation of the 2-step RACH (Random Access Channel) procedure in NR Standalone (SA) mode, using an FDD duplex mode and 2x2 UL MIMO. The test utilizes an Amarisoft Callbox and UEsim, with detailed steps for both configuration and execution.

The tutorial provides clear, stepwise methodologies for configuring both network and UE simulators, executing the test, and validating the results through command-line and log analysis. Special attention is given to ensuring configuration consistency and the specific requirements for 2-step RACH in an NR SA environment with FDD and UL MIMO.

Test Setup

Setup A

Test setup for this tutorial is as shown below.

TestSetup Callbox UEsim 1sdr 01

Key Configuration Parameters

Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.

Test 1 : 2 step RACH with FDD, UL MIMO 2x2

This is to show how to configure and validate the 2 step RACH in NR SA. The duplex mode configured in this test is FDD and MIMO scheme for UL is 2x2.

Configuration

An important thing in using UE sim is to do proper matching between UE sim configuration and Call box configuration In this tutorial, I used the ue.default.cfg and and enb.default.cfg without any change

If you use other Network (e.g, other network simulator or real network), you have to make it sure to configure UE sim according to the settings on network side

I used ue-nr-sa-2step-rach.cfg which is copied from ue-nr-sa.cfg.

NR SA 2step RACH Test 1 Config 01

I used gnb-sa-2step-rach.cfg which is copied from gnb-sa.cfg.

NR SA 2step RACH Test 1 Config 02

Configuration for Callbox

The configuration in gnb-sa-2step-rach.cfg (Callbox) is set as follows.

In this test, NR_TDD is set to 0 to select NR FDD operation. N_ANTENNA_DL and N_ANTENNA_UL are both set to 2, configuring two downlink and two uplink antenna ports for 2×2 MIMO operation. USE_SRS is set to 1 to enable periodic SRS transmission, allowing the gNB to estimate the uplink channel and support uplink SU-MIMO.

NR SA 2step RACH Test 1 Config 03

Configure the operating band and frequency according to the test environment. In this test, NR band n7 is selected with DL NR-ARFCN 536000, corresponding to 2680 MHz. The subcarrier spacing is set to 15 kHz, and ssb_pos_bitmap is configured as 1000 to define the active SSB position.

NR SA 2step RACH Test 1 Config 04

Configure the two_steps_prach section within nr_cell_default to define the resources and operating parameters for NR 2-Step RACH. The shared_ro section specifies how PRACH occasions and contention-based preambles are shared between conventional 4-Step RACH and 2-Step RACH. In this example, cb_preambles_per_ssb_per_sro is set to 16, allocating 16 contention-based preambles per SSB for each shared RACH occasion.

The msga_pusch section defines the physical-layer resources used for the PUSCH part of MsgA. The MCS is set to 5, while time_domain_offset and po_fdm determine the time and frequency placement of the MsgA PUSCH occasion relative to the associated PRACH transmission. The RB allocation starts from the configured resource position, uses one contention resource block group, and spans 14 OFDM symbols. dmrs_cdm_group is set to both and dmrs_n_ports is set to 2 so that MsgA PUSCH can use two DMRS ports for uplink MIMO reception.

The msga_rsrp_threshold parameter is set to -100 dBm and is used by the UE when determining whether the received signal level is suitable for attempting 2-Step RACH. After transmitting MsgA, the UE monitors for MsgB during the configured msgb_response_window of 40 ms. The gNB transmits MsgB using msgb_mcs 9. Together, these settings define the shared PRACH resources, the MsgA preamble and PUSCH transmission, and the MsgB response behavior.

NR SA 2step RACH Test 1 Config 05

In the srs_resource configuration, n_ports is set to N_ANTENNA_UL so that the number of SRS antenna ports matches the configured uplink antenna ports. In this test, N_ANTENNA_UL is 2, so the UE transmits SRS using two ports to support uplink 2×2 MIMO channel estimation. The SRS resource is configured as periodic with an 80-slot period and is referenced by srs_resource_set.

NR SA 2step RACH Test 1 Config 06

In the PUSCH configuration, max_rank is set to N_ANTENNA_UL so that the maximum transmission rank matches the number of configured uplink antenna ports. Since N_ANTENNA_UL is set to 2 in this test, the gNB can schedule PUSCH transmission with a rank of up to 2, enabling uplink 2×2 MIMO when supported by the UE and radio conditions.

NR SA 2step RACH Test 1 Config 07

Configuration for UEsim

The configuration in ue-nr-sa-2step-rach.cfg  (UEsim) is set as follows.

Configure the UEsim radio parameters to match the Callbox configuration. N_ANTENNA_DL and N_ANTENNA_UL are both set to 2 so that the simulated UE uses the same 2×2 downlink and uplink antenna configuration as the Callbox. TDD is set to 0 to select FDD operation, and the cell bandwidth is set to 20 MHz.

The operating band, DL NR-ARFCN, SSB NR-ARFCN, and subcarrier spacing must also match the serving cell configuration. In this test, band n7 is used with dl_nr_arfcn 536000, ssb_nr_arfcn 535970, and 15 kHz subcarrier spacing.

The rx_to_tx_latency parameter defines the UE processing delay between reception and the following uplink transmission. It is set to 3 slots, which must be smaller than the time_domain_offset configured for MsgA PUSCH in the Callbox. Since the Callbox uses time_domain_offset 4, the UE has enough time to process the PRACH timing and transmit the associated MsgA PUSCH at the configured occasion.

NR SA 2step RACH Test 1 Config 08

Perform the Test

Before starting the test, verify the active cell configuration using the cell phy and cell commands on the Callbox. The cell phy output confirms that the NR cell is operating in band n7 with 20 MHz bandwidth, DL NR-ARFCN 536000, two downlink and two uplink antenna ports, and 15 kHz subcarrier spacing. It also shows the UL NR-ARFCN 512000 and SSB NR-ARFCN 535970. The cell command confirms the same serving-cell configuration, including PCI 500, PRACH sequence index 1, and PLMN 00101. Check that these values match the intended Callbox and UEsim settings before proceeding with the 2-Step RACH test.

NR SA 2step RACH Test 1 Run 01

Once the cell configuration has been verified, start the simulated UE by entering the power_on command in the UEsim console. The startup information confirms that the UE is configured for band n7 with a 23.04 MHz sample rate, a downlink frequency of 2680.1 MHz, and two downlink and two uplink antenna ports. For a commercial UE, simply power on the device after confirming that its supported band and radio settings match the configured cell.

NR SA 2step RACH Test 1 Run 02

Confirm that the UE has completed the initial attachment and that physical-layer data is flowing by running the t command on the Callbox. The trace output shows an active UE context with an assigned C-RNTI and ongoing downlink and uplink traffic, confirming that the connection has been established successfully. This real-time trace does not provide enough information to verify whether 2-Step RACH was used, so the MsgA and MsgB procedure must be confirmed from the captured protocol log.

NR SA 2step RACH Test 1 Run 03

Log Analysis

Sample Log

Check the SIB1 message to confirm that the random access parameters are broadcast as intended. The rach-ConfigCommon section defines the common PRACH configuration, including the PRACH configuration index, Msg1 FDM allocation, frequency start position, zero-correlation zone, target received power, preamble transmission limit, power ramping step, response window, SSB-to-PRACH mapping, and contention-resolution timer.

Also verify pusch-ConfigCommon because its common time-domain allocations and power-control parameters are used for uplink transmissions associated with the random access procedure and for PUSCH transmission after random access. In this example, the configuration includes Type-A PUSCH allocations with K2 values of 4 and the configured start-symbol-and-length settings. The same SIB1 also contains msgA-ConfigCommon, which provides the UE with the common MsgA PRACH and MsgA PUSCH resources required for 2-Step RACH.

NR SA 2step RACH Test 1 Log 01

Next, inspect the msgA-ConfigCommon IE in SIB1 to confirm the complete 2-Step RACH configuration broadcast to the UE. The rach-ConfigCommonTwoStepRA section defines the MsgA PRACH-related settings, including the MsgB response window, the number of contention-based preambles assigned to each SSB and shared RACH occasion, and the MsgA RSRP threshold used when selecting between 2-Step and 4-Step RACH.

The msgA-PUSCH-Config section defines the PUSCH resources associated with MsgA. It includes the MsgA MCS, the number of MsgA PUSCH occasions in time and frequency, the resource-block allocation, start symbol and duration, mapping type, guard band, frequency start position, and DMRS configuration. In this test, the configuration also indicates the available MsgA DMRS ports and that transform precoding is disabled. These parameters should match the intended two_steps_prach settings configured on the Callbox.

NR SA 2step RACH Test 1 Log 02

Next, inspect the lower-layer log to verify that the UE actually completed 2-Step RACH. Step 1 is identified by the PRACH transmission with two_steps=1, followed by the associated MsgA PUSCH carrying the initial uplink payload. The gNB detects the PRACH preamble and processes the PUSCH transmitted in the same MsgA procedure.

Step 2 is shown by the MsgB transmission over PDCCH and PDSCH. MsgB contains the random access response and contention-resolution information required to complete random access. The presence of the PRACH/PUSCH pair followed by the PDCCH/PDSCH pair confirms that the access procedure was completed using 2-Step RACH rather than the conventional 4-Step RACH procedure.

NR SA 2step RACH Test 1 Log 03

RRC / NAS Signaling

SIB1 (SA)

: This is the SIB1 message sent by gNB  to configure parameters for NR 2 Step RACH. (NOTE : You would see some IEs that has a specific assigned vale here, but consider it as just an example value. Those values should vary depending on test requirement)

{

  message c1: systemInformationBlockType1: {

    cellSelectionInfo {

      ...

    },

    cellAccessRelatedInfo {

      ...

    },

    connEstFailureControl {

      ...

    },

    servingCellConfigCommon {

      downlinkConfigCommon {

        frequencyInfoDL {

          ...

        },

        initialDownlinkBWP {

          genericParameters {

            ...

          },

          pdcch-ConfigCommon setup: {

            ...

          },

          pdsch-ConfigCommon setup: {

            ...

          }

        },

        bcch-Config {

          ...

        },

        pcch-Config {

          ...

        }

      },

      uplinkConfigCommon {

        frequencyInfoUL {

          ...

        },

        initialUplinkBWP {

          genericParameters {

            ...

          },

          rach-ConfigCommon setup: {

            rach-ConfigGeneric {

              prach-ConfigurationIndex 16,

              msg1-FDM one,

              msg1-FrequencyStart 7,

              zeroCorrelationZoneConfig 15,

              preambleReceivedTargetPower -110,

              preambleTransMax n7,

              powerRampingStep dB4,

              ra-ResponseWindow sl10

            },

            ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,

            ra-ContentionResolutionTimer sf64,

            prach-RootSequenceIndex l839: 1,

            restrictedSetConfig unrestrictedSet

          },

          pusch-ConfigCommon setup: {

            ...

          },

          pucch-ConfigCommon setup: {

            ...

          },

          msgA-ConfigCommon-r16 setup: {

            rach-ConfigCommonTwoStepRA-r16 {

              rach-ConfigGenericTwoStepRA-r16 {

                msgB-ResponseWindow-r16 sl40

              },

              msgA-CB-PreamblesPerSSB-PerSharedRO-r16 16,

              msgA-RSRP-Threshold-r16 56

            },

            msgA-PUSCH-Config-r16 {

              msgA-PUSCH-ResourceGroupA-r16 {

                msgA-MCS-r16 5,

                nrofSlotsMsgA-PUSCH-r16 1,

                nrofMsgA-PO-PerSlot-r16 one,

                msgA-PUSCH-TimeDomainOffset-r16 4,

                startSymbolAndLengthMsgA-PO-r16 27,

                mappingTypeMsgA-PUSCH-r16 typeA,

                guardBandMsgA-PUSCH-r16 0,

                frequencyStartMsgA-PUSCH-r16 7,

                nrofPRBs-PerMsgA-PO-r16 1,

                nrofMsgA-PO-FDM-r16 four,

                msgA-DMRS-Config-r16 {

                  msgA-PUSCH-NrofPorts-r16 1

                },

                nrofDMRS-Sequences-r16 1

              },

              msgA-TransformPrecoder-r16 disabled

            }

          }

        },

        timeAlignmentTimerCommon infinity

      },

      ssb-PositionsInBurst {

        inOneGroup '80'H

      },

      ...

    },

    ue-TimersAndConstants {

      ...

    }

  }

}