1 ChirpLAN 协议介绍¶
当前版本 |
V0.2 |
---|---|
更新日期 |
2023年9月16日 |
2 ChirpLAN 是什么¶
ChirpLAN目前是一种基于ChirpIoT™通讯技术,采用按需可靠的数据收发机制,适用于远距离低功耗的小型局域网(LAN)的网络通信协议。 ChirpLAN即ChirpIoT和LAN的缩写,也代表了它的特性。
主要特点:
开源:协议遵循Apache 2.0协议,协议代码和规范都完全公开,可以商用
轻量级:code<15KB,SRAM<4KB
组网灵活:支持组网,也支持点对点
多种功耗配置:对于功耗和实时性要求不同的场景都有支持
可靠性强:协议简单,可靠,扩展性强
完全自主开发:有独立的知识产权
安全:协议支持加解密功能
易部署:可以灵活的移植适配到不用的平台,MCU,以及和云服务端对接
3 ChirpLAN网络拓扑结构¶
目前ChirpLAN主要支持两种类型的组网,一种是网络模式,另一种是直连模式,网络模式本版本主要支持星形网络,网络拓扑图见下图,ChirpLAN网络中有2中角色:终端和网关,和云端服务器通信部分由具体的应用业务实现,不属于本协议部分的涵盖范围。
直连模式,此模式又分为两种情况,一种是一对一模式通信,另一种是一对多通信的模式,两种模式拓扑图见下图:
4 ChirpLAN 协议架构¶
ChirpLAN协议应用的网络架构见下图,从底层到上层分别是物理层,链路层,网络层和应用层。其中本协议只对链路层和网络层做了规范。说明如下:
物理层:是基于磐启微的ChirpIoT通信技术的射频芯片。
链路层:负责实现收发逻辑,提供重传、碰撞检测,入网等功能。链路层为上层网络层提供接口,使用这些接口,网络层可以完成对射频的相关操作,而不用关注这些操作是如何实现的。
网络层:负责网络协议的控制,数据封包和解包,网络地址解析,各种模式管理等工作。
应用层:主要是一些具体的业务逻辑,如MCU外设,AT指令控制等。
4.1 链路层介绍¶
链路层负责实现收发逻辑,提供重传、碰撞检测,入网等功能。链路层为上层网络层提供接口,使用这些接口,网络层可以完成对射频的相关操作,而不用关注这些操作是如何实现的。
收发逻辑:射频的相关参数配置,收发数据的控制
重传控制:根据配置参数,来控制射频发射的重传控制
碰撞检测:多个节点同时发送会有冲突,需要做冲突检测和退避处理
入网功能:加入网络的机制,可以从网关端获取分配的信道和相关模式以及参数等信息
安全机制:支持数据的加解密AES128,key:128 bit
4.1.1 碰撞检测¶
参考上图,下面说明碰撞检测机制:
EP每次TX完会设定一个冲突窗口,这个窗内当前EP不允许发送数据
EP每次发数据前都会检测当前信道是否有数据,如果有数据,会推迟到冲突窗口内的一个时间(要保证在冲突窗口内的一个随机值),只有在空闲模式才可以发送数据
在冲突窗口内, EP-B首先检测到信道空闲,获得了数据包的发送机会,EP-A和EP-C继续退避
EP-C在第一次退避后,在第二个冲突窗口内,首先检测到信道空闲,发送当前的数据,EP-A继续退避
EP-A检测到信道空闲,发送当前数据包
退避失败的次数越多,后续会在冲突窗口获得更靠前的权重
4.1.2 入网功能¶
入网是节点加入网络的第一个步骤,在网络模式中,只有终端节点通过网关的网络授权后,加入到网关对应的网络,才能进一步进行数据的交互。具体的通信的流程如下:
正常入网说明:
首先终端在入网信道,向网关发一个入网请求包(包括自己的一些必要信息,参考后面的入网请求帧)
网关收到入网包,如果校验通过,会发送入网确认包,同时会给终端分配相关的RF参数,包括通信信道
终端在数据信道发送数据给网关
如果需要回复确认包,网关收到数据包后,回复相应的确认包
说明,目前入网中采用的是AES128加密机制,128 bit密钥
异常入网流程说明:
终端发送的入网包,网关没有收到
终端继续发送一个入网包,但是入网包是一个非法的,此时网关可以收到,但不回复确认包
终端发送一个合封的入网包,网关也收到了此入网包
网关回复的确认包,终端没有收到
终端会继续重新发送入网包,直到收到网关的数据确认包为止
4.2 网络层介绍¶
负责网络协议的控制,数据封包和解包,网络地址解析,各种模式管理等工作。下面先介绍下网络层支持的几种模式。
ChirpLAN主要分为2个大的模式,网络模式(network mode)和直连模式(direct mode),Network Mode包括如下几种子模式:
Mode A:主动上报模式
特点:
用户按需来发送数据,比如AT指令或者定时发送数据,不发送数据时RF处于休眠状态
Mode B:周期同步模式
特点:
支持网关与终端时间同步
下行:支持MAPM功能,在下行时隙终端周期打开RX,网关可以通过长前导码唤醒终端
上行:终端在上行时隙按网关分配的时隙有序上行数据
Mode C:全速运行模式
特点:
支持主动上报的功能
半双工模式,终端在非TX的模式时,RF处于RX的模式,用来快速响应网关的数据
直连模式(Direct Mode),主要分为点对点直连模式和一对多通信模式,特点如下:
支持终端之间的点对点通讯
支持一对一和一对多
地址参数可以配置
4.2.1 网络模式–Mode A¶
Mode A:主动上报模式,支持双向通信,终端具有极低的功耗,但是双向通信必须由终端发起,终端发送消息后,会打开一个短暂的接收窗口,网关需要在这个接收窗口内回复消息或者下发指令,通信时序见下图:
Mode A模式单节点通信流程见下图:
通信流程说明如下:
终端发送数据包D1给网关(需要回复)
网关回复确认包给终端
终端发送数据包D2给网关(需要回复)
网关回复确认包,但终端没有收到
终端会重传数据包D2给到网关(此时网关不需要将该数据包上报给应用层)
网关收到后会继续回复确认包
Mode A模式多节点通信流程见下图:
通信流程说明如下:
两个终端节点EP1和EP2在不同的上行信道,网关支持多个上行信道接收,绿色柱代表终端RX打开的状态
EP1和EP2分别同时发送数据包D1和P1给网关
网关下行只有一个信道,所以需要串行回复确认包,此时两个终端的RX开窗时间都满足,所以ack都可以正常接收到
EP1和EP2分别同时发送数据包D2和P2给网关
网关先回复ACK给EP1,EP1正常收到,然后回复EP2时,由于EP2的RX的窗口提前关闭,导致ACK丢失,触发EP2的重发机制
说明:为了降低上述5中的情况,最终协议实现时可以考虑在RX开窗的基本时间上,加一个随机的扩窗时间(跟进应用场景自行配置),会提高并发通信收ack的概率
4.2.2 网络模式–Mode B¶
Mode B:周期同步模式,支持的功能说明如下:
1、Mode B系统执行周期分为下行时隙和上行时隙。下行时隙用于网关下发Beacon,下发数据给终端,通过MAPM功能可以唤醒终端(下行时隙,终端开启周期性CAD唤醒监听功能)。上行时隙是终端根据入网分配的上行时隙,到各自的上行时隙发送数据,是否需要上行数据是由网关BC广播中上行标志决定。
2、终端具有较低的功耗,实现了数据按需有序上行,又可以在下行时隙实时被唤醒,在低功耗和实时性方面完美结合。
3、终端入网后会自动与网关实现时钟同步,并周期接收Beacon,实现终端与网关保持时间同步。
备注:Mode B协议已开源,请至https://gitee.com/chirplan/chirplan-mode-b获取。
下图为Mode B的执行周期
上行时隙流程说明:
为了避免终端同时上行,导致终端相互干扰、信道拥挤、收包率降低,终端入网时,网关会根据各终端的ID分配对应的上行时隙号,终端只有在自己规定的时隙号到达时才能发送数据。
上行时隙的时隙长度根据终端使用的RF参数和发包长度决定,推荐值最小应大于等于终端的发包时间。
可以根据实际应用中终端数量及上报周期需求调整上行时间长度。
下行时隙空中唤醒功能示意图如下:
Mode B模式的通信流程见下图:
Mode B模式通信流程说明如下:
T1:EP1被唤醒,但ID不匹配,后继续休眠
T3:同周期内EP2也被唤醒,EP2的ID匹配ok,继续接收数据
T2:EP1被唤醒,同时ID匹配正确,通过MAPM中的计数器,可休眠至同步字前继续唤醒接收数据
T4:EP2在较晚的时刻被唤醒,ID未被正确匹配到,继续休眠
特性说明:
同样是唤醒ID不匹配,由于唤醒的时刻不一样,会导致RX开的窗口大小不一样,对比T1和T4:T1>T4,所以功耗消耗也不一样
同样是ID匹配正确,也会有T2和T3有差异的情况
4.2.3 网络模式–Mode C¶
Mode C:全速运行模式,支持双向通信,且终端和网关可以随时互相通信,该模式的数据实时性好,但是终端需要消耗更多的电量。通信时序见下图:
Mode C模式通信流程见下图:
Mode C模式通信流程说明如下:
EP1和EP2工作在相同的信道
EP1发送数据D1给网关,该数据包需要回复
网关由于应用层先前触发发送一个数据G1的需求,所以优先发送G1给EP2
网关发送ack给EP1
网关需要同时给两个终端EP1和EP2发送一个不需要回复的数据包G2
终端发送一个需要回复的数据包给P1
网关收到P1后回复确认包给EP2
上述流程都可以实时的相应各种通信。
4.2.4 直连模式(透明传输和定点传输)¶
Direct Mode:点对点直连模式,该模式支持定点模式通信(2个终端节点互相通信),也支持广播通信(一对多的通信)。该功能分为透明和定点传输模式:
透明传输模式:该模式支持2种子模式
Normal Mode :支持全速运行模式,模块处于active状态,此状态下,将应用层的数据直接通过RF发送出去,接收到数据也完全返回给应用层,RF处于非TX模式即为RX模式
LP Mode:支持空中唤醒,定期唤醒检测空中RF唤醒前导码,然后会和发射端做数据同步,此模式接收端功耗会比较低,发射端也不需要特别长的前导码
定点传输模式:与点对点子模式类似,也分Normal mode和LP Mode,区别是网络层要做地址解析处理。网络地址支持两种:单播地址和组播地址。
Normal Mode :支持全速运行模式,模块处于active状态,此状态下,将应用层的数据直接通过RF发送出去,接收到数据也完全返回给应用层,RF处于非TX模式即为RX模式
LP Mode:支持空中唤醒,定期唤醒检测空中RF唤醒前导码,然后会和发射端做数据同步,此模式接收端功耗会比较低,发射端也不需要特别长的前导码
通信流程见下图:
直连是通信流程说明如下(包含两种模式的通信流程):
EP1,EP2,和EP3处于同一个信道
EP1发一个透明传输的包到EP2,EP2收到后回复一个ack
EP2发送一个P1的包(不需要ack),EP1和EP3都可以收到
EP2发送一个P2的定点的数据包(给EP1),EP1收到包后回复一个ack,EP3收到后,发现地址不一致,则不回复ack
5 空中包结构¶
所有的帧结构遵循:字节序:MSB,比特序:MSB
5.1 入网请求帧¶
帧格式说明如下:
帧类型(其它帧格式定义都相同,不在赘述):
Bit7:加密标识,1为加密,0为不加密
Bit6-Bit0:
入网请求:0x01
入网回复:0x02
不需要确认上行数据包Unconfirmed Uplink Data:0x03
需要确认上行数据包Confirmed Uplink Data:0x04
不需要确认下行数据包Unconfirmed Downlink Data:0x05
需要确认下行数据包Confirmed Downlink Data:0x06
需要确认下行配置Confirmed Downlink Config:0x07
同步请求数据包:0x08
同步数据包:0x09
广播信标帧BEACON:0x10
点对点定点模式数据包:0x11
点对点透传模式数据包:0x12
帧序号:帧的编号,每一帧都单独递增,重复包ID相同,Ack 包的序号和请求包对应
节点ID:节点的编号,由应用来分配,一个网络里应该唯一
应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求
通信模式:取值范围:1~3
1:主动上报模式,
2:周期同步模式,
3:全速运行模式,
校验:数据校验和
5.2 入网回复帧(Mode A/C)¶
帧格式说明:
帧类型:参见入网包帧类型定义
帧序号:帧的编号
应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求
目标节点ID:目标节点的编号ID
网络ID:节点入网后,由网关或服务器分配的网络地址ID,组网后的通信地址均使用网络ID
上行参数:9字节(依次为3个上行信道,3个下行信道,BW,SF,CR,LDR),缺省值用0代替,0表示不使用此信道或不修改此参数。BW取值6-9,SF取值7-12,CR取值1-4,LDR取值0-1
唤醒间隔:空中唤醒模式下,节点的周期性上报时间间隔,单位:秒
通信模式:(主机有权限修改模式)
1:主动上报模式
3:全速运行模式
5.3 入网回复帧(Mode B)¶
帧格式说明:
帧类型:参见入网包帧类型定义
帧序号:帧的编号
应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求
目标节点ID:目标节点的编号ID
网络ID:节点入网后,由网关或服务器分配的网络地址ID,组网后的通信地址均使用网络ID
上行参数:9字节(依次为3个上行信道,3个下行信道,BW,SF,CR,LDR),缺省值用0代替,0表示不使用此信道或不修改此参数。BW取值6-9,SF取值7-12,CR取值1-4,LDR取值0-1
分组号:网关给终端分配的组号,其中0xff为所有终端
时隙时间(wSlot-Len):单位ms,为终端上行的时间间隔
周期时间(lSlot-Interval):单位ms,Mode B系统执行周期时间,该周期内划分成上行时间和下行时间
网关当前时间(lGw-CurRTC):单位ms,指当前网关的时间,精确到ms
本包飞行时间:单位ms,指当前入网回复帧的空中传输时间
通信模式:(主机有权限修改模式)
2:周期同步模式
5.4 数据帧¶
帧格式说明:
帧类型:参见入网包帧类型定义
帧序号:帧的编号
应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求
数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空。
网络ID:解析说明:与IP地址解析类似
单播地址:低bit开始不能连续为1,如0x11223344
组播地址:低bit 连续的1为组播地址,不能设置为具体的网络地址,如0x1122334F,组播地址的范围包括地址为0x11223340-0x1122334E
数据内容长度:payload的数据包长度,不包括校验位
5.6 定点通信数据帧¶
帧格式说明:
帧类型:参见入网包帧类型定义
目标地址:解析说明,与IP地址解析类似
单播地址:低bit开始不能连续为1,如0x1122
组播地址:低bit 连续的1为组播地址,不能设置为具体的网络地址,如0x112F,组播地址的范围包括地址为0x1120-0x112E
数据内容长度:payload的数据包长度
数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空。
5.8 广播信标帧(Mode B)¶
广播信标帧由网关周期发送,终端收到广播信标帧后更新本地时间,实现终端与网关的时间同步,见下图:
帧格式说明:
帧类型:参见入网包帧类型定义
帧序号:帧的编号
应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求
目标分组号:指本次上下行标志位指示的设备分组,其中0xff代表所有设备
下行标志:1有效,代表网关即将由下行数据下发
上行标志:1有效,代表对应分组的设备需要发送上行数据
新时隙时间:更新终端设备上行的时间间隔
新周期时间:更新Mode B周期时间
网关当前时间(lGw-CurRTC):单位ms,指当前网关的时间,精确到ms
本包飞行时间:单位ms,指当前入网回复帧的空中传输时间