1 Radio PHY layer
前导码 | 物理头 | 头校验 | 物理层负载 | CRC |
---|---|---|---|---|
Preamble | PHDR | PHDR_CRC | PHYPayload | CRC |
该层除了负载部分,其余均是硬件生成,注意的是最后的CRC只有在上行链路的时候才存在,下行是没有的
总的数据结构:

2 MAC层
2.1 帧格式
MAC层帧头 | MAC层负载 | 4字节校验 |
---|---|---|
MHDR | MACPayload | MIC |
2.2 MAC层帧头(MHDR)
MHDR只有一个字节大小
MHDR | MType | RFU | Major |
---|---|---|---|
Bit位 | 7~5 | 4~2 | 1~0 |
2.2.1 MType
表示消息类型,入网、入网应答、无需应答的数据上行、无需应答的数据下行、需要应答的数据上行、需要应答的数据下行
MType | 描述 |
---|---|
000 | join Request |
001 | join Accept |
010 | Unconfirmed Data Up |
011 | Unconfirmed Data Down |
100 | Confirmed Data Up |
101 | Confirmed Data Down |
110 | RFU(保留) |
111 | 私有 |
2.2.2 Major
数据消息的版本
Major | 描述 |
---|---|
00 | LoraWan R1 |
其他 | RFU |
2.3 MAC层负载
帧格式:
负载头 | 端口 | 帧负载 |
---|---|---|
FHDR | FPort | FRMPayload |
2.3.1 FHDR
MAC负载帧头组成由终端短地址(DevAddr)、帧控制字节FCtrl、帧计数器(FCnt)、MAC命令配置字段(FOpts),其中FOpts最多15个字节
FHDR: | DevAddr | FCtrl | FCnt | FOpts |
---|---|---|---|---|
byte字节 | 4 | 1 | 2 | 0~15 |
2.3.1.1 帧控制字节FCtrl
下行时:
FCtrl | ADR | RFU | ACK | FPending | FOptsLen |
---|---|---|---|---|---|
Bit位 | 7 | 6 | 5 | 4 | 3~0 |
上行时:
FCtrl | ADR | ADRACKReq | ACK | RFU | FOptsLen |
---|---|---|---|---|---|
Bit位 | 7 | 6 | 5 | 4 | 3~0 |
- 速率自适应控制(ADR, ADRACKReq)
具体单独开文说明 - 消息确认位(ACK)
当收到confirmed类型的消息时,进行应答 - 帧挂起位(FPending)
只在下行交互中使用,表示网关还有数据挂起等待下发。此时要求终端尽快发送上行消息来再打开接收窗口。 - 帧配置长度
帧配置长度(FOptsLen)字段位于帧的 FCtrl 部分,表示FOpts的实际长度
2.3.1.2 计数器 (FCnt)
上行链路计数器(FCntUp),由终端产生并维护,记录发往服务器的帧数量;下行链路计数器(FCntDown),由服务器产生并维护,记录服务器发往终端的帧数量。
2.3.1.3 MAC命令配置(FOpts)
一帧数据中可以包含任何MAC命令,MAC命令既可以放在FOpts中,也可以放在FRMPayload中,但不能同时在两个字段携带MAC命令。MAC命令放在FRMPayload时,FPort = 0。
放在FOpts的命令不加密(原因:加密Payload,对整个数据签名),也不能超过15个字节(2^4 - 1)。
放在FRMPayload的MAC命令长度不能超过FRMPayload的最大值。
不想被别人截获的命令要放到FRMPayload,并单独发送该数据帧
一条mac命令由一个命令ID(CID,一个字节),和特定的命令序列组成,命令序列可以是空。
命令ID | 命令 | 终端发送 | 网关发送 | 简介 |
---|---|---|---|---|
0x02 | LinkCheckReq | x | 用于终端验证网络连接 | |
0x02 | LinkCheckAns | x | 回应验证请求, 同时包含终端接收质量相关的估算的信号功率 | |
0x03 | LinkADRReq | x | 请求终端改变数据率、传输功率、接收率或者信道 | |
0x03 | LinkADRAns | x | LinkRateReq的应答 | |
0x04 | DutyCycleReq | x | 设置设备的最大总发射占空比 | |
0x04 | DutyCycleAns | x | DutyCycleReq的应答 | |
0x05 | RXParamSetupReq | x | 设置接收时隙相关参数 | |
0x05 | RXParamSetupAns | x | RXSetupReq的应答 | |
0x06 | DevStatusReq | x | 请求终端状态 | |
0x06 | DevStatusAns | x | 返回终端装填,即电量和解调情况 | |
0x07 | NewChannelReq | x | 创建或修改无线电信道 | |
0x07 | NewChannelAns | x | NewChannelReq的应答 | |
0x08 | RXTimingSetupReq | x | 设置接收时隙的时间 | |
0x08 | RXTimingSetupAns | x | RXTimingSetupReq的应答 | |
0x80~0xff | Proprietary | x | x | 保留命令 |
详细MAC命令单独开文说明。
2.3.2 端口FPort
帧负载数据(FRMPayload)不为空的时候端口号也不能是空。此时FPort=0表示FRMPayload中只有MAC命令
2.3.3 帧负载FRMPayload
如果帧数据中包含payload,要先对FRMPayload进行加密,再计算消息的一致性校验码(MIC)。
加密方案使用基于IEEE 802.15.4/2006 Annex B [IEEE802154] 的AES加密,秘钥长度128位。
使用哪种加密秘钥K取决于消息的FPort:
FPort | K | 备注 |
---|---|---|
0 | NwkSKey | 网络密匙 |
1~255 | AppSkey | 应用密匙 |
2.4 消息一致性脚环MIC
对整个消息的所有字段进行计算(AES签名算法CMAC)得到消息一致性校验码(MIC)。
网友评论