NR SA SUL(Supplementary Uplink)
The purpose of this tutorial is to show you how to configure and test SUL. The fundamental idea behind SUL is well illustrated in 3GPP 38.300 as shown below.

As shown above, usually cell coverage for DL+UL gets smaller because UL coverage within the same band is not as large as DL coverage due to weak UE TX power comparing to gNB TX power. To compensate this, UL frequeny of much lower band. (NOTE : UL coverage of lower frequency tend to larger because lower frequency tend to have larger coverage by physics).
Implementation of SUL in Amarisoft callbox can be illustrated as below. (NOTE : Pay attention to terminologies in this diagram because the same terminology will be used in the comments in the configuration section.)

Amarisoft Callbox support SUL for both TDD and FDD.
Table of Contents
Introduction
Supplementary Uplink (SUL) is a critical feature introduced in 3GPP Rel-15 NR (New Radio) specifications to address uplink coverage limitations encountered in 5G networks, particularly in the context of higher frequency bands. In conventional NR deployments, the uplink (UL) signal range is often more constrained than the downlink (DL) due to the inherent disparity between the transmission power capabilities of User Equipment (UE) and gNodeB (gNB). SUL mitigates this challenge by enabling the use of an additional, typically lower-frequency, uplink carrier alongside the primary uplink carrier. This architectural approach leverages the superior propagation characteristics and larger coverage area of lower-frequency bands, thereby enhancing the overall uplink coverage and reliability. The SUL mechanism is particularly significant in scenarios where service continuity and robust uplink performance are required at the cell edge or in challenging radio environments. In practical deployments, such as those using the Amarisoft Callbox platform, SUL can be configured for both Time Division Duplex (TDD) and Frequency Division Duplex (FDD) modes, facilitating flexible testing and validation of SUL features in a controlled environment. Understanding the architectural concepts, configuration methodology, and operational principles of SUL is essential for network engineers, system integrators, and researchers aiming to optimize 5G performance and ensure seamless user experience across diverse deployment scenarios.
-
Context and Background
- SUL is defined in 3GPP TS 38.300 as a solution to uplink coverage gaps caused by the power imbalance between UE and gNB transmitters, especially in high-frequency NR bands.
- It introduces an additional uplink path using a supplementary, lower-frequency carrier to extend UL reach and improve radio link reliability.
- The feature is supported by commercial NR platforms such as Amarisoft Callbox, enabling real-world configuration and validation of SUL scenarios.
-
Relevance and Importance of This Tutorial
- Addresses a key challenge in 5G NR deployments: limited uplink coverage in higher frequency bands.
- Provides hands-on guidance for configuring and testing SUL on Amarisoft Callbox, a widely used platform for 5G experimentation and validation.
- Enables users to understand the architectural principles and practical aspects of deploying SUL in both TDD and FDD environments.
-
Learning Outcomes
- Gain a deep understanding of the architectural and operational fundamentals of SUL in 5G NR.
- Acquire practical skills in configuring SUL features using Amarisoft Callbox.
- Develop the ability to perform testing and validation of SUL scenarios, interpret results, and troubleshoot configuration issues.
- Understand the terminology and key parameters involved in SUL configuration, as referenced in 3GPP specifications and Amarisoft documentation.
-
Prerequisite Knowledge and Skills
- Familiarity with 5G NR architecture, including gNB, UE, and the radio interface.
- Understanding of duplexing modes (TDD/FDD) and RF propagation characteristics.
- Experience with Amarisoft Callbox or similar 5G test platforms.
- Basic knowledge of 3GPP technical specifications, especially TS 38.300 and related standards.
Summary of the Tutorial
This tutorial outlines the test procedures for validating Supplementary Uplink (SUL) operation in NR Standalone (SA) FDD mode using Amarisoft Callbox and UEsim. The methodology includes detailed setup, configuration, test execution, and log analysis steps.
-
Test Setup
- The test uses an Amarisoft Callbox (gNB) and UEsim (UE) with a single SDR, as shown in the referenced setup diagram.
-
Key Configuration Parameters
- Important parameters in the gNB and UE configurations include:
- sul: Supplementary uplink configuration in the cell, including cell_id, prach_index, prach_rsrp_threshold, and channel selection for pucch, pusch, srs.
- channels_prach_on_sul, pusch_switch_snr_threshold, and pusch_switch_hysteresis: For dynamic switching and channel configuration.
- serve_as_sul: Indicates SUL cell role.
- sul_prach: RACH configuration specific to SUL operation, such as msg1_frequency_start, msg1_fdm, root_sequence_index, zero_correlation_zone_config, restricted_set_config.
- sul_support: Indicates SUL support on the UE side.
-
Test 1: SUL-FDD
- Objective: To verify SUL operation in NR SA FDD mode.
- gNB Configuration:
- Use and modify gnb-sa-sul-fdd.cfg, based on gnb-sa.cfg.
- Set NR_TDD to 0 to enable FDD mode.
- Configure both normal and SUL cells in the cell configuration section:
- For the normal cell: Set band, DL frequency, and SUL section (including cell_id, prach_index, prach_rsrp_threshold, pusch_switch_snr_threshold, and channels).
- For the SUL cell: Set serve_as_sul to true and configure sul_prach with the necessary RACH parameters.
- Default cell configuration (nr_cell_default): Optionally set force_full_bsr to ensure UL data is scheduled for easier verification in logs.
- Core Network Configuration: Use the default mme-ims.cfg as is.
- UEsim Configuration:
- Use and modify ue-nr-sa-sul-fdd.cfg, based on ue-nr-sa.cfg.
- Set NR_TDD to 0 for FDD operation.
- Configure two cells:
- Normal cell: Band and frequency to match gNB.
- SUL cell: Band and frequency to match SUL cell on gNB.
- Set cell_index to 0 (camp on normal cell), and sul_support to true to indicate SUL capability.
-
Test Execution Procedure
- Verify intended cell configuration with cell phy and cell commands.
- Power on the UE in UEsim. Ensure both normal and SUL cells are detectable; confirm cabling and antennas are properly connected.
- Confirm UE attachment and throughput measurement. Ensure UE first camps on the normal cell and RACH is triggered to cell 01 (normal cell).
-
Log Analysis
- Check SUL configuration in SIB1 of the normal cell, especially the supplementaryUplink IE and rsrp-ThresholdSSB-SUL parameter.
- Inspect PRACH logs to confirm UE uplink connection to SUL cell; verify sul_index field and the target cell in logs.
- Review RB maps to determine which uplink channels (PUCCH, PUSCH, SRS) are using the normal or SUL cell. For PUSCH, check the sul field in the log for SUL usage.
- Verify gNB scheduling of uplink for normal or SUL cell by checking the sul_ind field in DCI messages (sul_ind=0 for normal, sul_ind=1 for SUL).
The tutorial provides a step-by-step procedure for both configuration and validation of SUL-FDD operation, emphasizing the importance of matching configuration between gNB and UE, and verifying correct operation through log analysis. This ensures that supplementary uplink is correctly established and utilized in the test environment.
Test Setup
Test setup for this tutorial is as shown below.
The UEsim and the Callbox each hold a single SDR card and the two are cabled together through those cards, so this test runs conducted and not over the air. One SDR on each side is enough because the normal cell and the SUL cell sit on rf_port 0 and rf_port 1 of the same card.
I drive the UEsim over WiFi here, using the antenna on top of the machine. You do not have to do it that way. The ethernet port just underneath, at 192.168.1.80, is the one you would normally use to reach the UEsim.

