IEEE 802.15.4 MAC 用户指南
Realtek 的 802.15.4 MAC/PHY 解决方案符合 IEEE 802.15.4-2015 标准,专为低数据速率应用设计,如家庭自动化、工业自动化和消费级电子产品。 集成了基带/MAC 和 2.4 GHz RF 收发器,并支持 BLE(蓝牙低能耗)功能,全部集成在单个系统级芯片(SoC)中。 基带/MAC 模块为 MAC 层和 PHY 层提供硬件架构,包含了多个组件,例如 TX/RX 控制模块、CSMA-CA 控制器、安全引擎和数字信号处理模块。
本文档将对这部分进行具体说明,以下是支持的具体功能特性。
功能支持
RF 模拟特性
MAC 特性
硬件架构
IEEE 802.15.4 收发器 总体结构图 如下,硬件架构由以下六个模块组成:

总体结构图
PHY 模块
PHY 模块符合 IEEE 802.15.4 2.4 GHz ISM 频段标准。 它实现了数据调制/解调、能量检测(ED Scan)、CSMA-CA 的信道空闲评估(CCA),以及用于信道选择和数据包发送/接收的射频控制。 该模块还提供接收信号强度指示(RSSI)和链路质量指示(LQI)功能。 接下来对 能量检测 、CCA 以及 RSSI 与 LQI 部分具体介绍。
能量检测
能量检测(ED Scan)测量信道上的峰值射频功率,从而帮助 PAN 协调器选择信道。 该过程包括多个轮次,每轮扫描8个符号并报告结果。 MAC会存储峰值,并在扫描完成后触发中断。
CCA
信道空闲评估(CCA)用于检测当前信道是否被占用,并在 CSMA-CA 算法中实现。
PHY 提供如下三种类型的 CCA 功能:
CS(载波侦听)模式:默认模式,用于检测当前信道是否有 IEEE 802.15.4 2.4 GHz O-QPSK 信号。
ED(能量检测)模式:用于检测带内信号,但会消耗更多功率,在发送数据包之前设置 CCA 为 ED 模式,发送后根据中断状态读取再恢复为 CS 模式。
组合模式:同时检查 CS 和 ED 的结果,只有在检测到 IEEE 802.15.4 信号且其能量超过 ED 阈值时,才会报告信道为繁忙状态。
RSSI 与 LQI
PHY 模块会为每个接收的数据包提供 RSSI 和 LQI 功能。
RSSI:用于报告接收数据包的信号强度。
LQI:用于报告链路质量。
每当成功接收到一个数据包时,MAC 硬件会自动将 LQI 和 RSSI 值附加到 RX buffer 中的接收数据包上。
备注
有关 RX Buffer 的更多信息,请参阅 RX Buffer。
MAC 模块
本节将简要介绍 IEEE 802.15.4 MAC 层。 主要包括 TXMAC 模块 、 RXMAC 模块 部分,此外还有 MAC 定时器 以及 BT 时钟定时器。
备注
建议查阅 IEEE 802.15.4-2011/2015 规范以获得更详细的说明。
TXMAC 模块
TXMAC 执行以下两个主要任务,这些任务符合 IEEE 802.15.4 标准。
自动 CSMA-CA 和时间对齐
TX buffer 传输控制
CSMA-CA
CSMA-CA 算法 中 CCA(空闲信道评估)与数据包传输之间的时序关系如下。

