NR SA SDT (Small Data Transmission)
The purpose of this tutorial is to show you how to configure gNB so that it enables SDT (Small Data Transmission) when small sized user data meeting the sdt criteria flows.
SDT is a mechanism for UEs in RRC_INACTIVE mode to transmit (and receive) data or control without fully resuming the RRC connection. The goal is to minimize the number of exchanged messages, typically for low energy consumption scenarios in IoT with small messages sent periodically.
SDT comes with two flavors:
- RA-SDT, based on Random Access, which could in turn be either 4-steps Random Access or 2-steps Random Access
- CG-SDT, based on Configured Grants
Table of Contents
Introduction
Small Data Transmission (SDT) represents a significant evolution in the 5G New Radio (NR) architecture, enabling efficient low-latency and low-energy data exchange for devices operating in RRC_INACTIVE mode. Traditionally, user equipment (UE) needed to transition to RRC_CONNECTED mode before any user-plane data transmission, resulting in additional signaling overhead and increased energy consumption—particularly problematic for IoT devices that frequently send small, sporadic data packets. SDT addresses this challenge by allowing data and control information to be sent or received without a full RRC connection resumption, thus streamlining data paths, reducing latency, and conserving device battery life. Architecturally, SDT leverages both Random Access (RA-SDT) and Configured Grant (CG-SDT) mechanisms for uplink transmissions. RA-SDT utilizes the standard Random Access Procedure, which can be configured for either 4-step or 2-step access, while CG-SDT relies on pre-allocated resources to further minimize signaling. The integration of SDT in gNB (next-generation NodeB) configuration is essential for supporting massive Machine Type Communication (mMTC) and IoT deployments in 5G, where a large number of devices require efficient, scalable, and energy-conscious data exchange. This tutorial provides a comprehensive guide to configuring gNB for SDT, focusing on the technical aspects, underlying architectural concepts, and practical setup steps required to support small data transmissions in a 5G network environment.
-
Context and Background
- 5G NR introduces RRC_INACTIVE state to optimize signaling and power consumption, especially for scenarios involving IoT and MTC devices.
- SDT enables UEs in RRC_INACTIVE state to transmit or receive small data payloads without resuming the full RRC connection, reducing latency and network overhead.
- SDT is vital for applications where periodic or sporadic small messages are exchanged, such as smart metering, sensor networks, and asset tracking.
-
Relevance and Importance
- Minimizes energy consumption and signaling traffic, crucial for massive IoT deployments in 5G networks.
- Facilitates low-latency communication and improved network efficiency by bypassing full RRC resumption procedures for eligible small data transmissions.
- Supports advanced 5G use cases by providing scalable mechanisms for device connectivity and data transfer in dense, heterogeneous network environments.
-
Tutorial Objectives and Learning Outcomes
- Gain an understanding of the SDT feature in the context of 5G NR RRC states and procedures.
- Learn the architectural distinctions and operational principles of RA-SDT (Random Access-based) and CG-SDT (Configured Grant-based) mechanisms.
- Understand the configuration steps required at the gNB to enable and optimize SDT for eligible user data flows.
- Acquire practical knowledge for identifying scenarios where SDT is applicable and for troubleshooting typical deployment challenges.
-
Prerequisite Knowledge and Skills
- Familiarity with 5G NR architecture, including gNB functional components and RRC state machine.
- Understanding of radio resource management concepts and 5G signaling procedures.
- Basic experience with network configuration, particularly in 5G or LTE environments.
- General knowledge of IoT use cases and their requirements for energy and signaling efficiency.
Summary of the Tutorial
This tutorial focuses on testing Small Data Transmission (SDT) using two main procedures: RA-SDT (Random Access-based SDT) with 2-Step RACH and CG-SDT (Configured Grant-based SDT), both in FDD mode. The testing is performed using Amarisoft UEsim and specified configurations for core network, gNB, DRB, and UE. The following is a summary of the test procedures and methodologies described:
-
Test Setup
- Two setups are described:
- Setup A: Uses a commercial UE supporting UE Assistance Information (UAI) and Release Preference.
- Setup B: Uses Amarisoft UEsim as the DUT for UAI support. Setup B is used in this tutorial.
- SIM Card: The SIM provided with the system is used as-is.
- Configuration: If custom configuration is needed, additional guidance is provided in referenced configuration guides.
- Two setups are described:
-
Key Configuration Parameters
- The tutorial highlights several essential configuration parameters for SDT operation, such as sdt, rsrp_threshold, logical_channel_sr_delay_timer, ul_data_volume_threshold, t319a, session_inactivity_timer, and more.
- Additional configurations related to RRC Inactive, 2-Step RACH, and Configured Grant are required for the SDT environment.
-
Test 1: RA-SDT (FDD with 2-Step RACH)
-
Configuration Steps:
- Modify and use gnb-sa-sdt-2step-rach.cfg for the gNB, drb_nr_sdt.cfg for DRB, and ue-nr-sa-fdd-20Mhz-sdt.cfg for UEsim.
- Set the cell to FDD mode and configure the appropriate band and ARFCN.
- Configure the sdt parameter block in rrc_inactive, including parameters like rsrp_threshold, ul_data_volume_threshold, and t319a.
- Set prach_feature_preambles_list in the RACH configuration; adjust time_domain_offset if CRC errors appear in MsgA.
- Optionally set rx_to_tx_latency to 2.
- For DRB, ensure sdt_allowed is set to true for the test's 5QI.
- Enable cn_assistance_info_support in mme-ims-cn-assistance.cfg for RRC Inactive support.
- On UEsim, set FDD mode, match band and frequency to gNB, enable rrc_inactive_support, and set as_release to 17.
-
Test Execution:
- Verify the cell configuration before starting.
- Start trace mode ('t' command) and wait for UE connection.
- Allow UE to attach and enter RRC Inactive state after idle timeout.
- Generate uplink user data (e.g., by executing a ping from UEsim or using an app on commercial UE).
-
Log Analysis:
- Check SIB1 configurations; verify msgA-ConfigCommon contains smallData-r17.
- Ensure msgA-PUSCH-TimeDomainOffset-r16 is properly set for timing alignment.
- Confirm gNB advertises SDT capability and criteria for SDT trigger.
- Verify UE capability information includes SDT support.
- Validate the UE enters RRC Inactive state with SDT configuration and can trigger SDT by sending PRACH with the relevant feature index.
- Observe RRC Resume procedure and initiation of SDT session upon user data generation.
-
Configuration Steps:
-
Test 2: CG-SDT (FDD with Configured Grant)
-
Configuration Steps:
- Modify and use gnb-sa-cg-sdt.cfg for the gNB and drb_nr_sdt.cfg for DRBs.
- Set cell to FDD mode, enable CG_SDT, and configure appropriate FDD band and ARFCN.
- Adjust RACH Occasion settings (ssb_per_prach_occasion, cb_preambles_per_ssb) for CG SDT.
- Configure feature_combination and feature_priorities for SDT.
- Place sdt and configuration_grant configuration under rrc_inactive.
- As with RA-SDT, ensure sdt_allowed is true for the test's 5QI in the DRB file.
- Enable cn_assistance_info_support in the MME configuration.
- On UEsim, set FDD mode, configure band/frequency, enable rrc_inactive_support, and set as_release to 17.
-
Test Execution:
- Confirm the cell configuration.
- Run trace mode and wait for UE connection.
- UE attaches, then transitions to RRC Inactive after timeout.
- Trigger uplink data (e.g., ping from UEsim or commercial UE).
-
Log Analysis:
- Check SIB1 for featureCombinationPreambleList containing smallData-r17.
- Verify gNB and UE both advertise CG-SDT and RA-SDT support and capabilities.
- Ensure UE supports configured grant for SDT (check cg-SDT-r17 and ra-SDT-r17 in UE capability information).
- UE should enter RRC Inactive with the correct SDT configuration; for CG-based SDT, all CG configuration is embedded in sdt-Config-r17.
- Observe PRACH with prach_feature_index for SDT, followed by RRC Resume and SDT session initiation.
- For PUSCH, logs may show error icons for unused slots, which is normal if no user data is present; successful SDT transfers are indicated with specific log messages.
-
Configuration Steps:
Overall, the tutorial provides detailed step-by-step procedures for configuring and verifying both RA-SDT and CG-SDT in an NR FDD environment using Amarisoft tools, with emphasis on correct configuration and log verification for SDT feature enablement and operation.
Test Setup
Test setup for this tutorial is as shown below. This is just for low layer testing, you may not need any complicated IP layer setup.
- SIM Card used in this tutorial is the one delivered with the system as it is.
- If you want to change the configuration, The tutorial Configuration Guide would help
If you have a commercial UE that support UE assistance information with Release Preference, you can use the Setup A. If you don't have any commercial UE supporting this feature but have Amarisoft UEsim you can use Setup B. In this Test, Setup B is used.
Setup A
This setup is the case where you use a commerical UE as a DUT supporting UAI (UE-Assistance Information)