Key Configuration Parameters
Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.
- sul : In this link, you will get the descriptions for all the configurations listed below.
- cell_id
- prach_index
- prach_rsrp_threshold
- channels
- pucch
- pusch
- srs
- channels_prach_on_sul
- pusch_switch_snr_threshold
- pusch_switch_hysteresis
- serve_as_sul
- sul_prach : In this link, you will get the descriptions for all the configurations listed below.
- msg1_frequency_start
- msg1_fdm
- root_sequence_index
- zero_correlation_zone_config
- restricted_set_config
- force_full_bsr : not a SUL parameter, but I set it in nr_cell_default in this test to keep uplink data flowing so that the uplink switching is visible in the RB map.
- sul_support
- cell_index : selects which of the two UEsim cells the UE camps on, which has to be the normal cell for SUL to be picked up from its SIB1.
Test 1 : SUL-FDD
This test is to test SUL operation in NR SA FDD
Configuration
I used the gnb-sa-sul-fdd.cfg on gNB which is copied and modified from gnb-sa.cfg

For the corenetwork, I used the default configuration (mme-ims.cfg) as it is.

In gnb-sa-sul-fdd.cfg , the configuration is done as follows.
In this test, I set NR_TDD to 0 which indicates that FDD will be used.
SUL itself does not depend on that choice. TDD SUL is supported as well, and I went with FDD only because that is what this tutorial walks through. NR_TDD is what selects between the #if NR_TDD == 1 branch and the #else branch in the cell list further down, so putting 0 here is what makes the band 28 and band 3 settings take effect instead of the band 78 pair.
The other defines stay at their usual values in this run. N_ANTENNA_DL and N_ANTENNA_UL are both 1 for SISO, NR_BANDWIDTH is 20 MHz and NR_LONG_PUCCH_FORMAT is 2. NR_TDD_CONFIG is 2 but it only applies inside the TDD branch, so it has no effect in this test.