CSMA-CA 算法
备注
退避指数(BE)与设备在尝试评估信道之前应等待的退避周期数有关。
该 CSMA-CA 算法不用于传输 Imm-Ack 帧和 Enh-Ack 帧。CSMA-CA 机制仅适用于普通 buffer 和 Enh-Ack buffer 的传输。
有关 CSMA-CA 算法的详细描述,请参考 IEEE 802.15.4-2015 规范的第 6.2.5.1 节。
硬件自动重传
TXMAC 支持 “硬件自动重传”,说明如下:
当帧控制字段(FCF)中的 “确认请求” 位被设置时,接收方必须发送一个 ACK。
如果未收到 ACK,TXMAC 会继续重传数据包,直到达到最大重传次数(默认 3 次)。
对于帧版本为 0 或 1 的数据/命令帧,TXMAC 期望收到立即 Imm-Ack。
对于帧版本为 2 的帧,TXMAC 期望收到 Enhanced Acknowledgement(Enh-Ack)。
MAC 层固件将数据包写入 TX buffer,并确保 MAC 头部正确。
给定时间传输
TXMAC 的 “给定时间传输” 功能允许调度数据包的传输,这对于周期性休眠的终端设备的路由器发送数据包非常有用。 此功能确保数据包在设备唤醒时发送。
与正常的 CSMA-CA 传输相比,主要区别包括:
不使用 CSMA-CA 机制或回退延迟。
如果未收到 ACK,系统不会自动重传。
可选的清空信道评估(CCA)在传输前进行。
备注
该功能在 IEEE 802.15.4-2015 第 6.12.2 节中有所描述,仅适用于 TX 正常 buffer 传输。
Enh-Ack 传输
RXMAC 触发 TXMAC 发送 Imm-Ack帧,用于帧版本为 0 或 1 的数据包。 对于帧版本为 2 的帧,MAC 固件通过 Enh-Ack buffer 发送 Enh-Ack 帧,而不是 TX Normal buffer,以避免冲突。 在传输 Enh-Ack 帧时,应该禁用 Enh-Ack 帧的 CSMA-CA 机制。
当 RXMAC 开始接收数据包时,可以触发 RX Early 中断,这使得 MAC 固件能够准备 Enh-Ack 帧。 该帧在数据包完全接收并通过 FCS 检查后,根据 IEEE 802.15.4-2015 第 6.2.4 节的 IFS 时序规则进行传输。 TXMAC 机制确保 Enh-Ack 帧在适当的时间被传输。
RX 早期中断的 Enh-Ack 帧传输触发时序图 显示了 RX Early 中断、数据包接收中断和 Enh-Ack 传输的时序。MAC 固件在 Enh-Ack buffer 中准备 Enh-Ack 帧,并在 RX Early 中断处理程序中触发其传输。这个延迟包括 Enh-Ack 定时器和 RX 到 TX 的 Enh-Ack 延迟。

