5G/NR - MAC CE  




Timing Advance

The concept and functionality of NR Timing Advance is same as the LTE Timing Advance. So I suggest you to read LTE Timing Advance as well if you are not familiar with the concept.

Simply put, Timing Advance is a special command (notification) from eNB to UE that enable UE to adjust its uplink transmission as shown below. This kind of UL adjustment applies to PUSCH, PUCCH and SRS.

< 38.211 - Figure 4.3.1-1: Uplink-downlink timing relation ?


ServingCellConfigCommon ::= SEQUENCE {

   physCellId                                   PhysCellId OPTIONAL, -- Cond HOAndServCellAdd,

   downlinkConfigCommon                         DownlinkConfigCommon OPTIONAL,

   uplinkConfigCommon                           UplinkConfigCommon OPTIONAL, -- Need M

   supplementaryUplinkConfig                    UplinkConfigCommon OPTIONAL, -- Need S

   n-TimingAdvanceOffset                        ENUMERATED { n0, n25600, n39936 } OPTIONAL,

   ssb-PositionsInBurst                     CHOICE {

      shortBitmap                               BIT STRING (SIZE (4)),

      mediumBitmap                              BIT STRING (SIZE (8)),

      longBitmap                                BIT STRING (SIZE (64))

   } OPTIONAL, -- Cond AbsFreqSSB

   ssb-periodicityServingCell                   ENUMERATED { ms5, ms10, ms20, ms40,

                                                            ms80, ms160, spare2, spare1 }

   dmrs-TypeA-Position                           ENUMERATED {pos2, pos3},

   lte-CRS-ToMatchAround                         SetupRelease { RateMatchPatternLTE-CRS } ,

   rateMatchPatternToAddModList                  SEQUENCE (SIZE (1..maxNrofRateMatchPatterns))

                                                          OF RateMatchPattern

   rateMatchPatternToReleaseList                 SEQUENCE (SIZE (1..maxNrofRateMatchPatterns))

                                                          OF RateMatchPatternId OPTIONAL,

   subcarrierSpacing                             SubcarrierSpacing    OPTIONAL,

   tdd-UL-DL-ConfigurationCommon                 TDD-UL-DL-ConfigCommon OPTIONAL, -- Cond TDD

   ss-PBCH-BlockPower INTEGER (-60..50),



How TimingAdvance information is delivered to UE ?


Case 1 : Through RAR

UE figures out the timing advance value from two different MAC layer command depending on situation. For the first Uplink message after PRACH, UE applies the Timing Advance value that it extracts from RAR (RACH Response). After the initial RACH process, UE would apply the timing Advance value that it extract from Timing Advance MAC CE if it received it.

NOTE : With 12 bit TA value, the max TA value can allow around 2ms delay at 15 Khz SCS, around 1 ms delay at 30 Khz SCS.  ==> This may be large enough to cover the possible delays on terrestrial network, but too short for NTN(Non Terrestrial Network) application.


Case 2 : Through MAC CE


As mentioned above, UE adjust UL transmission timing based on RAR during the initial attach. Once the initial attach is complete, UE adjust UL transmission based on the MAC CE-Timing Advance. The structure of MAC CE Timing Advance is as shown below.


< 38.321 - Figure Timing Advance Command MAC CE >


You see here the Timing Advance Command Field is 6 bits which mean 64 steps in total ranging from -32 to 32 Tc in real timing. Since Tc is 0.509, the range of the physical timing is -16.3 us to 16.3 us.

The TAG field in the MAC CE refers to the tag-Id specified in RRC message as shown below.

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,



   csi-Mask-v1530               BOOLEAN OPTIONAL , -- Need M

   dataInactivityTimer-v1530    SetupRelease { DataInactivityTimer } OPTIONAL -- Need





TAG-Config ::= SEQUENCE {

   tag-ToReleaseList            SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-Id OPTIONAL, -- Need N

   tag-ToAddModList             SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG OPTIONAL -- Need N




   tag-Id TAG-Id,

   timeAlignmentTimer TimeAlignmentTimer,




TAG-Id ::= INTEGER (0..maxNrofTAGs-1) // maxNrofTAGs = 4


TimeAlignmentTimer ::= ENUMERATED {ms500, ms750, ms1280, ms1920, ms2560, ms5120, ms10240, infinity}

At which slot the received Timing Advance value is applied ?

Once the Timing Advance(TA) value is received by UE, the UE should apply the value for UL transmission 6 slot after the reception. That is, if TA is received at slot n, the value is applied from slot n+6 as stated in 38.213-4.2.