>
HomeLTE 4GMAC โ€” Medium Access ControlBSR / PHR / SR
๐Ÿงฉ MAC โ€” Medium Access ControlIntermediate

BSR, PHR & Scheduling Request in LTE 4G

How the UE tells the eNB what it has to send (BSR/SR) and how much power it has (PHR).

📚 3GPP-basedTS 36.321

The eNB cannot see inside your phone. It has no idea when the UE has uplink data waiting, how much of it there is, or whether the UE still has any transmit-power margin left. Three small MAC-layer reports cure that blindness: the Scheduling Request (SR) asks for a grant, the Buffer Status Report (BSR) says how much data is queued, and the Power Headroom Report (PHR) says how much power is in reserve. All three are defined in TS 36.321, and together they drive the entire uplink scheduling loop.

Introduction

Uplink in LTE is scheduled by the eNB, but all the information the scheduler needs lives inside the UE. Downlink is easy — the eNB owns its own buffers and its own power amplifier. Uplink is opaque: only the UE knows when data arrived, how much is queued on each bearer, and how much transmit-power margin remains at the current path loss. SR, BSR and PHR are the three MAC-layer reports that make the invisible visible so the scheduler can act on fact instead of guesswork.

They run constantly during an active connection. Every time a UE with no grant gets new data, an SR fires; every time the buffer picture changes or a periodic timer expires, a BSR fires; every time path loss shifts or a timer expires, a PHR fires. Between them they open, size and power-check every uplink transmission that is not on a pre-configured grant.

Because the three reports chain into one another — SR wins a foothold, BSR quantifies the need, PHR rides on the data that follows — a stall almost always lives in one specific handoff. Knowing which report failed (no grant after SR? wrong grant size after BSR? power-limited allocation?) narrows the root cause enormously, which is exactly why a step-by-step reading of the trio pays off.

Why the Uplink Reporting Trio Exists

💡

In plain words: imagine ordering at a busy deli counter you can't see over. First you take a ticket to be noticed at all (that's the SR). When the server looks up, you say how many sandwiches you want so they prepare the right amount (that's the BSR). And you mention you've only got a £10 note so they don't ring up more than you can pay (that's the PHR). Three small messages — notice me, this much, this is my limit — and the counter serves you efficiently without ever seeing your wallet.

Uplink scheduling in LTE is a chicken-and-egg problem. To send data the UE needs a grant, but the eNB only hands out grants when it knows the UE actually has something to send, how much of it there is, and whether the UE can reach the cell with enough power. Downlink is easy by comparison โ€” the eNB owns the buffers and knows exactly what it wants to transmit. Uplink is opaque: the data and the power budget both live in the UE. SR, BSR and PHR are the feedback that lets the scheduler act on fact instead of guesswork.

What

SR is a 1-bit "I need a grant" flag on PUCCH. BSR is a MAC Control Element reporting buffered data volume per Logical Channel Group. PHR is a MAC CE reporting the UE's remaining transmit-power margin. Each answers a different question: when, how much, and can you power it.

Why

Without SR the eNB would not know when to schedule an idle UE; without BSR it would not know how much to grant, so it would over- or under-allocate; without PHR it might grant a wide, high-MCS allocation the UE physically cannot transmit at cell edge.

How

SR rides a dedicated PUCCH resource configured by RRC. BSR and PHR are MAC CEs multiplexed into a PUSCH MAC PDU, each identified by its own LCID in the MAC subheader. All three are event-triggered and timer-governed, so they self-refresh without polling.

These three reports are not independent trivia โ€” they form a pipeline. A BSR that has been triggered but has no PUSCH resource to travel on will itself trigger an SR; the SR wins a small grant; that grant carries the BSR; the BSR earns a right-sized grant; and the data PUSCH that follows can piggyback a PHR. Understanding the trio means understanding how each report hands off to the next.

🎯

One sentence each: SR = "give me a grant." BSR = "here is how many bytes I have, per group." PHR = "here is how much power I have left." The scheduler needs all three to make a good uplink decision.

Scheduling Request (SR)