RX 早期中断的 Enh-Ack 帧传输触发时序图
TXMAC 中断
TXMAC 可以生成几种不同类型的中断,包括:
- TX 普通 buffer 传输中断(txnif)当 TX 普通 buffer 传输中的数据包被触发并完成传输时,无论传输是否成功,都会触发此中断。传输失败可能是由于 CSMA-CA 失败(通道繁忙)或达到重传尝试的最大次数引起的。当在给定时间触发并完成传输时,也会触发此中断。
- TX Enh-Ack buffer 传输中断(txg1if)当 Enh-Ack buffer 传输中的数据包完成时,无论传输是成功还是失败,都会发出此中断。可能由于 CSMA-CA 故障(信道繁忙)或达到重传次数上限等原因导致传输失败。
- TX 给定时间传输错误中断(txnterrif)如果启用了给定时间 TX 定时器(BT 时钟比较器),并且从当前 BT 时间(时钟)到计划的包传输时间的时间间隔太短,会无法完成包传输过程,或者如果到达触发给定时间传输的时间点,但由于 MAC 处于忙碌状态(例如,MAC 正在传输或接收数据包),或 PHY 在该时刻未被允许访问 MAC,导致包传输过程未能启动,均会触发此中断。
备注
这些中断可以被 MAC 固件用来执行各种任务,例如更新 MAC 的状态或为另一个数据包的传输做准备。
RXMAC 模块
RXMAC 包括以下模块和功能:
RXMAC 负责从 RX PHY 基带接收数据包,并执行 FCS 检查,并且解析接收的帧类型和地址识别。它将数据包存储在 144 字节的 buffer 缓存中,并根据 IEEE 802.15.4-2015 规则过滤数据包。如果检查通过,数据包将被存储在 RX buffer 中。
RX 过滤器
RXMAC 从 RX PHY 基带接收数据包并进行过滤。它检查前导码和定界符是否符合 IEEE 802.15.4 标准,然后执行地址识别,并根据 IEEE 802.15.4-2015 标准第 6.7.2 节过滤数据包。通过 FCS 检查的有效数据包将被存储在 RX buffer 中。
自动 Imm-Ack
RXMAC 默认会对有效的非广播帧自动回复一个 ACK 帧。如果帧类型指示为数据帧或 MAC 命令,且帧版本为 0 或 1,并且 “ACK请求” 设置为 1,RXMAC 会指示 TXMAC 发送一个 Imm-Ack 帧,且该帧的序列号与接收到的帧相同,同时保持 IEEE 802.15.4-2015 第 6.2.4 节中的 AIFS 时间要求。此自动确认功能默认启用。
对于帧版本为 0b10 的帧,RXMAC 不会自动发送 Imm-Ack 或 Enh-Ack 帧。相反,MAC 固件会在 Enh-Ack buffer 中生成 Enh-Ack 帧,并控制 TXMAC 进行传输,因为 Enh-Ack 帧可能包含 IE(信息元素)、帧负载,并且需要加密,这些都由 MAC 子层固件进行管理。
源地址匹配滤波器
源地址匹配滤波器为 TXMAC 提供 “帧待处理” 信息,用于生成 Imm-Ack 帧。它将接收到的 MAC 数据帧/命令帧的 “源 PAN ID” 和 “源地址” 与过滤器条目进行比较。TXMAC 根据此比较结果设置 “帧挂起” 位。 MAC固件管理地址条目,当某个设备有待发送的数据时启用该条目,当该设备没有待发送的数据时禁用该条目。
地址条目可以有以下两种格式:
短地址条目:16 位 PAN ID 和 16 位短地址。
扩展地址条目:64 位扩展地址。
备注
该滤波器最多支持 32 个短地址或 16 个扩展地址,它们共享相同的寄存器空间。扩展地址和短地址条目共享寄存器时,不应同时启用,由 MAC 固件管理以避免冲突。
RXMAC 中断
RXMAC 会产生以下中断:
- 数据包接收中断(rxif)当一个传入的数据包已经通过 RX 过滤器和 FCS 检查,并且可以在 RX buffer 中使用时,将触发此中断。
- RX早期中断(rxelyif)当接收到的帧的 MAC 头部(包括 “辅助安全头”)被处理时,会触发此中断。该中断发生在 “数据包接收” 中断之前,允许 MAC 固件准备响应,例如生成 Enh-Ack 帧或确定 Imm-Ack 的帧挂起位。这个 RX 早期中断为 MAC 固件提供了更多时间来准备 Enh-Ack 帧,特别是对于安全帧,以确保及时传输。它适用于除 ACK 帧外的其他帧,前提是帧版本为 2,或该帧是加密的。
- 安全中断(secif)当接收到加密帧的 “辅助安全头部” 时,RXMAC 并不会直接通知安全引擎。相反,它会触发一个安全中断给 CPU。MAC 固件可以选择是否使用安全引擎对传入的帧进行解密,或者选择忽略解密。随后,当帧接收完成并且通过 FCS 检查后,将触发一个包接收中断。在此时,MAC 固件可以从 RX buffer 中获取未解密的帧,并将其存储到内存中以便后续解密,或者直接将其发送到上层,由上层进行解密。接收安全帧的解密过程是可以禁用的。如果禁用了该数据包的解密过程,那么在接收到安全帧时将不会触发安全中断。
MAC 定时器
MAC 定时器有以下特性:
MAC 包含一个内部 16 位定时器,定时器以半符号时间(8 微秒)的周期倒计时。
MAC 定时器可以通过设置初始倒计时值来启动。定时器随后以 MAC 时间(半符号时间,即 8 微秒)为周期进行倒计时。当倒计时达到 0 时,会产生一个 MAC 定时器中断。
MAC 定时器还可以配置为自由运行模式。当 MAC 定时器处于自由运行模式时,每当倒计时值达到零时,都会产生一个 MAC 定时器中断,计数器值将重新加载为 0xFFFF。
BT 时钟定时器
BLE MAC 使用的 BT 时钟是一个自由运行的时钟,具有 1 微秒的滴答时间。 它由一个 28 位的上升计数器组成,单位为半个 BT 时隙时间(312.5 微秒)进行计时; 此外,还有一个 10 位的下降计数器,单位为 1 微秒,用于计数一个 BT 时隙时间(625 微秒)。
IEEE 802.15.4 MAC 共享该时钟用于物理层访问冲突解决。主要用途包括:
RX 时间戳:在接收到 MAC 头的第一个符号时,锁存 BT 时钟。
TX 时间戳:在传输 MAC 头的第一个符号时,锁存 BT 时钟。
给定时间传输:使用 BT 时钟比较器触发正常 buffer 传输。
PHY Arbitration 请求:使用 BT 时钟确定物理层可访问性的锚点。
BT 时钟比较器:四个比较器监视 BT 时钟,当匹配时发出中断。
BT 时钟值锁存功能帮助 MAC 固件获取当前的 BT 时钟值。
存储模块
存储模块是一个 SRAM 块,包括以下模块:
这些模块用于实现数据包的传输和接收,以及数据包的加密或解密。
TX Buffers
TXMAC 从两个不同的 TX buffer 中获取数据进行传输。
普通 buffer:传输数据帧和命令帧。
Enh-Ack buffer:传输 Enh-Ack 帧。
根据具体的传输条件,选择相应的 buffer。 所有的 TX buffer 长度都为 128 字节,这使得它们每次只能存储一个 IEEE 802.15.4 MAC 数据包。
RX Buffer
RX buffer 由一个 144 字节的 buffer 组成,用于存储接收到的数据包。
当 RXMAC 正在接收一个新的传入帧并将其存储到 RX buffer 时,会从物理层(PHY)头部提取 “帧长度” 字节,并将其粘贴到 MAC 帧的前面。这有助于 MAC 固件正确解码帧,并提供正确的帧长度信息。此外,接收到的帧数据尾部还会附加其他信息,如 LQI、RSSI 和 RX 时间戳等。
安全密钥 Buffer
安全密钥 buffer 用于存储每个 buffer 加密操作对应的密钥。
安全引擎模块
安全模块为 MAC 提供了安全引擎,兼容 IEEE 802.15.4-2006(及其以后的版本)。 IEEE 802.15.4 标准使用 AES-CCM* 算法来提供数据包认证和加密。 AES-CCM* 算法结合了 AES-CBC 和 AES-CTR 算法。
备注
有关此安全操作的详细信息,请参考 IEEE 802.15.4-2011 规范的第 7.3 节和附录 B。
除了 MAC 层的安全要求,安全引擎还提供了一种称为 “上层安全” 的方式,供网络层或应用层使用。 嵌入 MAC 层的 AES 引擎也可以作为独立的协处理器使用。
此安全引擎模块的功能如下:
传输加密和接收解密。
支持 IEEE 802.15.4-2006/2011 中定义的所有安全级别的加密模式。
安全等级 |
加密模式 |
数据加密 |
MIC 长度 |
---|---|---|---|
0 |
None |
No |
None |
1 |
AES-MIC-32 |
No |
32-bits |
2 |
AES-MIC-64 |
No |
64-bits |
3 |
AES-MIC-128 |
No |
128-bits |
4 |
AES-ENC |
Yes |
None |
5 |
AES-ENC-MIC32 |
Yes |
32-bits |
6 |
AES-ENC-MIC64 |
Yes |
64-bits |
7 |
AES-ENC-MI128 |
Yes |
128-bits |
64 字节的安全密钥 buffer 由四个 128 位的安全密钥组成。
RX buffer、普通 buffer 和 Enh-Ack buffer 各自拥有自己的密钥。
第四个密钥空间预留供未来使用。
可以使用此安全引擎实现应用层和网络层的安全性。
将从五个方面对安全引擎模块进行介绍:
TX 数据包加密
对于数据包加密,安全引擎从 TX buffer 中提取数据,解析头部长度和帧长度,然后执行加密。 加密后的数据和 MIC 会覆盖原始数据在 TX buffer 中的位置。 根据安全级别,可能会生成 MIC 并将其附加到数据包尾部,从而增加帧长度。 物理层头部的 7 位帧长度字段将数据包大小限制为 127 字节,包括 2 字节的 FCS。 因此,有效载荷加上 MIC 的总长度不得超过 125 字节。在加密之前,MAC 固件会检查数据包的长度。 以下是不同加密模式下可用的数据包长度列表。
加密模式 |
MIC 长度(字节) |
最大数据包长度(字节) |
---|---|---|
AES-ENC |
0 |
125 |
AES-MIC32 / AES-ENC-MIC32 |
4 |
121 |
AES-MIC64 / AES-ENC-MIC64 |
8 |
117 |
AES-MIC64 / AES-ENC-MIC64 |
16 |
109 |
RX 数据包密码解密
在接收的安全帧解密过程中,安全引擎会首先获取帧长度,并从 RX buffer 中提取数据包。 接着,从寄存器中读取头部长度信息以执行数据包的密码解密。 RXMAC 将解析接收到的数据包头部,并在寄存器中更新数据包的头部长度。 安全引擎将解密后的数据写回 RX buffer,覆盖原始的未解密数据。
上层密码加密和解密
上层(或应用层)也可以利用此安全引擎进行数据包的加密或解密。 需要加密或解密的数据包应放入 TX 普通 buffer 中,且 TX buffer 中的头部长度和帧长度应根据格式定义进行填写。 加密或解密后的数据将被写回 TX 普通 buffer,并覆盖原始数据。 上层数据包的加密过程与安全帧传输中的加密过程相同。
上层密码解密过程 如下,TX buffer 中的头部长度字段表示无需解密的部分数据长度,帧长度字段表示整个加密数据包的长度,包括 MIC。
帧长度的设置有两种情况:
如果 MIC 长度为 0(即不使用 MIC 的加密模式),则帧长度字段应设置为 “头部长度” 加上加密数据长度。
如果 MIC 长度不为 0(即使用 MIC 的加密模式),则帧长度字段应设置为 “头部长度” 加上加密数据长度再加 2。
解密后的数据包将写回 TX 普通 buffer,覆盖原始的加密数据。

