Network can allocate a certain set (range) of prach preamble indices for a specific CE level via SIB2. The UE reads those ranges before it sends its first preamble, and the eNB uses them in the other direction. When a preamble arrives, its index can tell the eNB which CE level the UE chose. This page looks at how SIB2 carries the ranges, why a cell needs them, and how Release 15 EDT adds a second range to each level.
Followings are the topics to be covered in this page.
- How does SIB2 split the preamble indices across CE levels ?
- Why does each CE level need its own preamble block ?
- How does EDT add a second preamble block ?
- Reference
How does SIB2 split the preamble indices across CE levels ?
A BL UE chooses its CE level before it sends anything, and the eNB has to learn that choice from Msg1 alone. The preamble index is one of the few things Msg1 carries. So 36.331 lets the network reserve a block of indices for each level. Let's start with the field that holds those blocks, and then read one real configuration.
36.331 states :
rach-CE-LevelInfoList Provides RACH information for each coverage level. The first entry in the list contains RACH information of CE level 0, the second entry in the list contains RACH information of CE level 1, and so on. If E-UTRAN includes rach-CELevelInfoList, it includes the same number of entries as in prach-ParametersListCE.
Each entry of rach-CE-LevelInfoList-r13 carries a preambleMappingInfo-r13 with two integers, firstPreamble-r13 and lastPreamble-r13. Both run from 0 to 63, which covers the 64 preambles of one cell. The block for a level is every index from the first value to the last. The same entry also carries the response window, the contention resolution timer and the RAR hopping switch for that level. So the network always configures a preamble block and its timers together. The full RACH-CE-LevelInfo-r13 listing, checked against 36.331 v19.3.0, is on the RACH page.
The capture below is a decoded SIB2 from one cell. It is split across two images because the list is long. The tree on the left expands rach-ConfigCommon down to rach-CE-LevelInfoList-r13, which holds four entries. The number line on the right places the four preamble blocks between 0 and 63. The small tables map each level to its operation mode.


