跳转至

Hardware MAC 实时路径

Hardware MAC 的价值不只是“收发 802.11 帧”,而是在严格时限内执行介质访问、响应、重试、加解密和统计。Host 可以决定策略,但无法参与每个 SIFS 级动作。

普通 EDCA TX

stateDiagram-v2
    [*] --> Queued
    Queued --> Defer: CCA busy or NAV busy
    Defer --> AIFS: medium idle
    AIFS --> Backoff
    Backoff --> Defer: medium becomes busy
    Backoff --> Transmit: counter reaches zero
    Transmit --> WaitAck
    WaitAck --> Complete: ACK/BA received
    WaitAck --> Retry: timeout or partial BA
    Retry --> Queued: retry budget remains
    Retry --> Failed: budget exhausted

实现评审不应只看状态名,还要核对:AIFS 与 backoff 在 medium busy 时如何冻结;四个 AC 是否发生 internal collision;TXOP 剩余时间是否允许下一个 PPDU;retry chain 如何关联原 MPDU;Channel Switch/DFS/PS 是否能原子地阻止新 TX。

SIFS 响应路径

RX PHY 在解出足够字段后,MAC 就要并行准备响应:地址匹配、FCS 状态、ACK policy、BA bitmap、NAV 和 TXVECTOR。数据上送 Firmware/Host、RX reorder 与协议栈处理不在这条关键时序上。

RX PPDU end
  ├─ fast path: parse → response decision → TXVECTOR → ACK/BA/CTS
  └─ slow path: descriptor → Firmware/Driver → reorder → network stack

因此调试“收到了包但没有回 BA”时,要观察 fast-path reason:FCS、RA/BSSID、BA context、response enable、SIFS deadline、PHY ready,而不是只查 Host RX 包数。

Context 查表

Hardware MAC 通常按 VIF/Peer/TID/Key 查表。表项更新必须具备生效点:

  • 新 Key 写完后何时允许 Protected TX;
  • DELBA 后旧 bitmap/reorder context 何时失效;
  • roam/reset 后旧 Peer ID 是否可能命中新会话;
  • PN/Sequence 由 Host、Firmware 或 MAC 哪一侧递增。

可靠实现会为上下文增加 generation,或在重建时先冻结队列、等待旧事务排空,再切换表项。

最小硬件 Trace

一次 TX 至少保留 packet/cookie、queue、peer/TID、CCA/NAV、backoff、TXVECTOR、retry、ACK/BA 与最终 reason;一次 RX 至少保留 RXVECTOR、FCS、filter、decrypt/replay、BA response 与上送 reason。只有计数而没有关联 ID,无法重建单包路径。

接收结束到 SIFS 响应:具体依赖

在一个普通 immediate ACK/BA 场景里,硬件流水线提前提取 RA/TA、类型、TID 和 ACK policy,查询 Peer/BA context,并随接收更新 FCS 与候选 bitmap。到接收尾部,结果决定是否提交响应;随后切换收发方向、准备 response TXVECTOR 并满足规定间隔。

Fast path 依赖有效 MAC 接收状态,但 ACK/BA 不是对解密、PN、应用交付的承诺。把 Host reorder 处理完成放入响应关键路径,会把总线和 OS 调度延迟引入微秒级时限。

以下是教学预算,非芯片实测、非标准参数:

接收尾部后的工作 假设耗时
判定和响应选择 2 μs
Context/response 准备 2 μs
RF turnaround 与 PHY 启动 8 μs
总消耗 12 μs

若该场景 SIFS 为 16 μs,则只剩 4 μs 裕量。应验证 PVT、跨时钟 FIFO、SRAM 仲裁和最坏中断拥塞;不能拿平均值判断硬实时是否满足。

Header 与 Context 的原子更新

Peer/Key/BA table 在发射期间仍可能被更新。硬件可以采用锁定快照、双 bank、版本化读等方式;要求一次 MPDU 使用自洽的 Context。

危险的交错是:先读旧 Key index,FW 删 Key 并复用 slot,再执行 crypto。防护需要停止新引用和等待 in-flight,而不是只给结构体加一个 valid bit。

硬件统计要保留 context_lookup_failstale_generationresponse_deadline_missphy_start_reject,这些分别是不同机制。

Beacon、TSF 与 TBTT

TSF 提供 BSS 时间基准,TBTT 是计划 Beacon 时间。实际 Beacon 仍可能因信道忙而延迟发射。Beacon template、TIM 和其他 IE 更新必须有提交边界,防止硬件读到半更新模板。

AP 侧测 planned TBTT→actual TX 的偏差;STA 侧测预唤醒→接收窗口→Beacon decode。把所有晚发都判成 Firmware 调度失败,会忽略正常介质竞争。

复习追问与答案

Host 不在 SIFS 路径里,那它负责什么? 预先配置响应规则、上下文与 Buffer,并消费结果、处理慢速策略和错误恢复。

如何区分没响应和响应没被收到? 对齐 hardware response-selected、PHY-start/end 与独立空口证据;只有最后一步失败不能归因于 parser。

为什么关闭日志可能改变故障? 日志写内存和抢占共享总线可能影响时限;应用有界 binary trace 测量最大延迟。

关联:ABIPHY Vector