The SR is the smallest signal in the whole system โ€” a single bit โ€” but it starts the entire uplink loop. When data arrives for a logical channel and the UE holds no valid uplink grant to send it on, the MAC entity triggers an SR. There is nowhere to put a BSR yet, so the UE must first raise its hand with the one-bit ask.

What

A 1-bit request transmitted on a configured dedicated PUCCH resource โ€” the D-SR (dedicated SR). RRC sets it up through SchedulingRequestConfig, which carries an sr-PUCCH-ResourceIndex pointing at the PUCCH resource and an sr-ConfigIndex that encodes the SR periodicity and subframe offset.

Why

It is the UE's only way to say "grant me something" when it holds no grant at all. The eNB answers with a small UL grant, which the UE then spends on a BSR describing the real buffered volume so the next grant can be sized properly.

How

A pending SR is sent on the next SR PUCCH occasion. Retransmissions are bounded by dsr-TransMax and paced by sr-ProhibitTimer. If the UE exhausts its SR attempts, it declares SR failure and falls back to the Random Access procedure to get on the air.

The SR travels on PUCCH format 1/1a/1b as a single bit; the eNB's answer is a small uplink grant delivered as a DCI format 0 on PDCCH, CRC scrambled with the UE's C-RNTI, in the UE-specific search space. There is no separate "SR-RNTI" — the SR resource itself is UE-specific, so the eNB knows which UE asked purely from which PUCCH resource carried the bit.

The two SR timers and counters

Two RRC parameters govern how an SR behaves once triggered. The sr-ProhibitTimer is a rate limiter: after the UE transmits an SR, it must not send another until the prohibit timer expires, even if further SR occasions arrive in the meantime. This stops the UE spraying repeated one-bit requests while the eNB is still processing the first one. The dsr-TransMax counter, by contrast, is a give-up threshold: the MAC maintains an SR_COUNTER, incrementing it each time an SR is actually transmitted, and once the counter reaches dsr-TransMax the UE stops trying the D-SR path entirely, releases its PUCCH/SRS configurations, clears any downlink assignment and uplink grant, and initiates Random Access.

ParameterRoleEffect
sr-ConfigIndexEncodes SR periodicity + offsetDefines when the D-SR PUCCH occasions occur (e.g. every 10, 20, 40… ms).
sr-PUCCH-ResourceIndexPoints at the PUCCH resourceFixes where in the PUCCH region the 1-bit SR is sent.
sr-ProhibitTimerMinimum gap between SR transmissionsCaps the SR rate so the UE cannot flood the eNB while it processes.
dsr-TransMaxMax number of SR transmissionsWhen SR_COUNTER hits this, D-SR is abandoned and Random Access starts.

The RA-SR fallback

Not every UE always has a dedicated SR resource. If the UE has data to send but holds no configured D-SR PUCCH resource (and no grant), it cannot send a one-bit ask at all โ€” so it goes straight to the Random Access procedure as its scheduling request. This is the RA-SR (random-access SR) path. The same fallback catches the UE that did have a D-SR resource but exhausted dsr-TransMax attempts without a grant. In both cases the RACH preamble becomes the request, Msg2 (the Random Access Response) carries the initial UL grant, and Msg3 then carries the BSR โ€” Random Access substitutes for the missing or failed D-SR.

💡

No D-SR resource, or SR exhausted? Either way the UE initiates Random Access to get scheduled. That is exactly why "SR failure" and "RACH for scheduling" are linked in exams: the D-SR and the RA-SR are two doors to the same room โ€” a first UL grant โ€” and the UE takes whichever one is open.

Reading the SR step in the logs

On the UE side the SR event shows when the bit was triggered, which resource carried it, the running SR_COUNTER, and whether a grant came back before dsr-TransMax. This is usually the first line you check for a "UE won't send uplink" ticket.

Representative UE MAC log (QXDM/QCAT-style) — illustrative, values vary by vendor/build:

LTE MAC SR: trigger=newData(noGrant) crnti=0x00AF sr_res_idx=3 sr_cfg_idx=20(period=20ms) LTE MAC SR: TX SR_COUNTER=1/dsr_transMax=8 prohibit=start(20ms) LTE MAC SR: TX SR_COUNTER=2/8 (no UL grant yet) LTE MAC UL GRANT rx: DCI0 crnti=0x00AF tbs=10B -> SR served, SR_COUNTER cleared LTE MAC SR: (alt) SR_COUNTER=8/8 reached -> release PUCCH/SRS, initiate RACH (RA-SR)
FieldMeaningExample (from log)Debugging check
triggerWhy the SR fired — new data with no grant, or a pending regular/periodic BSR with no UL-SCH resource.newData(noGrant)Confirms it is a genuine no-grant condition and not a stuck buffer.
sr_res_idxThe sr-PUCCH-ResourceIndex the bit was sent on.3Must match RRC config; a wrong resource means the eNB looks in the wrong place.
sr_cfg_idx / periodThe sr-ConfigIndex and the SR occasion period it decodes to.20 (20ms)A long period delays every request; check it against latency budget.
SR_COUNTERTransmissions so far vs dsr-TransMax.2/8Climbing toward the max with no grant = eNB not answering; RA-SR fallback is imminent.
prohibitsr-ProhibitTimer gating the next SR.20msIf set too long, SR retries are slow; too short risks flooding.

✅ Debugging steps — SR

  • Confirm the SR was actually triggered (new data arrived while the UE held no grant) and transmitted on the configured sr-PUCCH-ResourceIndex.
  • Check whether a small UL grant (DCI format 0 under C-RNTI) came back within a few SR periods; if not, the eNB is not seeing/answering the SR.
  • Track SR_COUNTER against dsr-TransMax — nearing the max means the UE is about to fall back to RACH.
  • Verify the SR occasion period from sr-ConfigIndex and the sr-ProhibitTimer are sane for the latency target.

⚠ Common causes of failure — SR

  • No D-SR PUCCH resource configured, so the UE cannot raise a one-bit ask and must use RACH from the start.
  • dsr-TransMax reached with no grant — eNB missed the SR (weak PUCCH, interference) or ignored it under load; UE releases PUCCH/SRS and initiates RACH.
  • sr-ProhibitTimer too long, throttling retries so the request is slow to be heard.
  • Poor uplink RF so the 1-bit SR is not detected at the eNB.

Buffer Status Report (BSR)

Once the UE has a grant, it tells the eNB how much data it has. The BSR is a MAC CE that reports the amount of buffered data, aggregated per Logical Channel Group (LCG). LTE defines exactly 4 LCGs (LCG ID 0–3), so the many logical channels a UE may run are bucketed into a handful of groups to keep the report compact. Each radio bearer is mapped to one LCG by RRC through the logicalChannelGroup field in its logical channel configuration, and grouping is usually by priority class โ€” for example signalling and voice in low-numbered, high-priority groups, best-effort data in another.

Short, Long and Truncated BSR

Because the report has to fit whatever grant is available, LTE defines three BSR formats. Each is a distinct MAC CE with its own LCID in the subheader, so the eNB knows from the header alone which format it is parsing.

FormatContentsSizeWhen used
Short BSROne 2-bit LCG ID + one 6-bit buffer-size index for that single group.1 byteWhen exactly one LCG has data to report.
Long BSRFour 6-bit buffer-size fields, one per LCG (no bitmap in LTE โ€” all four are always present, in order).3 bytesWhen more than one LCG has data to report.
Truncated BSRSame 1-byte layout as Short, but reports the single highest-priority LCG with data.1 byteWhen a regular/periodic BSR was triggered but the grant is too small to fit the full (Long) BSR.

The Short and Truncated formats look identical on the wire โ€” both are one LCG ID plus one buffer-size index โ€” but they mean different things and use different LCID values. A Short BSR says "only this one group has data"; a Truncated BSR says "several groups have data, but there was only room to tell you about the most urgent one." That distinction lets the eNB know more grants are probably coming.

The 6-bit buffer-size index

The buffer size is never sent as a raw byte count. Instead each LCG's buffered volume is quantised to a 6-bit index into a buffer-size table โ€” 64 levels (indices 0–63) spanning from 0 bytes up to tens of kilobytes on a roughly logarithmic scale. The eNB reads the index, looks up the byte range it represents, and sizes the next grant accordingly. Because the mapping is coarse and each index represents a range, the eNB tends to round up, which is why a couple of BSR rounds are sometimes needed to drain a large burst cleanly.