Here goes the important part of SUL configuration. In cell configuration for normal cell, you need to configure the details of sul in addition to the basic band and DL frequency (dl_nr_arfcn). In sul configuration, you would set various parameters like cell_id, prach_index, prach_rsrp_threshold, pusch_switch_snr_threshold and channels. With channels parameter, you can specify the channel selection (i.e, selection between normal cell and sul cell) for pucch, pusch, srs. Some of these parameters are required to configure SIB1 and some others are for Amarisoft gNB's internal settings.
The normal cell in this run is rf_port 0 with cell_id 0x00 and n_id_cell 500, and the FDD branch puts it on band 28 with dl_nr_arfcn 156100 and ssb_subcarrier_spacing 15 kHz. The band 78 pair just above belongs to the TDD branch and does nothing here.
Inside sul, cell_id is 0x01, and that is the identifier of the cell whose uplink is going to be used as the SUL. prach_index is 0, which is the index into the sul_prach array of that cell, so it picks the first and in this file only entry there. prach_rsrp_threshold is -50, which is what becomes rsrp-ThresholdSSB-SUL, and it is mandatory once prach_index is 0 or higher. Under channels I set pucch to "sul_only" so PUCCH is carried in the supplementaryUplink configuration, while pusch and srs are set to "both". pusch_switch_snr_threshold is 15.0 and that is the SNR at which PUSCH moves between the two uplinks.
If you want the PUCCH on the normal uplink instead, set pucch to "normal_only", which is also what you get if you leave the entry out. I did not set channels_prach_on_sul in this cell, so a UE that comes in through the SUL PRACH resource ends up with the same channel selection as the one above.

Now we need to configure the SUL cell. In SUL cell configuration as well, we need to configure a few specific parameters for SUL operation like serve_as_sul and sul_prach. Within sul_prach parameter, you can specify the details of rach configuration which will be populated into SIB1 of normal cell for SUL configuration.
The SUL cell is on rf_port 1 with cell_id 0x01 and n_id_cell 501, and the FDD branch places it on band 3 with dl_nr_arfcn 368500 and ssb_subcarrier_spacing 15 kHz. That cell_id 0x01 is the value the sul object of the normal cell points at, so the two have to agree or the normal cell has no SUL to offer.
serve_as_sul: true is what turns this into the SUL cell rather than a second ordinary cell. The sul_prach array below it holds a single entry and the only parameter I set inside it is root_sequence_index 128. msg1_frequency_start is left commented out here, so it keeps its default and comes out that way in the SIB1 of the normal cell. If you need the SUL preamble to start at a different PRB, uncomment that line and the value shows up as msg1-FrequencyStart in the supplementaryUplink IE.

For the detaul cell configuration (nr_cell_default), you don't need to set any specific parameters but I forced gNB to schedule UL in every possible slots (force_full_bsr) to flow the UL data all the time because this is easier to verify SUL operation from log analysis.
I put force_full_bsr: true in nr_cell_default rather than in either cell so that it lands on the normal cell and the SUL cell at once. With it set, the gNB treats the UE as always having a full buffer, so there is uplink traffic in the RB map all the time and it is easy to see in the WebGUI which uplink is being used at any moment. It is not mandatory and the SUL operation is the same without it, you just have to push uplink traffic yourself before the RB maps show anything.
The rest of nr_cell_default is left alone in this test. subcarrier_spacing is 30 kHz on both branches, bandwidth comes from NR_BANDWIDTH, and the mac_config block keeps its usual values, msg3_max_harq_tx 5, ul_max_harq_tx and dl_max_harq_tx 5, ul_max_consecutive_retx and dl_max_consecutive_retx 30, periodic_bsr_timer 20, retx_bsr_timer 320, periodic_phr_timer 500 and prohibit_phr_timer 200.

