标签:pow 相等 完成 命令 取消 net tar dia setting
一、总的数据结构
(图1)
二、Radio PHY layer(射频物理层)
1、Preamble、PHDR、PHDR_CRC、CRC都是硬件生成,无需软件参与,需要软件参与PHYPayload部分。
2、CRC校验只出现在上行链路消息中。其中PHDR、PHDR_CRC、CRC都是射频芯片用于校验数据的完整性和一致性用的,并非用户生成的数据。
三、MAC层数据
由图1可以看到,MAC层数据是作为PHYPayload存在的。MIC为4个字节的校验码
(一)MHDR
MHDR为1个字节(字节是二进制数据的单位,一个字节包含八位的二进制数),
MType表示消息类型,Major表示的是激活过程中使用的数据消息格式。
(二)MACPayload
1、FHDR
MAC负载头是由DevAddr(4个字节)、FCtrl(1个字节)、FCnt(2个字节)、FOpts(0~15个字节,大部分情况是0字节)组成的。
1.1 帧控制字节FCtrl
下行时:
上行时:
①ADR:自适应数据速率(Adaptive Data Rate)控制字段。ADR被置位,网络就会通过相应的MAC命令来控制终端设备的数据速率;ADR位可以根据需要通过终端及网络来设置或取消,能帮助终端延长电池寿命和扩大网络容量。
②ADRACKreq:ADR请求响应位。当终端开启ADR模式后,被网络优化过的数据速率高于自己默认的数据速率,终端需要定期检查网络仍能收到上行数据。当终端一直没收到下行回复时,就要置高ADRACKreq,让网关下发命令使终端切换到更低速率。
③ACK:消息确认位。当收到confirmed类型消息时,要进行应答。
④FPending:帧挂起位。只在下行交互中使用,表示网关还有数据挂起等待下发。此时要求终端尽快发送上行数据来打开接收窗口。
⑤FOptsLen表示整个帧可选项(FOpts)的字段长度。
1.2 帧计数器FCnt
每个终端有两个计算器跟踪数据帧的个数,一个是上行链路计数器(FCntUp),由终端产生并维护;另一个是下行链路计数器(FCntDown),由服务器产生并维护。
终端在相同应用和网络秘钥下,不能重复用相同的FCntUp数值,除非是重传。
1.3 MAC配置命令(帧可选项,FOpts)
①一帧数据中可以包含任何MAC命令,MAC命令既可以放在FOpts中,也可以放在FRMPayload中。但不能出现两个字段都携带MAC命令,如果出现了,设备会丢掉该组数据。
②如果FOptsLen=0时,FOpts字段不存在为空;
FOptsLen!=0,Fopts字段存在,Fopts过程不加密;如果存在FOpts字段,端口0不能使用(FPort必须是不存在或不等于0)。
1.4 端口字段FPort
帧负载字段(FRMPayload)不为空时,端口号也不能为空。此时若FPort=0,表示FRMPayload只包含了MAC命令。
1.5 帧负载FRMPayload
如果帧数据中包含payload,要先对FRMPayload进行加密,再计算消息的一致性校验码(MIC)
(三)MIC
MIC为消息校验码,要计算消息中所有字段
四、入网请求包数据
图1所示的是一帧完整的通讯数据,但我们使用单片机来接收时都被硬件处理了,实际得到的数据是PHYPayload这块儿。
从串口工具那边看到设备上电后发出的第一帧数据包,可以知道是为入网请求包:
根据LoRaWAN协议,Join Request的数据包格式为:
(图2)
对该串数据的各值进行解析(低位在前高位在后)
1、首先第一个字节是MHDR(0x00),二进制表示0000 0000,则MType=000,RFU=000,Major=00。(MType=000,表示数据包类型为Join request)
2、接下来的八个字节为AppEUI:01002a00c024e124。按照低位在前高位在后,可以解析出设备的AppEUI值为:24e124c0002a0001
3、下面的八个字节为DevEUI:742510931164e124,可以解析出设备的DevEUI值为:24e1641193102574
4、最后的两个字节9a47为DevNouce,这是一个随机数,作用是用来生成NwkSkey和AppSkey两个会话秘钥。
五、入网确认包数据
终端设备上电后向网关发送入网请求包之后,入网成功的话会受到NS下发的Join Accept包
对NS发出的该串数据进行解析(低位在前高位在后)
(图3)
1、MHDR为0x20,二进制表示为0010 0000,则MType=001,RFU=000,Major=00。(MType=001,表示数据包类型为Join Accept)
2、AppNonce也是一个随机数,用于终端得到两个会话密钥NwkSKey和AppSKey
3、NetID:030201,即网络标识符NetID为010203,产生AppSKey、NwkSKey 会用到
4、DevAddr:704a3306,即设备的DevAddr为06334a70。DevAddr是终端的短地址,在数据通讯时,使用的是终端短地址
5、DLSettings:00,00000000
①RX1DRoffset位域:用来设置上行数据速率和RX1下行数据速率的偏移量。默认情况下偏移量为0(意思就是上行数据速率与下行数据速率相等)
②RX2DataRate位域:设置的是终端第二个接收窗口(RX2)下行的数据速率,0代表DR1/125kHZ
6、RxDelay:从发送完成到打开RX1接收窗口的时间,01表示lora发送完数据,1s之后打开第一个接收窗口RX1
7、CFList:服务器将信道列表带给终端。一旦CFList出现,就会用它里面的信道替换节点上除了3个默认信道以外的信道,新的信道立刻可用并被终端用来通信
♦♦♦下行的join-accept消息数据在终端看到是有经过加密的(需要用存于终端与服务器两边的AppKey对其进行解密),所以从串口log打印只能看出这是一个入网确认包,以及MIC值是多少。
六、终端上报数据解析
从串口获取一串定期上报的数据来进行解析
(图4)
1、MHDR为0x40,二进制表示为0100 0000,则MType=010,RFU=000,Major=00。(MType=010,表示数据包类型为Unconfirmed Data Up,非确认上行包)
2、DevAddr:d4b3ed07,即设备的DevAddr为07edb3d4
3、FCtrl:80,二进制表示为1000 0000。可看出设备只开启了ADR模式,发送的数据为不确认包;FOptsLen =0,所以Fopts字段不存在
4、Fcnt:1000,即0x00,0x10,化成十进制为16,即Fcnt值为16,该数据包的上行帧计数为16
5、因为FOptslen=0,所以Fopts字段不存在,为空
6、FPort:55,化成十进制为85,即lora使用的端口是85
7、FRMPayload:帧负载值为fb9ca3127a7b
8、MIC校验值为762a800e
七、网关下发数据解析
(图5)
1、MHDR为0x60,二进制表示为0110 0000,则MType=011,RFU=000,Major=00。(MType=010,表示数据包类型为Unconfirmed Data Down,非确认下行包)
2、DevAddr:7b67ab07,即设备的DevAddr为07ad677b
3、FCtrl:a5,二进制表示为1010 1001。可看出设备开启了ADR和ACK;
FOptsLen =5,所以Fopts字段存在,且长度为5
3、FCnt:0300即0x00,0x03,化成十进制值也是3,即Fcnt值为3,该数据包的下行帧计数为3
4、FOpts:033800ff01。 因为FOptsLen =5,所以FOpts的字节长度为5,FOpts中存放的是MAC命令(PFort字段为空,且FRMPayload字段也为空)
①该条MAC命令的CID是3(0x03),所以网关发送的命令是LinkADRReq,用于调整可以调整终端的数据速率
②LinkADRReq的数据格式:
③DataRate_TXPower数据格式:
即DataRate=3,对应为SF7/125kHZ
TXPower=8,对应的最大发射功率为14dBm
④ChMask:00ff,即通道掩码是ff00
6、MIC:f3191031
标签:pow 相等 完成 命令 取消 net tar dia setting
原文地址:https://www.cnblogs.com/liann/p/13026975.html