上层密码解密过程
安全帧传输流程
在安全帧传输过程中,MAC 固件只需将未加密的数据包准备好放入 TX buffer,提供密钥至安全 buffer,并在寄存器中填充 nonce。 然后,TXMAC 会与安全引擎协作完成安全数据包的传输。
安全帧接收流程
当接收到一个安全帧时,MAC 固件可以决定是否直接使用安全引擎解密 RX buffer 中接收到的数据包。 接收安全帧的解密过程及 RXMAC、安全引擎与 MAC 固件之间的交互流程如下。

安全帧接收与解密流程
备注
一旦安全帧接收完成,RXMAC 会通知安全引擎。
此时,安全引擎可能会挂起并等待固件触发数据包解密,或者忽略数据包解密。
如果安全引擎完成了数据包解密,它会通知 RXMAC。
接着,RXMAC 会通过数据包接收中断来通知固件。
PHY Arbitration 模块
由于硬件成本和灵活性的考虑,IEEE 802.15.4 MAC 与 BLE 共享相同的 PHY,采用时分多址(TDMA)技术。
设备可能需要同时运行 BLE 和 IEEE 802.15.4 协议(例如 Zigbee),但 PHY 一次只能被一个协议使用。因此有一个专用硬件负责 PHY 的仲裁,切换 PHY 可访问权限。 BLE 事件(如广告、连接)按周期调度,PHY 仲裁硬件管理访问冲突。 该硬件还通过为 IEEE 802.15.4 MAC 添加 PHY 仲裁条目来协调 BLE 事件和 IEEE 802.15.4 MAC 之间的访问。 IEEE 802.15.4 MAC 只有在获得许可时才能访问 PHY,如果许可被撤销,MAC 会立即停止,并向 CPU 发出 PHY 许可中断。
Firmware 操作
基础操作
初始化操作
MAC 初始化基本流程 用于将 MAC 层进行初始化,为 PAN 的终端设备做准备。 设备处于非信标使能模式。RF 默认频道为 11(2405 MHz)。 支持 Zigbee 和 Thread v1.2 协议栈。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
用默认值初始化 mac_attribute_t 结构体 |
Call |
2 |
启用 MAC 时钟 |
Call |
3 |
使用属性初始化 MAC 层 |
|
4 |
注册 mac 回调函数 |
改变频道程序
在 2.4 GHz ISM 频段可以设置 RF 工作频道,该工作频率被划分为 16 个频道。 每个RF频率的频道如下。

