5G/NR - RRC Reconfiguration Home : www.sharetechnote.com |
As in LTE, RRC Reconfiguration is the most important steps in establishing Radio Connection between UE and Network. Understanding every details of RRC Reconfiguration would imply understanding almost everything in NR Radio Stack. I would take around an year to get the understandings on the details of this single message to a certain degree and you would need to keep learning further details and new things throughout the whole life cycles of 5G/NR. So.. don't be too hurry trying to understand everything at a time and read / think on small pieces and analyze the protocol log when available whenever you have chance. This page also will be updated piece by piece and linked to many other pages for the details.
Following sequence shows what triggers NR RRC Reconfiguration on UE. As you see here, this can be triggered by LTE (in NSA(Non-Standalone) deployment) or by NR (in SA(Standalone) deployment).
Purpose (Function) of RRC Reconfiguration
As you can guess from the word itself, the major functionality of RrcReconfiguration is to setup or modify RRC configuration. Why we have the prefix 'Re(meaning 'again' or 'changin')' here ? Personally I think this 'Re' would be confusing sometime. In LTE, the prefix 'Re' in RrcConnectionReconfigurationRequest make sense because in LTE the initial RRC configuration get setup by RrcConnectionSetup message at early phase of registration process and RrcConnectionReconfigurationRequest is basically changing (reconfiguring) of RRC configuration made by RrcConnectionSetup. But in NR, both initial RRC Configuration Setup at the early phase of registration and RRC Configuration change at later part are done by the same message RrcReconfiguration. ... Anyway.. this is not a big deal.
The major functionality of RRC Reconfiguration are to configure following RRC Components/Functions
For each of the RRC Component/Functions, RrcReconfiguration message can do following operations
RRC Reconfiguration Message structure
Followings are RRC Reconfiguration Message structure from 38.331 v15.1.0
RRCReconfiguration ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcReconfiguration RRCReconfiguration-IEs, criticalExtensionsFuture SEQUENCE {} } }
RRCReconfiguration-IEs ::= SEQUENCE { radioBearerConfig RadioBearerConfig OPTIONAL, -- Need M secondaryCellGroup OCTET STRING (CONTAINING CellGroupConfig) OPTIONAL, -- Need M measConfig MeasConfig OPTIONAL, -- Need M lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL }
RadioBearerConfig ::= SEQUENCE { srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Need N srb3-ToRelease ENUMERATED{true} OPTIONAL, -- Need N drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Need N drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need N securityConfig SecurityConfig OPTIONAL, -- Cond M ... }
SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod
SRB-ToAddMod ::= SEQUENCE { srb-Identity SRB-Identity, reestablishPDCP ENUMERATED{true} OPTIONAL, - Need N discardOnPDCP ENUMERATED{true} OPTIONAL, -- Need N pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP ... }
DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod DRB-ToAddMod ::= SEQUENCE { cnAssociation CHOICE { eps-BearerIdentity INTEGER (0..15) OPTIONAL, sdap-Config SDAP-Config OPTIONAL }, drb-Identity DRB-Identity, reestablishPDCP ENUMERATED{true} OPTIONAL, recoverPDCP ENUMERATED{true} OPTIONAL, pdcp-Config PDCP-Config OPTIONAL, ... }
DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity
SecurityConfig ::= SEQUENCE { securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, keyToUse ENUMERATED{KeNB, S-KgNB} OPTIONAL ... }
SecurityAlgorithmConfig ::= SEQUENCE { cipheringAlgorithm CipheringAlgorithm, integrityProtAlgorithm IntegrityProtAlgorithm OPTIONAL, -- Need R ... }
IntegrityProtAlgorithm ::= ENUMERATED { nia0, nia1, nia2, nia3, spare4, spare3, spare2, spare1, ...}
CipheringAlgorithm ::= ENUMERATED { nea0, nea1, nea2, nea3, spare4, spare3, spare2, spare1, ...}
CellGroupConfig ::= SEQUENCE { cellGroupId CellGroupId, rlc-BearerToAddModList SEQUENCE (SIZE(1..maxLC-ID)) OF RLC-Bearer-Config OPTIONAL, rlc-BearerToReleaseList SEQUENCE (SIZE(1..maxLC-ID)) OF LogicalChannelIdentity OPTIONAL, mac-CellGroupConfig MAC-CellGroupConfig OPTIONAL, physicalCellGroupConfig PhysicalCellGroupConfig OPTIONAL, spCellConfig SpCellConfig OPTIONAL, sCellToAddModList SEQUENCE (SIZE (1..maxNrofSCells)) OF SCellConfig OPTIONAL, sCellToReleaseList SEQUENCE (SIZE (1..maxNrofSCells)) OF SCellIndex OPTIONAL, ... }
MAC-CellGroupConfig ::= SEQUENCE { drx-Config SetupRelease { DRX-Config } OPTIONAL, -- Need M schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need M bsr-Config BSR-Config OPTIONAL, -- Need M tag-Config TAG-Config OPTIONAL, -- Need M phr-Config SetupRelease { PHR-Config } OPTIONAL, -- Need M skipUplinkTxDynamic BOOLEAN, cs-RNTI SetupRelease { RNTI-Value } OPTIONAL -- Need M }
DRX-Config ::= SEQUENCE { drx-onDurationTimer CHOICE { subMilliSeconds INTEGER (1..31), milliSeconds ENUMERATED { ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200, ms1600, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } }, drx-InactivityTimer ENUMERATED { ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80, ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, drx-HARQ-RTT-TimerDL INTEGER (0..56), drx-HARQ-RTT-TimerUL INTEGER (0..56), drx-RetransmissionTimerDL ENUMERATED { sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128, sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, drx-RetransmissionTimerUL ENUMERATED { sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128, sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }, drx-LongCycleStartOffset CHOICE { ms10 INTEGER(0..9), ms20 INTEGER(0..19), ms32 INTEGER(0..31), ms40 INTEGER(0..39), ms60 INTEGER(0..59), ms64 INTEGER(0..63), ms70 INTEGER(0..69), ms80 INTEGER(0..79), ms128 INTEGER(0..127), ms160 INTEGER(0..159), ms256 INTEGER(0..255), ms320 INTEGER(0..319), ms512 INTEGER(0..511), ms640 INTEGER(0..639), ms1024 INTEGER(0..1023), ms1280 INTEGER(0..1279), ms2048 INTEGER(0..2047), ms2560 INTEGER(0..2559), ms5120 INTEGER(0..5119), ms10240 INTEGER(0..10239) }, shortDRX SEQUENCE { drx-ShortCycle ENUMERATED { ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32, ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }, drx-ShortCycleTimer INTEGER (1..16) } OPTIONAL, -- Need R drx-SlotOffset INTEGER (0..31)
}
PHR-Config ::= SEQUENCE { phr-PeriodicTimer ENUMERATED {sf10, sf20, sf50, sf100, sf200,sf500, sf1000, infinity}, phr-ProhibitTimer ENUMERATED {sf0, sf10, sf20, sf50, sf100,sf200, sf500, sf1000}, phr-Tx-PowerFactorChange ENUMERATED {dB1, dB3, dB6, infinity}, multiplePHR BOOLEAN, phr-Type2PCell BOOLEAN, phr-Type2OtherCell BOOLEAN, phr-ModeOtherCG ENUMERATED {real, virtual}
}
TAG-Config ::= SEQUENCE { tag-ToReleaseList SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-Id OPTIONAL,-- Need N tag-ToAddModList SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-ToAddMod OPTIONAL -- Need N }
TAG-ToAddMod ::= SEQUENCE { tag-Id TAG-Id, timeAlignmentTimer TimeAlignmentTimer, ... }
TAG-Id ::= INTEGER (0..maxNrofTAGs-1)
TimeAlignmentTimer ::= ENUMERATED {ms500, ms750, ms1280, ms1920, ms2560, ms5120, ms10240, infinity}
BSR-Config ::= SEQUENCE { periodicBSR-Timer ENUMERATED { sf1, sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, sf1280, sf2560, infinity}, retxBSR-Timer ENUMERATED { sf10, sf20, sf40, sf80, sf160, sf320, sf640, sf1280, sf2560, sf5120, sf10240, spare5, spare4,spare3, spare2, spare1}, logicalChannelSR-DelayTimer ENUMERATED { sf20, sf40, sf64, sf128, sf512, sf1024, sf2560, spare1} OPTIONAL -- Need R }
SchedulingRequestConfig ::= SEQUENCE { schedulingRequestToAddModList SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF SchedulingRequestToAddMod OPTIONAL, -- Need N schedulingRequestToReleaseList SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF SchedulingRequestId OPTIONAL -- Need N }
SchedulingRequestToAddMod ::= SEQUENCE { sr-ConfigIndex SchedulingRequestId, sr-ProhibitTimer ENUMERATED {ms1, ms2, ms4, ms8, ms16, ms32, ms64, ms128} OPTIONAL, -- Need S sr-TransMax ENUMERATED {n4,n8,n16,n32,n64,spare3,spare2,spare1} }
SchedulingRequestId ::= INTEGER (0..7)
CellGroupId ::= INTEGER (1.. maxSCellGroups)
LCH-Config ::= SEQUENCE { logicalChannelIdentity LogicalChannelIdentity, servedRadioBearer INTEGER (1..32) OPTIONAL, reestablishRLC ENUMERATED {true} OPTIONAL, rlc-Config RLC-Config OPTIONAL, mac-LogicalChannelConfig LogicalChannelConfig OPTIONAL }
LogicalChannelIdentity ::= INTEGER (1..FFS)
PhysicalCellGroupConfig ::= SEQUENCE { harq-ACK-SpatialBundlingPUCCH ENUMERATED {true} OPTIONAL, -- Need S harq-ACK-SpatialBundlingPUSCH ENUMERATED {true} OPTIONAL, -- Need S p-NR P-Max OPTIONAL, -- Need R pdsch-HARQ-ACK-Codebook ENUMERATED {semiStatic, dynamic}, tpc-SRS-RNTI RNTI-Value OPTIONAL, -- Need R tpc-PUCCH-RNTI RNTI-Value OPTIONAL, -- Need R tpc-PUSCH-RNTI RNTI-Value OPTIONAL, -- Need R sp-CSI-RNTI RNTI-Value OPTIONAL, -- Cond SP-CSI-Report cs-RNTI SetupRelease { RNTI-Value } OPTIONAL, -- Need R }
SpCellConfig ::= SEQUENCE { servCellIndex ServCellIndex OPTIONAL, -- Cond SCG reconfigurationWithSync ReconfigurationWithSync OPTIONAL, rlf-TimersAndConstants etupRelease { RLF-TimersAndConstants } OPTIONAL, -- Need M rlmInSyncOutOfSyncThreshold INTEGER (0..1) OPTIONAL, -- Need M spCellConfigDedicated ServingCellConfig OPTIONAL, -- Need M ... }
ReconfigurationWithSync ::= SEQUENCE { spCellConfigCommon ServingCellConfigCommon OPTIONAL, -- Need M newUE-Identity RNTI-Value, t304 ENUMERATED {ms50, ms100, ms150, ms200, ms500, ms1000 , ms2000, ms10000}, rach-ConfigDedicated CHOICE { uplink RACH-ConfigDedicated, supplementaryUplink RACH-ConfigDedicated } OPTIONAL, -- Need N ... }
ServingCellConfig ::= SEQUENCE { tdd-UL-DL-ConfigurationDedicated TDD-UL-DL-ConfigDedicated OPTIONAL,-- Cond TDD initialDownlinkBWP BWP-DownlinkDedicated OPTIONAL, -- Cond ServCellAdd downlinkBWP-ToReleaseList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id OPTIONAL, downlinkBWP-ToAddModList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Downlink OPTIONAL firstActiveDownlinkBWP-Id BWP-Id OPTIONAL, -- Need R bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40,ms50, ms60, ms80, ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } OPTIONAL, defaultDownlinkBWP-Id BWP-Id OPTIONAL, -- Need M uplinkConfig UplinkConfig OPTIONAL, -- Cond ServCellAdd-UL supplementaryUplink UplinkConfig OPTIONAL, -- Cond ServCellAdd-SUL pdsch-ServingCellConfig SetupRelease { PDSCH-ServingCellConfig } OPTIONAL, -- Need M csi-MeasConfig SetupRelease { CSI-MeasConfig } OPTIONAL, -- Need M carrierSwitching SetupRelease { SRS-CarrierSwitching} OPTIONAL, -- Need M sCellDeactivationTimer ENUMERATED {ms20, ms40, ms80, ms160, ms200, ms240, ms320, ms400, ms480, ms520, ms640, ms720, ms840, ms1280, spare2,spare1} OPTIONAL,-- Cond ServingCellWithoutPUCCH crossCarrierSchedulingConfig CrossCarrierSchedulingConfig OPTIONAL, -- Need M tag-Id TAG-Id, ue-BeamLockFunction ENUMERATED {enabled} OPTIONAL, -- Need R pathlossReferenceLinking ENUMERATED {pCell, sCell} OPTIONAL -- Cond SCellOnly }
PDSCH-ServingCellConfig ::= SEQUENCE { codeBlockGroupTransmission SetupRelease { PDSCH-CodeBlockGroupTransmission } OPTIONAL, -- Need M xOverhead ENUMERATED { xOh6, xOh12, xOh18 } OPTIONAL,-- Need S nrofHARQ-ProcessesForPDSCH ENUMERATED {n2, n4, n6, n10, n12, n16} OPTIONAL,-- Need S pucch-Cell ServCellIndex OPTIONAL , -- Cond SCellAddOnly ... }
PDSCH-CodeBlockGroupTransmission ::= SEQUENCE { maxCodeBlockGroupsPerTransportBlock ENUMERATED {n2, n4, n6, n8}, codeBlockGroupFlushIndicator BOOLEAN, ... }
UplinkConfig ::= SEQUENCE { initialUplinkBWP BWP-UplinkDedicated OPTIONAL, -- Cond ServCellAdd. uplinkBWP-ToReleaseList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id OPTIONAL,-- Need N uplinkBWP-ToAddModList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Uplink OPTIONAL, firstActiveUplinkBWP-Id BWP-Id OPTIONAL, -- Need R pusch-ServingCellConfig SetupRelease { PUSCH-ServingCellConfig } OPTIONAL, ... }
ServingCellConfigCommon ::= SEQUENCE { physCellId PhysCellId frequencyInfoDL FrequencyInfoDL initialDownlinkBWP BWP-DownlinkCommon uplinkConfigCommon UplinkConfigCommon supplementaryUplinkConfig UplinkConfigCommon ssb-PositionsInBurst CHOICE { shortBitmap BIT STRING (SIZE (4)), mediumBitmap BIT STRING (SIZE (8)), longBitmap BIT STRING (SIZE (64)) } OPTIONAL, -- Need R, ssb-periodicityServingCell ENUMERATED { ms5, ms10, ms20, ms40, ms80, ms160, spare2, spare1 }OPTIONAL, -- Need S dmrs-TypeA-Position ENUMERATED {pos2, pos3}, lte-CRS-ToMatchAround SetupRelease { RateMatchPatternLTE-CRS } OPTIONAL, rateMatchPatternToAddModList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPattern rateMatchPatternToReleaseList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId subcarrierSpacing SubcarrierSpacing tdd-UL-DL-ConfigurationCommon TDD-UL-DL-ConfigCommon tdd-UL-DL-ConfigurationCommon2 TDD-UL-DL-ConfigCommon ss-PBCH-BlockPower INTEGER (-60..50), ... }
SubcarrierSpacing ::= ENUMERATED {kHz15, kHz30, kHz60, kHz120, kHz240, spare3, spare2, spare1}
UplinkConfigCommon ::= SEQUENCE {. frequencyInfoUL FrequencyInfoUL initialUplinkBWP BWP-UplinkCommon }
FrequencyInfoDL ::= SEQUENCE { absoluteFrequencySSB ARFCN-ValueNR, ssb-SubcarrierOffset INTEGER (1..23) frequencyBandList MultiFrequencyBandListNR, absoluteFrequencyPointA ARFCN-ValueNR, scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier, ... }
FrequencyInfoUL ::= SEQUENCE { frequencyBandList MultiFrequencyBandListNR absoluteFrequencyPointA ARFCN-ValueNR scs-SpecificCarriers SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier, additionalSpectrumEmission AdditionalSpectrumEmission p-Max P-Max frequencyShift7p5khz ENUMERATED {true} ... }
subcarrierSpacingCommon : Indicates Subcarrier spacing for SIB1, Msg.2/4 for initial access and SI-messages. Values 15, and 30 kHz are applicable for carrier frequencies <6GHz; Values 60 and 120 kHz are applicable for carrier frequencies >6GHz ssb-subcarrieroffset : The frequency domain offset between SSB and the overall resource block grid in number of subcarriers. Absence of the field indicates that no offset if applied (offset = 0). See 38.211, 7.4.3.1) ssb-PositionsInBurst : Indicates the time domain positions of the transmitted SS-blocks in an SS-burst. It corresponds to L1 parameter 'SSB-Transmitted' (see 38.213, section 4.1) shortBitmap : bitmap for sub 3 GHz mediumBitmap : bitmap for 3-6 GHz longBitmap : bitmap for above 6 GHz ssb-periodicityServingCell : The SSB periodicity in msec for the rate matching purpose (see 38.211-7.4.3.1) dmrs-TypeA-Position : Position of (first) DL DM-RS (see 38.211, section 7.4.1.1.1). This field is usually in MIB. Assuming that the UE does not need to acquire MIB before sending RA to target cell, this parameter should also be here.
subcarrierSpacingSSB : Subcarrier spacing of SSB. Used only for non-initial access (e.g. SCells, PCell of SCG). ss-PBCH-BlockPower : TX power that the NW used for SSB transmission. The UE uses it to estimate the RA preamble TX power rach-ConfigCommon : Parameters that are also conveyed via system information (SIB1) but which are provided here to accelerate handover and to avoid that UEs need to read system information from SCells. See rach-ConfigCommon details in RACH page.
newUE-Identity : This is used as an RNTI assigning a C-RNTI to a UE. 38.331(v15.1)-5.3.5.5.2 states 'apply the value of the newUE-Identity as the C-RNTI for this cell group'
Reference
[1]
|