好的,我们接着之前下行调度的讨论,这次从你指定的**接收到UE上报的BSR MAC CE**开始,详细拆解5G上行调度的完整流程。
与下行由gNB主动发起不同,上行调度的起点通常在UE侧。当UE有上行数据要发送但无可用资源时,会先触发**调度请求(SR)** 或**缓存状态报告(BSR)** 过程。
📶 第一步:UE侧触发与资源请求
当UE的逻辑信道有数据到达,且没有可用的上行授权(UL Grant)时,会触发BSR。BSR的触发条件主要有:
* 有新数据到达且其优先级高于当前已有数据的逻辑信道。
* 服务小区变更。
* 重传BSR定时器(`retxBSR-Timer`)超时且有数据待发。
BSR的触发会进一步触发SR。SR通过**PUCCH(物理上行控制信道)** 发送,用于向gNB请求上行资源。如果UE没有配置SR资源,则会发起随机接入过程来获取上行授权。
📨 第二步:接收与解析BSR MAC CE
gNB在PUSCH上接收到UE发送的MAC PDU后,会检查其中的**MAC子头**。MAC子头中的**LCID(逻辑信道ID)** 字段指示了对应的MAC CE类型。当gNB解析到LCID对应BSR时,就获得了UE的上行数据缓存状态。
5G NR中BSR MAC CE主要有以下几种格式:
* **Short BSR**:报告**单个**逻辑信道组(LCG)的缓存大小。
* **Long BSR**:可同时报告**多个**LCG的缓存大小。
* **Truncated BSR**:当上行授权不足以发送完整BSR时使用的截断格式。
BSR MAC CE的核心内容是指示**逻辑信道组(LCG)** 及其对应的**缓存大小(Buffer Size)** 等级。
📋 第三步:调度器决策与资源分配
gNB的MAC层调度器在获取BSR后,结合以下信息进行综合决策:
| 输入信息 | 来源 | 用途 |
|---|---|---|
| **BSR** | UE上报 | 了解各LCG待发送数据量 |
| **SR** | UE上报 | 指示有数据待发,请求资源 |
| **PHR(功率余量报告)** | UE上报 | 评估UE可用的发射功率 |
| **CSI(信道状态信息)** | UE上报 | 辅助确定MCS和MIMO层数 |
| **QoS参数** | 承载配置 | 决定调度优先级和PBR |
调度器根据特定的调度算法(如比例公平、最大CQI等)为UE分配资源,确定:
* **频域资源**:分配的PRB数量。
* **时域资源**:PUSCH的起始符号和持续时间。
* **MCS(调制编码策略)** :根据信道质量选择。
* **发射功率控制(TPC)命令**:调整UE的发射功率。
🔗 第四步:逻辑信道优先级处理(LCP)
UE收到UL Grant后,需要决定如何将多个逻辑信道的数据复用到一个MAC PDU中。这个过程就是**逻辑信道优先级处理(LCP)** 。
LCP的核心规则如下:
-
**令牌桶(Token Bucket)机制**:每个逻辑信道有一个令牌桶,按**PBR(优先比特率)** 随时间填充令牌。
-
**按优先级分配**:将所有有数据的逻辑信道按优先级降序排列。
-
**满足PBR**:首先按优先级顺序,为每个逻辑信道分配资源,直到其PBR对应的令牌耗尽。
-
**分配剩余资源**:PBR满足后,剩余的UL Grant资源按优先级顺序继续分配,直到资源用完或所有数据发送完毕。
最终,UE根据LCP结果生成MAC PDU,其中包含多个逻辑信道的MAC SDU及其对应的MAC子头。
📡 第五步:DCI生成与PDCCH发送
gNB的调度决策被封装成**DCI(下行控制信息)**,通过**PDCCH**发送给UE。用于上行调度的DCI格式主要有两种:
* **DCI Format 0_0**:回退格式,用于调度基于TB的PUSCH。
* **DCI Format 0_1**:非回退格式,可调度基于TB或CBG的PUSCH,支持更灵活的配置。
DCI中包含了UE发送PUSCH所需的所有关键信息:频域资源分配、时域资源分配、MCS、TPC命令、HARQ相关信息等。
🚀 第六步:PUSCH传输
UE在PDCCH上检测到属于自己的DCI(UL Grant)后,根据DCI指示的参数,在指定的时频资源上通过**PUSCH(物理上行共享信道)** 发送MAC PDU。
PUSCH的物理层处理流程包括:CRC添加、LDPC编码、速率匹配、加扰、调制(QPSK/16QAM/64QAM/256QAM),最后映射到分配的时频资源上发送。
🔁 第七步:HARQ反馈与重传
5G NR上行采用**异步HARQ**机制。gNB接收PUSCH后尝试解码:
* **解码成功**:gNB在PHICH或PDCCH上反馈ACK,UE释放HARQ进程。
* **解码失败**:gNB反馈NACK,UE在后续的UL Grant中安排重传。重传使用相同的HARQ进程号,但可改变RV(冗余版本),UE将重传数据与之前缓存的软信息进行**软合并**以提高解码成功率。
🔄 完整流程时序图
```mermaid
sequenceDiagram
participant UE
participant gNB
Note over UE: 上行数据到达
UE->>UE: 触发BSR
UE->>gNB: SR (PUCCH)
gNB->>UE: UL Grant (PDCCH)
UE->>gNB: BSR MAC CE (PUSCH)
gNB->>gNB: 调度器决策
Note over gNB: 分配资源、确定MCS
gNB->>UE: UL Grant (DCI 0_0/0_1)
UE->>UE: LCP处理
UE->>gNB: 上行数据 (PUSCH)
alt 解码成功
gNB->>UE: ACK
Note over UE: 释放HARQ进程
else 解码失败
gNB->>UE: NACK
gNB->>UE: 新的UL Grant (重传)
UE->>gNB: 重传数据 (PUSCH)
end
```
💎 总结
上行调度的本质是一个由UE的缓存状态驱动、gNB集中控制的闭环过程:
-
**UE触发**:BSR/SR告知gNB有数据待发。
-
**gNB调度**:调度器根据BSR、QoS、信道质量等信息分配资源,通过DCI(UL Grant)下达调度指令。
-
**UE复用**:UE根据LCP规则将多个逻辑信道的数据复用到MAC PDU中。
-
**数据传输**:UE在PUSCH上发送数据。
-
**HARQ闭环**:gNB反馈ACK/NACK,决定新传或重传。
整个过程以时隙(Slot)为单位循环进行,gNB通过动态调度在吞吐量、公平性和QoS之间取得平衡。