2.4GHz ISM 频段的 IEEE 802.15.4 物理层通道
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
设置频道 |
Call |
获取当前 BT 时钟
在以下过程中,MAC 固件可能需要获取当前的 BT 时钟。
进行时间延迟或超时等待硬件操作完成。
确定 PHY arbitration 请求的基准点。
安排指定时间的数据包传输。
为了让 MAC 固件正确获取当前的 BT 时钟(避免瞬时值),MAC 硬件提供了 BT 时钟锁存功能,帮助固件读取当前的BT时钟。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
获取当前 BT Clock |
Call
|
设置 BT 时钟比较器中断
MAC 硬件中实现了共计 4 个 BT 时钟比较器(定时器),可用于在指定时间(BT 时钟)触发中断。 MAC 固件可以通过 BT 时钟比较器中断与 MAC 激活进行同步。 例如,若要调度 CSL 传输,MAC 固件可以安排一个 BT 时钟比较器中断,在预定时间触发传输的准备工作。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
BT 时钟比较器中断设置 |
Call
|
注册源地址匹配过滤表项
如果设备是一个 PAN 路由器。它的子设备可以通过向路由器发送数据请求命令帧来轮询挂起的帧。 如果该子设备有一个帧挂起,路由器应该在 Imm-Ack 中将 FCH 中的 FP 设置为1。 在这种情况下,让 TXMAC 可以在发送 Imm-Ack 帧时确定 FP 位值。 MAC 固件如果有一个帧等待的子设备,应该将该子设备的地址注册到源地址匹配过滤器。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
在源地址匹配过滤器中添加短地址和 PAN ID,或扩展地址匹配项 |
|
ED(能量检测)扫描
为了建立一个 PAN,PAN coordinator 通常会进行频道扫描以选择一个相对较空闲的频道来构建 PAN。 ED 扫描是执行频道扫描的一种方法。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
设置 RF channel |
设置将进行 ED 扫描的 RF 频道,设置 RF 频道的流程在 改变频道程序 中进行了描述 |
2 |
启动 ED 扫描程序 |
|
常见的 TX 操作
TX PHY 在传输过程中会自动生成前导码(preamble)和帧起始定界符(Start-of-Frame Delimiter,SFD)字段。 此外,TXMAC 可根据配置自动生成所需要的填充(padding)和循环冗余检验码(CRC)。 MAC 固件需要将其他所有帧字段写入 TX buffer 以完成传输操作。
普通 Buffer 的数据包传输
在普通 Buffer 中发送数据包的流程如下:
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
在 Normal buffer 中写入要发送的数据包 |
|
2 |
触发传输 |
Call
|
3 |
等待 TX 正常 buffer 中断并检查 TX 状态 |
Call |
使用安全加密发送数据包
要通过 TX buffer 发送带安全加密的数据包,需要按照以下几个步骤操作:
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
将要发送的数据包加载到 TX buffer 中 |
固件应将数据包填充到用户希望发送的两个 TX buffer 之一中
|
2 |
加载 nonce |
Call |
3 |
填充key memory |
Call |
4 |
配置加密模式 |
Call
|
5 |
触发加密和 TX |
Call
|
6 |
等待 TX Normal buffer 中断并检查 TX 状态 |
Call |
在带有 CCA/ED 模式的普通 Buffer 中发送数据包
在带有 CCA/ED 模式或 CS 和 ED 模式组合的正常 buffer 中发送数据包,流程基本与 普通 Buffer 的数据包传输 中描述的流程相同。唯一不同的是需要为数据包的传输配置 CCA 模式,用于 CSMA-CA 机制。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
将要发送的数据包加载到 Normal buffer 中 |
|
2 |
设置 CCA(空闲信道评估)模式 |
Call
|
3 |
等待 TX Normal buffer 中断并检查 TX 状态 |
Call |
CCA 模式 |
cca_mode filed 值 |
说明 |
---|---|---|
ED mode |
1 |
如果 ED 扫描结果超过设定的阈值,则 CCA 报告信道为忙碌 |
CS mode |
2 |
如果 CS 检测结果超过设定的阈值,则 CCA 报告信道为忙碌 |
ED or CS combination mode |
3 |
当 ED 扫描或 CS 检测结果报告信道忙碌(超过阈值)时,CCA 报告信道为忙碌 |
ED or CS combination mode |
4 |
当 ED 扫描和 CS 检测结果都报告信道忙碌时,CCA 报告信道为忙碌 |
在 Enh-Ack Buffer 传输 Enh-Ack 帧
当接收到一个数据帧或 MAC 命令帧且其帧版本为 2,并且需要确认时,应向发送方发送一个 Enh-Ack 帧作为确认。 MAC 固件负责生成 Enh-Ack 帧并通过 TX Enh-Ack buffer 发送。 在接收帧传输结束后,Enh-Ack 帧应在 AIFS(短间隔帧空闲期)期间发送。 因此,Enh-Ack 的传输过程通常在接收早期中断处理程序中启动。 这可以让 MAC 固件有更多时间准备 Enh-Ack 帧,并确保其及时传输。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
将要发送的数据包加载到 TX Enh-Ack buffer 中 |
Call
|
2 |
设置安全启动 |
|
3 |
触发传输 |
|
在给定时间传输普通 Buffer 中的数据包
在给定时间发送数据包的功能通常用于实现 IEEE 802.15.4-2015 规范中定义的 CSL 传输机制。 该 CSL 传输机制将根据接收到的数据包的 RX 时间戳以及来自关联子设备的 CSL 信息元素(CSL IE )来决定何时开始数据包传输。 请注意,这一在给定时间发送数据包的功能,仅适用于使用普通 buffer 传输。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
将要发送的数据包加载到 Normal buffer 中 |
|
2 |
执行上层加密 |
如果这是一个安全数据包传输,那么该数据包将在传输之前进行加密
|
3 |
触发传输 |
|
4 |
等待 TX Normal buffer 中断或在指定时间内的 TX 错误中断 |
|
常见的 RX 操作
RX 物理层(RX PHY)会对所有接收到的信号进行过滤并跟踪同步符号。 当检测到一个 IEEE 802.15.4 数据包的前导码时,该数据包将被解调并存储到 RX buffer 中。 与此同时,RXMAC 开始逐字节计算帧的 FCS(帧校验序列)并在接收到完整数据包后进行校验。 RXMAC 会过滤 MAC 头部,跳过那些未发送到自身地址的数据包。 如果接收到的数据包的帧版本为 0 或 1,并且被接受且需要确认,RXMAC 将通知 TXMAC 自动发送 Imm-ACK)。 如果接收到的数据包的帧版本为 2 且需要确认,则由 MAC 固件负责发送 Enh-Ack。
在 RX Buffer 中接收数据包
RX Buffer 格式 如下,其中:
“帧长度”(以字节为单位)字段表示数据包的长度,包括头部、有效载荷和 FCS(2 字节)的长度,但不包括 LQI(1 字节)、RSSI(2 字节)、RX 时间戳(2 或 4 字节)和超帧计数(3 字节)。
当数据包通过基带过滤(前导码和分隔符)后,它会进入 RXMAC。RXMAC 的接收过滤器会执行多级的数据包过滤。默认模式是地址识别模式,可以过滤掉那些未发送到本设备的数据包。
当接收到的数据包通过 RX 过滤器并且 FCS 正确时,接收中断将被触发。