Setup B
This setup is the case where you use a commerical Amarisoft UEsim as a DUT supporting UAI (UE-Assistance Information)

Key Configuration Parameters
Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.
NOTE : For simplicity, I listed configuration parameters which are directly related to SDT, but you sould need additional configuration to set an enviroment for SDT to be used (e.g, RRC Inactive, 2 Step RACH, Configured Grant etc). You can refer to following tutorials related to the additional configurations.
- RRC Inactive Configuration Parameters
- 2 Step RACH Configuration Parameters
- CG Configuration Parameters
Test 1 : RA-SDT : FDD with 2 Step RACH
This test is to show how to configure RA-SDT (i.e, SDT via RACH, 2 step rach in this tutorial).
Configuration
The configuration shown here is common configuration for all the subtests belonging to Test 1 and I will not show this configuration repeatedly for every subtest.
I have used gnb-sa-sdt-2step-rach.cfg which is copied and modified from gnb-sa.cfg on Callbox (gNB) and used drb_nr_sdt.cfg which is copied and modified from drb_nr.cfg

I am using mme-ims-cn-assistance.cfg and ims config as shown below.

On UEsim, I used ue-nr-sa-fdd-20Mhz-sdt.cfg which has been copied and modified from ue-nr-sa.cfg (

gnb-sa-sdt-2step-rach.cfg is configured as follows.
First I configured the cell as an FDD Cell for this specific test (NR_TDD 0)

And specify the FDD band and ARFCN as you like (band, dl_nr_arfcn)

The important setting is sdt configuration within rrc_inactive block(

Another important setting for RA-SDT (RACH based SDT) is to configure prach_freature_preambles_list within the rach configuration. (


This may not be a mandatory setting, but I would recommend to set rx_to_tx_latency 2.
![]()
Since SDT is associated with a specific DRB, a specific drb file configured for sdt is used.

drb_nr_sdt.cfg is configured as follows
For this configuration, you need to figure out which DRB/5QI will be used in your test, set sdt_allowed to true for the specific 5QI that will be used in your test. (

mme-ims-cn-assistance.cfg is configured as shown below.
In mme configuration, enable cn_assistance_info_support to make core network capable of triggering RRC Inactive state.

ue-nr-sa-fdd-20Mhz-sdt.cfg is configured as shown below. (
Set the UEsim to be FDD (TDD 0).

Set the band and frequency (dl_nr_arfcn) to match the configuration of Callbox (gNB).

The key parameter on UEsim is to enable rrc_incative_support parameter. This parameter let UEsim to inform the supportability of rrc-inactive in UE capability information. And set as_release to 17 which let UE notify release 17 capability like SDT.

Perform the Test
First check out the cell configuration and see if everything is configured as intended.

run 't' (trace) command and wait for the connection from UE. Here in this example, you see the RACH for initial attach (2 step rach in this case) and then UE gets into RRC inactive state when there is no user traffic for a certain period of time.

Once the call state is in RRC Inactive, generate a traffic from UE (i.e, generating mo Data).

Log Analysis
Following is the log snapshot that are involved in UE assistance information message and handling process.
There are many configurations to be checked in SIB1 for this tutorial.
Check out rach-configCommon. This configuration is not so important for this tutorial but not do harm if you check.

The important point of this tutorial is to transfer user data (Small Data) through MsgA. Check out if the IE smallData-r17 is enabled in msgA configuration(msgA-ConfigCommon).

This may not be mandatory configuration directly related to RA-SDT, but as far as I tested this seems to be affect a lot for the msgA decoding for SDT. The parameter is msgA-PUSCH-TimeDomainOffset-r16 which is set by the configuration parameter 'time_domain_offset'. This is time difference(gap) in slot between PRACH and MsgA.

Then make sure that gNB notifies that it is capable of SDT and criteria for triggering SDT. Check out sdt-ConfigCommon-r17 and featureProiorities-r17.

Now check out UE capability to check if UE support the feature (SDT)

Make it sure that UE support RA SDT by checking out the IE ra-SDT-r17 in UE capability Information message.

Now power on UE and wait until UE gets into connected state. If there is no traffic for a certain period of time, the call state gets into RRC Inactive. Make it sure that it gets into the RRC Inactive state with sdt-Config-r17 configured.

Then power on UE and wait until UE complete the initial connection and got into RRC Inactive state.
At this point, ping from UEsim (or commercial UE). Then UE would send PRACH with prach_feature_index. This indicates that the PRACH is for SDT.

Then you see RRC Resume is initiated and SDT session starts.

Test 2 : CG-SDT : FDD
This test is to show how to configure CG-SDT(i.e, SDT via Configuration Granted Physical channel).
Configuration
The configuration shown here is common configuration for all the subtests belonging to Test 1 and I will not show this configuration repeatedly for every subtest.
I have used gnb-sa-cg-sdt.cfg which is copied and modified from gnb-sa.cfg on Callbox (gNB) and used drb_nr_sdt.cfg which is copied and modified from drb_nr.cfg

I am using mme-ims-cn-assistance.cfg and ims config as shown below.

On UEsim, I used ue-cg-sdt.cfg which has been copied and modified from ue-nr-sa.cfg (

gnb-sa-cg-sdt.cfg is configured as follows.
First I configured the cell as an FDD Cell for this specific test (NR_TDD 0). Set CG_SDT to 1 so that the configuration related to CG-SDT are configured.

And specify the FDD band and ARFCN as you like (band, dl_nr_arfcn)

Change RO(RACH Occation) configuration (ssb_per_prach_occasion, cb_preambles_per_ssb) a little bit to bettr fit for CG SDT

Set prach features preambles and feature priorities to SDT (feature_combination, feature_priorities).

Configure rrc_inactive feature and put sdt configuration and configuration_grant configuration in it.

Since SDT is associated with a specific DRB, a specific drb file configured for sdt is used.

drb_nr_sdt.cfg is configured as follows
For this configuration, you need to figure out which DRB/5QI will be used in your test, set sdt_allowed to true for the specific 5QI that will be used in your test. (

mme-ims-cn-assistance.cfg is configured as shown below.
In mme configuration, enable cn_assistance_info_support to make core network capable of triggering RRC Inactive state.

ue-cg-sdt.cfg is configured as shown below. (
Set the UEsim to be FDD (TDD 0).

Set the band and frequency (dl_nr_arfcn) to match the configuration of Callbox (gNB).

The key parameter on UEsim is to enable rrc_incative_support parameter. This parameter let UEsim to inform the supportability of rrc-inactive in UE capability information. And set as_release to 17 which let UE notify release 17 capability like SDT.

Perform the Test
First check out the cell configuration and see if everything is configured as intended.

run 't' (trace) command and wait for the connection from UE. Here in this example, you see the RACH for initial attach (2 step rach in this case) and then UE gets into RRC inactive state when there is no user traffic for a certain period of time.

Once the call state is in RRC Inactive, generate a traffic from UE (i.e, generating mo Data).

Log Analysis
Following is the log snapshot that are involved in UE assistance information message and handling process.
There are many configurations to be checked in SIB1 for this tutorial.
Check out rach-configCommon. In this test, SDT will be associated with 4 Step RACH as well as with CG (Configured Grant). Check out if featureCombinationPreambleList carries the smallData-r17 within featureCombination-r17.

Then make sure that gNB notifies that it is capable of SDT and criteria for triggering SDT. Check out sdt-ConfigCommon-r17 and featureProiorities-r17.

Now check out UE capability to check if UE support the feature (SDT)

Make it sure that UE support configured grant since this test is for SDT associated with CG (Configured Grant)

Make it sure that UE support CG SDT by checking out the IE cg-SDT-r17 in UE capability Information message.

Make it sure that UE support RA SDT by checking out the IE ra-SDT-r17 in UE capability Information message.

Now power on UE and wait until UE gets into connected state.
If there is no traffic for a certain period of time, the call state gets into RRC Inactive.

Make it sure that it gets into the RRC Inactive state with sdt-Config-r17 configured. In case of CG based SDT, all the details of the CG configuration should be embedded within sdt-Config-r17.

Then power on UE and wait until UE complete the initial connection and got into RRC Inactive state.
At this point, ping from UEsim (or commercial UE). Then UE would send PRACH with prach_feature_index. This indicates that the PRACH is for SDT. Then you see RRC Resume is initiated and SDT session starts.

You may see a lot of PUSCH marked as a error icon, but this is not really errors. The PUSCH with error followed by the message 'CG-SDT was skipped. do not request retransmission' indicates 'this slot is allowed for PUSCH, but UE does not send PUSCH because there is no user data to send'.
If the PUSCH carries the user data (SDT data in this case), you will see the additional log print like 'cg_sdt, cg_sdt_pusch_idx, cg_sdt_ssb_idx'.
