# 第14章 Class B Mac命令
所有在 Class A 协议中描述的指令都应该在 Class B 中实现。Class B 协议额外增加了如下的 MAC 指令。
CID | Command | 由谁传输 | 描述 | |
终端 | 网关 | |||
0x10 | PingSlotInfoReq | x | 终端设备用于将 ping 单播时隙数据速率和周期性传送给网络服务器 | |
0x10 | PingSlotInfoAns | x | 用于网络应答PingInfoSlotReq命令 | |
0x11 | PingSlotChannelReq | x | 用于网络服务器设置一个终端的单播 ping 通道 | |
0x11 | PingSlotFreqAns | x | 终端用于应答PingSlotChannelReq命令 | |
0x12 | BeaconTimingReq | x | 用于终端向网络请求下一个信标时间和信道 | |
0x12 | BeaconTimingAns | x | 用于网络应答BeaconTimingReq命令 | |
0x13 | BeaconFreqReq | x | 用于网络服务器修改终端希望接收信标广播的频率 | |
0x13 | BeaconFreqAns | x | 用于终端应答BeaconFreqReq命令 |
# 14.1 PingSlotInfoReq
使用 PingSlotInfoReq 命令,终端设备通知服务器它的单播 ping slot 周期。此命令只能用于通知服务器单播 ping slot 的周期性。多播插槽完全由应用程序定义,不应该使用此命令。
Size(bytes) | 1 |
PingSlotInfoReq Payload | PingSlotParam |
Bit# | 7:3 | [2:0] |
PingSlotParam | RFU | Periodicity |
Periodicity 子字段是一个无符号3位整数,用于编码终端当前使用的 ping 时隙周期,使用如下等式:
实际的 ping 时隙周期就等于
- Periodicity = 0 表示终端在 beacon_window 间隔期间大约每秒打开一个 ping 时隙。
- Periodicity = 7 表示终端每 128 秒打开一个 ping 时隙,这是 LoRaWAN Class B 所支持的最大 ping 时隙周期。
当终端需要改变 ping 时隙周期以及数据率时,需要先恢复到 Class A 模式,在发送 PingSlotInfoReq 指令并且收到服务器端的 PinSlotInfoAns 指令回复之后,就可以(MAY)使用新的参数切换回 Class B 模式。
该命令可以(MAY)和 FHDRFOpt 字段里的任何 MAC 命令进行连接,如 Class A 协议中的帧格式所述。
# 14.2 BeaconFreqReq
该命令由服务器发往终端,用于修改终端期望信标的频率。
Octets | 3 |
PingSlotChannelReq Payload | Frequency |
Frequency 字段的编码方式和 Class A 中定义的 NewChannelReq 指令相同。
Frequency 是一个 24 位无符号整数。实际的信标信道频率是100 x Frequency,单位Hz。信标的信道以 100Hz 为基本单位,变化范围在 100MHz 到 1.67GHz 之间。终端必须检查该频率是不是射频硬件所允许的范围,不是则需要返回错误。
一个有效的非零频率将会强制终端以一个固定的频率信道去监听信标,即使默认是指定跳频信标(即美国ISM频段)。
若频率为0则表示终端使用“信标物理层”部分所定义的默认信标频率计划,在适用的情况之下恢复成跳频信标搜索。
接收到此指令后,终端设备将使用 BeaconFreqAns 消息进行应答。
此消息的 MAC 载荷包含以下信息:
Size (bytes) | 1 |
BeaconFreqAns payload | Status |
Status 各位含义如下:
Bits | 7:1 | 0 |
Status | RFU | Beacon frequency ok |
Bit = 0 | Bit = 1 | |
Beacon frequency ok | 设备无法使用该频率,之前的信标频率保持不变 | 信标频率改变 |
# 14.3 PingSlotChannnelReq
此指令由服务器发送到终端设备,以修改终端设备期望下行 ping 信号的频率和/或数据速率。
此指令只能在 Class A 接收窗口中发送(在上行链路之后)。该指令不能(SHALL NOT)在 Class B ping-slot 中发送。如果设备在 Class B ping-slot 接收到此 MAC 指令,则不应(SHALL NOT)处理该 MAC 指令。
Octets | 3 | 1 |
PingSlotChannelReq Payload | Frequency | DR |
Frequency 字段编码方式和 Class A 中定义的 NewChannelReq MAC 指令相同。
Frequency 是一个 24 位的无符号整数。实际的信标信道频率是 100 x Frequency,单位Hz。信标的信道以 100Hz 为基本单位,变化范围在 100MHz 到 1.67GHz 之间。终端必须检查该频率是不是射频硬件所允许的范围,不是则需要返回错误。
若频率为 0 则表示终端使用默认信标频率计划。
DR 字节包含如下字段:
Bits | [7:4] | [3:0] |
DR | RFU | data rate |
“数据速率” 子字段是用于ping-slot 下行链路的数据速率的索引。索引和物理数据速率之间的关系在 [PHY-DOC] 中为每个区域定义。
接收到此命令后,终端设备以 PingSlotFreqAns 消息回应。此消息的 MAC 载荷包含以下信息:
Size(bytes) | 1 |
pingSlotFreqAns Payload | Status |
Status各位有以下含义:
Bits | [7:2] | 1 | 0 |
Status | RFU | Data rate ok | Channel frequency ok |
Bit = 0 | Bit = 1 | |
Data rate ok | 未为该终端设备定义指定的数据速率,保留先前的数据速率 | 数据速率与终端设备的可能性兼容 |
Channel frequency ok | 该设备不能以这个频率接收信号 | 终端可以使用这个频率 |
如果这两个位中有一个等于0,则命令没有成功,ping-slot参数也没有修改。
# 14.4 BeaconTimingReq & BeaconTimingAns
这组 MAC 指令在 LoRaWAN1.1 版本中弃用。设备可以使用 DeviceTimeReq & Ans 命令作为替代。