RX Buffer 格式
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
读取 RX buffer |
Call |
2 |
发送 Enh-Ack 帧(仅针对帧版本为 2 的接收数据包) |
|
上层加密算法操作
安全引擎可以用于上层数据包的加密算法操作。 对于上层数据包的加密或解密,该数据包首先需要填充到 TX Normal buffer 中。 然后,设置加密模式、随机数(nonce)和密钥。接着,触发安全引擎进行加密或解密操作。 加密或解密后的数据将写回 TX Normal buffer。一旦数据包加密操作完成,TX Normal buffer 中断将被触发,并通知固件。 该上层加密流程类似于带有安全加密的传输数据包流程,只是加密后的数据包不会被传输到空中。
上层加密操作
以下是使用 TX Normal buffer 进行上层加密操作的步骤:
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
将待加密的数据包加载到 TX Normal buffer 中 |
数据包的格式应遵循 TX buffer 格式 定义,其中:
|
2 |
加载 nonce |
Call |
3 |
填充 key memory |
Call |
4 |
配置加密模式 |
Call |
5 |
触发上层加密 |
Call |
安全等级 |
加密模式 |
模式值 |
---|---|---|
1 |
AES-MIC-32 |
4 |
2 |
AES-MIC-64 |
3 |
3 |
AES-MIC-128 |
2 |
4 |
AES-ENC |
1 |
5 |
AES-ENC-MIC32 |
4 |
6 |
AES-ENC-MIC64 |
3 |
7 |
AES-ENC-MIC128 |
2 |
备注
在数据包加密处理后,消息完整性码(MIC,长度为4字节、8 字节或 16 字节)将被附加到数据包负载中,帧长度会自动更新。
所选加密模式下,加密前后 TX Buffer 的内容 如下。

加密前后 TX Buffer 的内容
上层解密操作
以下是使用 TX Normal buffer 执行上层加密算法的解密流程。
步骤 |
说明 |
FW 操作 |
---|---|---|
1 |
将待解密的数据包加载到 TX Normal buffer 中 |
数据包的格式应遵循 TX buffer 格式定义,参考 上层密码解密过程,其中:
|
2 |
加载 nonce |
Call |
3 |
填充 key memory |
Call |
4 |
配置加密模式 |
Call |
5 |
触发上层解密 |
Call |
6 |
读取解密后的数据包 |
一旦解密过程完成,解密后的数据包可以从 TX 正常 buffer 中读取
|
示例工程
该部分请参阅 IEEE 802.15.4 Simple TRX。
参考资料
IEEE 802.15.4-2006.
IEEE 802.15.4-2011.
IEEE 802.15.4-2015.