For the DUT, I used Amarisoft UEsim as configured here.
I used the ue-nr-sa-sul-fdd.cfg on UEsim which is copied and modified from ue-nr-sa.cfg

In ue-nr-sa-sul-fdd.cfg , the configuration is done as follows.
First, I set NR_TDD to 0 which indicates that FDD will be used for this test.
N_CELL is 2 in this file, and that is what makes room for the two entries in the cells list further down, the normal cell and the SUL cell. N_ANTENNA_DL and N_ANTENNA_UL are both 1 for SISO and NR_BANDWIDTH is 20 MHz, the same values I used on the gNB, and NR_TDD at 0 selects the same #else branch in this file that it selects in the gNB configuration.

For the cell configuration, I also need to configure two cells : one for normal cell and the other for SUL cell.
First set the band and frequency setting for the normal cell. Just let these parameters match to the band and frequency settings of gNB.
The first entry of cells is on rf_port 0 and the FDD branch gives it band 28, dl_nr_arfcn 156100 and ssb_nr_arfcn 156010, with ssb_subcarrier_spacing 15 kHz against subcarrier_spacing 30 kHz. band and dl_nr_arfcn are the two that have to agree with the gNB, and ssb_nr_arfcn has to point at where the gNB actually puts the SSB, otherwise the UE never finds the cell in the first place.
The band 78 values above the #else are the TDD branch and are not used in this run.

Then set the band and frequency setting for the SUL cell. Just let these parameters match to the band and frequency settings of SUL cell of gNB.
The second entry is on rf_port 1 with band 3, dl_nr_arfcn 368500 and ssb_nr_arfcn 368410. The band and dl_nr_arfcn are the same values I gave the SUL cell on the gNB, and rf_port 1 has to be the port the gNB puts that cell on as well, since that is the RF path the cable carries. As on the normal cell, the band 78 entries belong to the TDD branch.
Nothing marks this entry as a SUL cell on the UEsim side. It is an ordinary cell here, and what makes the UE treat it as the supplementary uplink is the supplementaryUplink IE it reads in the SIB1 of the cell it camps on.

Now you have two important parameters to set on UEsim side. cell_index here is used to set the cell which UE is supposed to camp on to. Here cell_index is set to 0 which corresponds to the normal cell. Then set sul_support to true to indicates that the UE is SUL capable.
cell_index 0 points at the first entry of the cells list, which is the band 28 normal cell, so the UE reads SIB1 there and picks up the supplementaryUplink configuration from it. Setting it to 1 would send the UE to camp on the SUL cell directly, which is not what you want in a SUL test.
The rest of the ue_list entry is the usual set. as_release is 15, ue_category is "nr", and imsi and K are the default test values that have to match the subscriber record in the core network. tun_setup_script stays commented out in this run because I only need the throughput reading, not a routed interface.

Perform the Test
Check if the cell is configured as intended. Check out the output of 'cell phy' and cell command.
Both cells come up the way I configured them. Cell 00000 is on n28 with DL ARFCN 156100 and UL ARFCN 145100, and cell 0x001 is on n3 with DL ARFCN 368500 and UL ARFCN 349500. That 349500 is the uplink the UE will actually transmit on when it uses the SUL, and it is the one value that does not appear anywhere in the configuration file, since I only set the downlink ARFCN there.
Both cells run BW 20 with SCS 30, ANT 1 and NL 1, and their SSBs sit at SCS 15 on ARFCN 156010 and 368410. The P column is the rf_port, 0 for the first cell and 1 for the second. The cell command underneath confirms pci 500 and 501, which come from n_id_cell, and both cells share TAC 0x000064 and plmn 00101. If one of the two lines is missing or lands on the wrong ARFCN, sort that out before powering the UE on.