Index (concept)Represented buffer size (bytes)Note
00Nothing buffered for this LCG.
1≤ 10Finest step at the bottom โ€” small control messages resolve precisely.
… (low)tens of bytesNear-linear at first; each index a small jump.
… (mid)hundreds → low thousandsSteps grow geometrically as the index climbs.
62tens of KBCoarsest steps at the top โ€” large buffers resolve loosely.
63> the largest table value"At least this much" โ€” buffer exceeds the top level.

The exact byte boundaries live in the buffer-size tables of TS 36.321; the concept to carry away is the logarithmic quantisation: precise for tiny buffers, coarse for huge ones, always erring toward over-grant rather than starving the UE.

What triggers a BSR

TriggerCauseResulting format tendency
Regular BSRData arrives for a logical channel of higher priority than anything already buffered, or data arrives when all buffers were empty. Also re-triggered when retxBSR-Timer expires while data still remains buffered.Short or Long, depending on how many LCGs have data.
Periodic BSRperiodicBSR-Timer expires โ€” a routine refresh so the eNB's view of the buffer does not go stale.Short or Long.
Padding BSRAn UL grant has leftover space that would otherwise be padding โ€” the UE fills it with a BSR instead of wasting bits (free information for the scheduler).Truncated if space is tight, otherwise Short/Long.

A subtlety of the Regular trigger: it fires only when higher-priority data arrives or when the buffers were previously empty โ€” not for every byte that lands in an already-busy lower-priority queue. That keeps regular BSRs meaningful (a genuine change in the priority picture) rather than constant. The Regular and Periodic triggers are the ones that can, in turn, trigger an SR; a Padding BSR never does, because by definition it only exists when there is already a grant to ride on.

📘

Timers to know: periodicBSR-Timer drives periodic BSRs; retxBSR-Timer re-triggers a regular BSR if data is still buffered and no new grant arrived (a safety net against a lost BSR or ignored request). A Regular or Periodic BSR that has been triggered but cannot be sent this TTI (no UL-SCH resource) in turn triggers an SR โ€” closing the loop straight back to the request.

Reading the BSR step in the logs

The BSR trace shows the format, which LCGs reported, the 6-bit index per group, and the grant the eNB issued in response. Comparing the reported index against the next grant size is the fastest way to tell whether the eNB believed the buffer report.

Representative UE MAC log — illustrative, values vary by vendor/build:

LTE MAC BSR: trigger=regular(higherPrioData) format=LONG lcid=30(longBSR) LCG0 idx=6 (~ small) LCG1 idx=0 LCG2 idx=0 LCG3 idx=42 (~ tens of KB) LTE MAC BSR: multiplexed into PUSCH tbs=120B LTE MAC UL GRANT rx: DCI0 crnti=0x00AF tbs=1500B <- right-sized from LCG3 idx=42 LTE MAC BSR: (alt) trigger=periodic format=SHORT lcid=31 LCG3 idx=12
FieldMeaningExample (from log)Debugging check
triggerRegular / Periodic / Padding cause.regular(higherPrioData)A missing regular trigger on new high-priority data points to a MAC config/logic issue.
format / lcidShort / Long / Truncated and the matching LCID.LONG / 30Truncated where Long was expected means the grant was too small — more rounds coming.
LCGx idx6-bit buffer-size index per group.LCG3 idx=42Index → byte range should roughly match the next grant; a tiny grant after a big index = scheduler under-serving.
next grant tbsThe right-sized grant the eNB issued.1500BShould scale with the reported index; if not, buffer report was ignored or mis-parsed.

✅ Debugging steps — BSR

  • Confirm the correct trigger fired for the event (regular on higher-priority/empty-buffer data; periodic on periodicBSR-Timer; padding on spare grant).
  • Check the reported LCG indices map to plausible byte volumes and that the eNB's next grant scaled with them.
  • If a Truncated BSR appears, verify the grant was genuinely too small for a Long BSR — not a wrongly small initial grant.
  • Watch retxBSR-Timer: repeated re-triggers with no new grant mean the eNB is not acting on the report.