Four contiguous preamble blocks, one per CE level, fill the upper part of the 64 preamble range. The two Mode A levels take 20 to 40, and the two Mode B levels take 41 to 63.
The four entries are the four levels in order : the entries carry 20 to 30, 31 to 40, 41 to 50 and 51 to 63. No field inside an entry names its level. Its position in the list does that.The blocks do not overlap : each lastPreamble-r13 is one less than the next firstPreamble-r13. So every index from 20 to 63 points at exactly one level.Level 1 to Level 4 in the drawing are CE level 0 to 3 in the specifications : 36.331 and 36.321 count from zero, as the CE Level page explains.Preambles 0 to 19 sit outside every block : preambleInfo is collapsed in the capture, so the picture does not show how the cell uses them.The timers here do not grow with the level : the first entry uses sf80 and sf200, and the other three use sf20 and sf80. Read them as the values of one captured cell, not as recommended values.preambleTransMax-CE-r13 sits beside the list : its value is n5, and one value covers every level.
Why does each CE level need its own preamble block ?
A separate block costs preambles, and a cell has only 64. The block is needed in one situation, and 36.321 names it. You should know that situation, because a cell that avoids it can configure the field very differently.
The eNB has two ways to tell CE levels apart when a preamble arrives. The first is the PRACH resource. Each level has its own PRACH-ParametersCE-r13 entry, with its own prach-ConfigIndex-r13 and prach-FreqOffset-r13. If those differ between levels, the time and frequency position of the preamble already identifies the level. The second is the preamble index. When two or more levels share one PRACH resource, the position identifies nothing, and only the index is left.
36.321 clause 5.1.1 covers that second case in NOTE 2. When several CE levels share a PRACH resource and different preamble indices separate them, Group A and Group B are not used on that resource. The reason is arithmetic. Group A and Group B also divide the preamble range, and one range cannot be divided both ways at once.
36.331 describes the opposite case in the preambleMappingInfo field description. When Random Access Preambles group B is used, firstPreamble-r13 is set to 0 and lastPreamble-r13 is set to numberOfRA-Preambles-1. Every level then gets the whole contention based range, and the PRACH resource has to separate the levels instead. Figure 1 puts the two cases side by side.
Figure 1. Two ways to tell CE levels apart. A shared PRACH resource needs a separate preamble block for each level, while separate PRACH resources let every level use the full range.
The capture in the section above fits the left half of Figure 1. Its four blocks do not overlap, and that is what a shared PRACH resource requires. But the capture does not expand prach-ParametersListCE, so it cannot show whether the resources really are shared.
The eNB needs the level long before Msg3 arrives. The UE selects the ra-ResponseWindowSize and mac-ContentionResolutionTimer of its chosen level, as 36.321 clause 5.1.2 specifies. The eNB has to answer inside that window. The RAR format depends on the level too. For enhanced coverage level 2 or 3, 36.321 clause 6.1.5 uses a different MAC RAR, with a 12 bit UL grant instead of 20 bits. An eNB that reads the level wrongly therefore answers in the wrong format and on the wrong timeline.
The preamble block identifies the level only on a shared PRACH resource : with separate resources, the time and frequency position already does it.A shared resource gives up Group A and Group B : NOTE 2 of 36.321 clause 5.1.1 says so, because both schemes would divide the same range.With group B in use, every level gets the full range : firstPreamble-r13 is 0 and lastPreamble-r13 is numberOfRA-Preambles-1.The eNB needs the level to build its answer : the response window, the contention resolution timer and the RAR format all depend on it.
How does EDT add a second preamble block ?
Release 15 added early data transmission, EDT, where a UE sends a small amount of user data in Msg3. The eNB has to know that Msg3 will be larger before it sends the UL grant in the RAR. So EDT needs preambles of its own, and it takes them from the same 0 to 63 range.
The Release 15 extension of RACH-CE-LevelInfo-r13 is edt-Parameters-r15. It adds one boundary, edt-LastPreamble-r15, which is an INTEGER from 0 to 63. It also carries edt-SmallTBS-Enabled-r15, edt-TBS-r15 and an optional mac-ContentionResolutionTimer-r15 for EDT. There is no edt-FirstPreamble field. The EDT block takes its first index from the normal block, in one of two ways.
36.331 and 36.321 state the same rule, and it depends on the PRACH resource again. Let's take the two cases in the table below.
EDT PRACH resource of the level |
EDT preambles |
What separates EDT from normal access |
Different from every PRACH-ParametersCE-r13 resource, and from the EDT resource of every other level | firstPreamble-r13 to edt-LastPreamble-r15 | The PRACH resource |
Any other case | lastPreamble-r13 + 1 to edt-LastPreamble-r15 | The preamble index |
From the edt-LastPreamble field description in 36.331 v19.3.0 and clause 5.1.1 of 36.321 v19.3.0. A shared resource places the EDT block directly after the normal block of the same level.
Let's apply the second row to the capture above. The first entry ends at 30, so EDT for that level would start at 31. But 31 is already the first preamble of the next level. This cell therefore cannot add EDT on a shared PRACH resource without moving the blocks apart first. The capture carries no edt-Parameters-r15, so the conflict does not arise there. A network that plans EDT on a shared resource has to leave a gap after each lastPreamble-r13.
EDT adds a last preamble, not a first one : the start comes from firstPreamble-r13 or from lastPreamble-r13 + 1.A separate EDT PRACH resource reuses the start of the normal block : the resource position already marks the attempt as EDT.A shared resource puts the EDT block right after the normal one : the index is then the only thing that marks EDT, so the two blocks must not overlap.Contiguous level blocks leave no room for EDT : in the capture above, lastPreamble-r13 + 1 of each level is the firstPreamble-r13 of the next. The last block already ends at 63.
Reference
[1] 3GPP TS 36.331 v19.3.0 - RACH-ConfigCommon, rach-CE-LevelInfoList-r13 and RACH-CE-LevelInfo-r13 with its field descriptions, including edt-Parameters-r15
[2] 3GPP TS 36.321 v19.3.0 - clause 5.1.1 for the preamble groups of each enhanced coverage level and NOTE 2, clause 5.1.2 for resource selection, clause 6.1.5 for the MAC RAR of enhanced coverage level 2 or 3