Power on UE on UE sim. (
The reply I am after is Cell 0: SIB found. Cell 0 is the entry that cell_index points at, so this one line says the UE has decoded SIB1 on band 28 and now holds the supplementaryUplink configuration it needs. If power_on comes back with nothing, the UE has not found that cell at all and there is no point looking at the SUL side yet.

Confirm that the UE completes the attach and check the throughput. Make it sure that UE camp onto normal cell first with PRACH to cell 01(Normal Cell)
The trace is started with t and stopped with return. Four PRACH lines come out of it, three at seq=45 and seq=42 with snr around 14.9 to 15.0 dB and ta values of 309, 1136 and 1138, and then one at seq=6 with ta=5 and snr=29.1 dB. The last one is the attempt that lands, and the periodic statistics start right after it.
That periodic line is where the throughput check happens. UL brate settles at roughly 12.2 to 12.3 Mbps with rxok around 3860 per interval and only a few tens of rxko, while DL brate stays at about 2.12k because nothing is running downstream, so the mcs sitting near 27.0 on the DL side is just the small periodic traffic. phr is 22 with pl 12 and ta around 4.5 to 4.9, which is the UE reporting that it still has power headroom to spare.

Log Analysis
First make it sure that all the SUL configuration is properly configured in SIB1 of normal cell.
There is a long list of IE named supplementaryUplink in the SIB1 of normal cell. rsrp-ThresholdSSB-SUL is determined by prach_rsrp_threshold in the configuration.
Both cells are broadcasting SIB1 on BCCH-NR here, the Cell column alternating between 0 and 1 every 0.160 s, so open one of the Cell 0 rows to get the normal cell. The supplementaryUplink list opens with freqBandIndicatorNR 80 and absoluteFrequencyPointA 347664, which is the band 80 uplink that goes with the band 3 SUL cell, and scs-SpecificCarrierList gives offsetToCarrier 0, subcarrierSpacing kHz30 and carrierBandwidth 51. initialUplinkBWP follows with locationAndBandwidth 13750 at kHz30.
rach-ConfigCommon inside it is what sul_prach produced. prach-RootSequenceIndex reads l839: 128, which is the root_sequence_index I set on the SUL cell, and around it are prach-ConfigurationIndex 16, msg1-FDM one, msg1-FrequencyStart 3, zeroCorrelationZoneConfig 15, preambleReceivedTargetPower -110, preambleTransMax n7, powerRampingStep dB4, ra-ResponseWindow sl10, ssb-perRACH-OccasionAndCB-PreamblesPerSSB one n8 and ra-ContentionResolutionTimer sf64. rsrp-ThresholdSSB-SUL carries 106 in this run for the -50 I put in prach_rsrp_threshold, and pusch-ConfigCommon and pucch-ConfigCommon close the list with p0-NominalWithGrant -84 and pucch-ResourceCommon 11.

The first thing you need to check in the log is PRACH. If UE uplink is connected to SUL cell, you see the sul_index field in PRACH log. You can also confirm on the PRACH sent to SUL cell by checking [Cell] column in the log.
The two PRACH entries at 14:08:21.166 and 14:08:22.594 read sequence_index=42 with ta=1136 and ta=1138 and no sul_index field at all. The one at 14:08:32.565 reads sequence_index=6 ta=5 prb=3:3 sul_index=0 snr=29.1, and this is the one that went onto the supplementary uplink. The 0 in sul_index is the index of the SUL configuration that was used, so it is the presence of the field and not its value that tells you where the preamble landed.
Everything that follows is the ordinary contention resolution, so you can see the attempt succeed. RAR comes back with rapid=6, matching the sequence_index, then Msg3 on PUSCH, then RRC setup request and RRC setup on CCCH-NR.

You can easily check whether each of UL channel (PUCCH, PUSCH, SRS) is going thorugh normal cell or SUL cell by checking RB map. (NOTE: In case of PUSCH, you can also confirm whether it goes through normal cell or SUL cell by checking sul field of PUSCH log for example, Message: harq=10 prb=2 symb=0:14 CW0: tb_len=20 mod=2 rv_idx=0 cr=0.56 retx=0 crc=OK snr=4.4 epre=-25.0 ta=5.2
The Resource Block Allocation view lists four rows for this log, #0 DL, #0 UL, #1 DL and #1 UL, so the second row is the uplink of the normal cell and the fourth is the uplink of the SUL cell. Tick or untick them in the Cell list on the left to keep only the pair you care about. The legend gives the colours you read them by, PUSCH in red, PUCCH in green, PRACH in yellow, PDSCH in blue and a hatched fill for retransmissions.
At 14:08:32.562, just after the connection comes up, the wide full band PUSCH blocks are on the normal cell uplink and three of the four are hatched, so they are retransmissions. The SUL uplink at the same moment carries only small allocations at the top of the band.

About 600 ms later, at 14:08:33.198, the same four rows tell a different story. The normal cell uplink is empty across the whole window and the SUL uplink is solid PUSCH from one edge to the other. This is the switch that pusch: "both" allows and that pusch_switch_snr_threshold decides the moment of, and it is why force_full_bsr is worth setting, because without traffic there would be nothing in either row to compare.

You can check whether gNB schedules Uplink to normal cell or SUL cell by checking sul_ind field of DCI message.
For example, sul_ind=0 indicates that this scheduling is for normal cell (non SUL cell)
The row to open is the PDCCH one, not the PUSCH that follows it, because the grant is what carries the choice and the PUSCH only shows the result. This one at 14:08:32.602 reads ss_id=2 cce_index=4 al=2 dci=0_1 k2=4, and the decoded content behind it is rb_alloc=0x12f, mcs=14, ndi=0, rv_idx=2, harq_process=3, dai=3, tpc_command=1, antenna_ports=0, srs_request=0, dmrs_seq_init=0, ul_sch_indicator=1 and sul_ind=0.
sul_ind only exists in DCI format 0_1, so filtering on dci=0_1 is how you find the grants worth reading. A format 0_0 grant carries no such field and tells you nothing about which uplink was picked.

For another example, sul_ind=1 indicates that this scheduling is for SUL cell.
This grant carries the same timestamp of 14:08:32.602 and is only three messages further on, ss_id=2 cce_index=0 al=2 dci=0_1 k2=4 with ul_sch_indicator=1 again. What changed is sul_ind=1, and with it rb_alloc=0x2 against 0x12f and mcs=7 against 14, so the SUL grant here is a much smaller allocation at a lower modulation than the one before it.
Two grants that close together going to different uplinks is what the switching looks like in practice. The gNB makes the choice per grant rather than once for the connection, so read sul_ind on each DCI instead of assuming the uplink stayed where you last saw it.

RRC / NAS Signaling
SIB1 (SA) for Normal Cell (non-SUL cell)
: This is the SIB1 sent by Normal Cell gNB to configure SUL. (
{
message c1: systemInformationBlockType1: {
cellSelectionInfo {
q-RxLevMin -70,
q-QualMin -20
},
cellAccessRelatedInfo {
plmn-IdentityInfoList {
{
plmn-IdentityList {
{
mcc {
0,
0,
1
},
mnc {
0,
1
}
}
},
trackingAreaCode '000064'H,
cellIdentity '001234500'H,
cellReservedForOperatorUse notReserved
}
}
},
connEstFailureControl {
connEstFailCount n1,
connEstFailOffsetValidity s30,
connEstFailOffset 1
},
servingCellConfigCommon {
downlinkConfigCommon {
frequencyInfoDL {
frequencyBandList {
{
freqBandIndicatorNR 28
}
},
offsetToPointA 38,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
initialDownlinkBWP {
genericParameters {
locationAndBandwidth 13750,
subcarrierSpacing kHz30
},
pdcch-ConfigCommon setup: {
commonSearchSpaceList {
{
searchSpaceId 1,
controlResourceSetId 0,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n0,
aggregationLevel4 n4,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType common: {
dci-Format0-0-AndFormat1-0 {
}
}
}
},
searchSpaceSIB1 0,
searchSpaceOtherSystemInformation 1,
pagingSearchSpace 1,
ra-SearchSpace 1
},
pdsch-ConfigCommon setup: {
pdsch-TimeDomainAllocationList {
{
mappingType typeA,
startSymbolAndLength 40
}
}
}
},
bcch-Config {
modificationPeriodCoeff n4
},
pcch-Config {
defaultPagingCycle rf128,
nAndPagingFrameOffset oneT: NULL,
ns one
}
},
uplinkConfigCommon {
frequencyInfoUL {
frequencyBandList {
{
freqBandIndicatorNR 28
}
},
absoluteFrequencyPointA 143264,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 13750,
subcarrierSpacing kHz30
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 16,
msg1-FDM one,
msg1-FrequencyStart 3,
zeroCorrelationZoneConfig 15,
preambleReceivedTargetPower -110,
preambleTransMax n7,
powerRampingStep dB4,
ra-ResponseWindow sl10
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
ra-ContentionResolutionTimer sf64,
rsrp-ThresholdSSB-SUL 106,
prach-RootSequenceIndex l839: 1,
restrictedSetConfig unrestrictedSet
},
pusch-ConfigCommon setup: {
pusch-TimeDomainAllocationList {
{
k2 4,
mappingType typeA,
startSymbolAndLength 27
}
},
p0-NominalWithGrant -84
},
pucch-ConfigCommon setup: {
pucch-ResourceCommon 11,
pucch-GroupHopping neither,
p0-nominal -90
}
},
timeAlignmentTimerCommon infinity
},
supplementaryUplink {
frequencyInfoUL {
frequencyBandList {
{
freqBandIndicatorNR 80
}
},
absoluteFrequencyPointA 347664,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 13750,
subcarrierSpacing kHz30
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 16,
msg1-FDM one,
msg1-FrequencyStart 3,
zeroCorrelationZoneConfig 15,
preambleReceivedTargetPower -110,
preambleTransMax n7,
powerRampingStep dB4,
ra-ResponseWindow sl10
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
ra-ContentionResolutionTimer sf64,
rsrp-ThresholdSSB-SUL 106,
prach-RootSequenceIndex l839: 128,
restrictedSetConfig unrestrictedSet
},
pusch-ConfigCommon setup: {
pusch-TimeDomainAllocationList {
{
k2 4,
mappingType typeA,
startSymbolAndLength 27
}
},
p0-NominalWithGrant -84
},
pucch-ConfigCommon setup: {
pucch-ResourceCommon 11,
pucch-GroupHopping neither,
p0-nominal -90
}
},
timeAlignmentTimerCommon ms500
},
ssb-PositionsInBurst {
inOneGroup '80'H
},
ssb-PeriodicityServingCell ms20,
ss-PBCH-BlockPower -60
},
ue-TimersAndConstants {
t300 ms1000,
t301 ms1000,
t310 ms1000,
n310 n1,
t311 ms30000,
n311 n1,
t319 ms1000
}
}
}
SIB1 (SA) for SUL cell
: This is the SIB1 sent by Normal Cell gNB
{
message c1: systemInformationBlockType1: {
cellSelectionInfo {
q-RxLevMin -70,
q-QualMin -20
},
cellAccessRelatedInfo {
plmn-IdentityInfoList {
{
plmn-IdentityList {
{
mcc {
0,
0,
1
},
mnc {
0,
1
}
}
},
trackingAreaCode '000064'H,
cellIdentity '001234501'H,
cellReservedForOperatorUse notReserved
}
}
},
connEstFailureControl {
connEstFailCount n1,
connEstFailOffsetValidity s30,
connEstFailOffset 1
},
servingCellConfigCommon {
downlinkConfigCommon {
frequencyInfoDL {
frequencyBandList {
{
freqBandIndicatorNR 3
}
},
offsetToPointA 38,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
initialDownlinkBWP {
genericParameters {
locationAndBandwidth 13750,
subcarrierSpacing kHz30
},
pdcch-ConfigCommon setup: {
commonSearchSpaceList {
{
searchSpaceId 1,
controlResourceSetId 0,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n0,
aggregationLevel4 n4,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType common: {
dci-Format0-0-AndFormat1-0 {
}
}
}
},
searchSpaceSIB1 0,
searchSpaceOtherSystemInformation 1,
pagingSearchSpace 1,
ra-SearchSpace 1
},
pdsch-ConfigCommon setup: {
pdsch-TimeDomainAllocationList {
{
mappingType typeA,
startSymbolAndLength 40
}
}
}
},
bcch-Config {
modificationPeriodCoeff n4
},
pcch-Config {
defaultPagingCycle rf128,
nAndPagingFrameOffset oneT: NULL,
ns one
}
},
uplinkConfigCommon {
frequencyInfoUL {
frequencyBandList {
{
freqBandIndicatorNR 3
}
},
absoluteFrequencyPointA 347664,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 13750,
subcarrierSpacing kHz30
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 16,
msg1-FDM one,
msg1-FrequencyStart 3,
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: {
pusch-TimeDomainAllocationList {
{
k2 4,
mappingType typeA,
startSymbolAndLength 27
}
},
p0-NominalWithGrant -84
},
pucch-ConfigCommon setup: {
pucch-ResourceCommon 11,
pucch-GroupHopping neither,
p0-nominal -90
}
},
timeAlignmentTimerCommon infinity
},
ssb-PositionsInBurst {
inOneGroup '80'H
},
ssb-PeriodicityServingCell ms20,
ss-PBCH-BlockPower -60
},
ue-TimersAndConstants {
t300 ms1000,
t301 ms1000,
t310 ms1000,
n310 n1,
t311 ms30000,
n311 n1,
t319 ms1000
}
}
}