⚠ Common causes of failure — BSR

  • BSR not triggered because arriving data was not higher priority than what was already buffered (by design) — the buffer only drains on the next periodic/padding report.
  • Grant too small to carry a Long BSR, forcing a Truncated report that hides lower-priority groups from the scheduler.
  • Coarse 6-bit quantisation makes the eNB round the volume, so a large burst needs several BSR rounds to drain.
  • Lost BSR on a faded uplink; recovered only when retxBSR-Timer re-triggers it.

Power Headroom Report (PHR)

Knowing how much data to schedule is not enough โ€” the eNB also needs to know whether the UE can physically power the transmission. The PHR is a MAC CE reporting the difference between the UE's configured maximum transmit power and the power it would currently need for its PUSCH. It turns the UE's power budget, otherwise invisible to the network, into a number the scheduler can plan against.

PH = PCMAX,cestimated PUSCH transmit power

A positive headroom means the UE has room to spare and can be scheduled a wider or higher-MCS allocation. A negative value means the UE is already power-limited โ€” it wanted more power than PCMAX,c allows and is transmitting at its ceiling โ€” so the eNB should be conservative with the RB allocation. The value is quantised into a power-headroom range and reported against the reference PCMAX,c, and it is only ever sent when the UE actually has a PUSCH transmission to piggyback it on.

What

Type 1 PH reports headroom for the PUSCH. (Type 2, in earlier releases, also accounted for a simultaneous PUCCH.) The core report is a single MAC CE: one 6-bit PH value plus PCMAX,c reference bits.

Why

It lets the scheduler pick an MCS and allocation size the UE can actually transmit, and helps manage inter-cell interference by revealing which UEs sit near their power ceiling and should not be pushed harder.

How

Sent as a MAC CE on PUSCH, triggered by timers and by significant pathloss change. It is reported only when the UE has a PUSCH transmission and โ€” for pathloss triggers โ€” only after prohibitPHR-Timer has expired.

Extended and Dual-Connectivity PHR

The single-value PHR describes one carrier. LTE-Advanced added carrier aggregation, so a UE can transmit on several serving cells at once and the eNB needs a headroom figure for each. The Extended PHR MAC CE handles this: it carries a bitmap indicating which activated serving cells are being reported, followed by a Type 1 PH entry (and its PCMAX,c) for each cell flagged in the bitmap. That way one report covers the whole aggregated uplink.

Dual Connectivity (a UE connected to a Master eNB and a Secondary eNB simultaneously) pushed this further with the Dual-Connectivity PHR. Because the two cell groups โ€” the Master Cell Group (MCG) and Secondary Cell Group (SCG) โ€” schedule independently, the DC PHR reports headroom across the cells of both groups so each scheduler has a coherent view. It also reports both a real PH (for cells the UE is actually transmitting on) and a virtual PH (a reference-based estimate for cells it is not currently transmitting on), so the network can plan allocations on cells that are configured but idle.

What triggers a PHR

TriggerCauseGate
PeriodicperiodicPHR-Timer expires โ€” a routine refresh of the headroom estimate.None (timer-driven floor rate).
Pathloss changeEstimated downlink pathloss has changed by more than dl-PathlossChange (in dB) since the last report โ€” the UE moved or fading shifted.Only after prohibitPHR-Timer has expired.
ConfigurationPHR functionality is (re)configured or activated by RRC.None.
SCell activationAn SCell with an uplink is activated (Extended/CA PHR), adding a carrier that needs a headroom figure.None.
🎯

Prohibit vs periodic: periodicPHR-Timer forces a floor rate of reporting; prohibitPHR-Timer caps the ceiling so pathloss-driven reports cannot flood. The dl-PathlossChange threshold decides whether movement is worth a report, and the prohibit timer decides how soon one may follow the last. Together they bound how often headroom is signalled โ€” the same "periodic timer + prohibit timer" pattern that governs SR (sr-ProhibitTimer) and BSR.

Reading the PHR step in the logs

The PHR trace shows the trigger, the reported headroom value (or per-cell values for Extended/DC PHR), and the reference PCMAX,c. A persistently negative headroom is the tell-tale of a power-limited cell-edge UE that the scheduler should not push harder.

Representative UE MAC log — illustrative, values vary by vendor/build:

LTE MAC PHR: trigger=pathloss(dl_PathlossChange>dB3, prohibit_expired) type=type1 PH = +8 dB Pcmax_c = 23 dBm (headroom OK) LTE MAC PHR: multiplexed into PUSCH lcid=26(PHR) LTE MAC PHR: (alt) trigger=periodic PH = -2 dB Pcmax_c = 23 dBm (power-limited) LTE MAC ePHR: bitmap=SCell1 PCell PH=+6 SCell1 PH(virtual)=+11
FieldMeaningExample (from log)Debugging check
triggerPeriodic / pathloss / (re)config / SCell activation.pathlossFrequent pathloss triggers = mobility/fading; verify prohibitPHR-Timer is limiting the rate.
PHHeadroom = PCMAX,c − estimated PUSCH power.+8 dB / -2 dBNegative = power-limited; scheduler should reduce RBs / MCS, not increase.
Pcmax_cReference max UE Tx power for the cell.23 dBmSanity-check against UE power class and any configured back-off.
ePHR bitmapWhich activated serving cells the Extended PHR covers.SCell1A missing cell in the bitmap means no headroom figure for it — scheduler flies blind on that carrier.
real / virtual PHActually-transmitting cell vs reference estimate (DC/CA).virtual +11Virtual PH is an estimate only; treat cautiously when activating an idle cell.

✅ Debugging steps — PHR

  • Confirm a PHR is actually being sent (only rides on a PUSCH transmission) and check its trigger.
  • Read the sign of PH: a negative value means the UE is power-limited — correlate with cell-edge RSRP/pathloss and reduce the allocation.
  • For CA/DC, verify the Extended/DC PHR covers every activated UL cell (check the bitmap) and distinguish real from virtual PH.
  • Check periodicPHR-Timer, prohibitPHR-Timer and dl-PathlossChange are set so headroom refreshes often enough without flooding.

⚠ Common causes of failure — PHR

  • No PHR sent because the UE has no PUSCH to piggyback it on — the scheduler's power view goes stale.
  • Persistently negative headroom at cell edge, but the scheduler keeps granting wide/high-MCS allocations the UE cannot power — repeated CRC failures.
  • prohibitPHR-Timer too long, so fast fading is under-reported and the scheduler mis-estimates power.
  • Extended PHR bitmap omits an active SCell, leaving that carrier without a headroom figure.

Putting It Together โ€” SR → Grant → BSR → Right-Sized Grant

In a cold start โ€” data arrives while the UE holds no grant โ€” the three reports chain into the uplink scheduling loop. The SR buys a foothold, the BSR quantifies the need, and the PHR rides along on the data that follows.

UE eNB data arrives, no grant held → SR triggered SR (1 bit on PUCCH) D-SR resource, paced by sr-ProhibitTimer small UL grant (DCI format 0 on PDCCH) BSR MAC CE (buffer per LCG) 6-bit buffer-size index per LCG right-sized UL grant (DCI format 0) PUSCH: data + PHR (+ padding BSR) PHR MAC CE reports P_CMAX minus PUSCH power if no D-SR resource or dsr-TransMax reached → Random Access instead
Figure 1. SR wins a small grant, the BSR reports volume, the eNB issues a right-sized grant, and the data PUSCH carries a PHR (and a padding BSR if there is spare room). With no D-SR resource, the loop starts from Random Access.

If the UE already holds a grant when data arrives, it skips the SR entirely and sends the BSR straight away โ€” the request step only exists to break the deadlock of having data but no way to describe it. When a periodic timer fires, or a grant has spare padding, a BSR or PHR can hitch a ride with no explicit request at all. And when the D-SR path is missing or exhausted, the whole sequence simply begins one step earlier, at Random Access, with Msg3 carrying the first BSR.

The reason the loop needs two grants โ€” a small one then a right-sized one โ€” is that the eNB genuinely does not know the buffer volume until the BSR arrives. The first grant is a deliberately cheap probe just big enough to carry a BSR; only once the eNB reads the buffer-size indices can it allocate resource blocks proportional to the actual need, factoring in the PHR so it never grants more than the UE can power.

🔀

