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).

 

 

 

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]