LTE ↔ NR: the trio survives into NR with the same roles but more flexibility. NR (TS 38.321) allows multiple SR configurations, each tied to specific logical channels via schedulingRequestID, so different traffic types raise different requests — and SR now rides PUCCH with several formats. NR expands buffer reporting to up to eight LCGs (versus LTE's four) and uses a bitmap-based Long BSR so only groups with data are listed, rather than always sending all four fields. PHR keeps the Type 1/Type 3 model with per-cell reporting for carrier aggregation. The RA-SR fallback (no SR resource, or SR exhausted → RACH) is unchanged in principle.

Summary and Quick Q&A

The trio divides one hard question โ€” "how should I schedule this UE's uplink?" โ€” into three answerable pieces. SR answers when with a single bit on PUCCH, bounded by sr-ProhibitTimer and dsr-TransMax with Random Access as the fallback. BSR answers how much with a per-LCG report in Short, Long or Truncated form, quantised through the 6-bit buffer-size index and triggered as Regular, Periodic or Padding. PHR answers can you power it with a Type 1 headroom value โ€” extended across carriers for CA and across cell groups for Dual Connectivity โ€” triggered by periodicPHR-Timer, by a dl-PathlossChange beyond threshold once prohibitPHR-Timer allows, or by (re)configuration.

To root-cause an uplink stall, walk the chain in order: did the SR get a grant? Did the BSR's reported index produce a right-sized grant? Did the PHR reveal the UE is power-limited? The first handoff that breaks tells you where — and usually why — the uplink stopped.

Q&A Quick Q&A

Q. What is the difference between an SR and a BSR?

A. An SR is a 1-bit request on PUCCH meaning "I need a grant" โ€” it carries no volume information. A BSR is a MAC CE, sent on PUSCH once you have a grant, reporting how much data is buffered per LCG. SR asks; BSR quantifies.

Q. What happens when the UE has data but no dedicated SR resource, or exhausts its SR attempts?

A. It falls back to Random Access (the RA-SR path). With no D-SR resource it cannot send a one-bit ask, and once SR_COUNTER reaches dsr-TransMax it abandons the D-SR path โ€” in both cases the RACH preamble becomes the scheduling request and Msg3 carries the first BSR.

Q. How many LCGs does LTE use, and name the three BSR formats and three triggers.

A. LTE uses 4 Logical Channel Groups (LCG ID 0–3). Formats: Short (one LCG), Long (all four LCGs), Truncated (highest-priority LCG only, when the grant is too small). Triggers: Regular (higher-priority data arrives, or data arrives to empty buffers, or retxBSR-Timer expiry), Periodic (periodicBSR-Timer expiry), and Padding (spare room in a grant).

Q. Why is the buffer size sent as a 6-bit index rather than a byte count?

A. To keep the report tiny. The 6 bits index a 64-level, roughly logarithmic buffer-size table โ€” precise for small buffers, coarse for large ones. The eNB looks up the byte range and rounds up, which is why draining a big burst can take a couple of BSR rounds.

Q. What does a PHR tell the eNB, and what triggers it?

A. It reports the UE's transmit-power margin (PCMAX,c minus estimated PUSCH power), so the scheduler picks an MCS and RB allocation the UE can actually power. Triggers: periodicPHR-Timer expiry; a pathloss change beyond dl-PathlossChange once prohibitPHR-Timer has expired; and (re)configuration or a new UL SCell for Extended PHR under carrier aggregation.

Q. What is the difference between Extended PHR and Dual-Connectivity PHR?

A. Extended PHR reports Type 1 headroom for multiple activated serving cells under carrier aggregation, using a bitmap to say which cells are included. Dual-Connectivity PHR extends that across both the MCG and SCG, and reports both real PH (cells actually transmitting) and virtual PH (reference-based estimates for cells that are not), so each independent scheduler has a full view.

Where these reports lead

SR, BSR and PHR are the inputs the eNB scheduler consumes and the MAC CEs the MAC PDU carries โ€” and PHR ties directly into how the UE sets its transmit power and how it shares a grant across bearers.

Uplink Scheduling & Grants โ€” how the grants these reports request are issuedLogical Channel Prioritization โ€” how a won grant is split across logical channelsRandom Access Procedure โ€” the fallback when SR has no resource or fails