1 ChirpLAN 协议介绍¶
当前版本 |
V0.1 |
---|---|
更新日期 |
2022年11月2日 |
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:空中唤醒模式
特点:
支持Mode A的全部功能
终端周期打开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、支持单向通信,终端具有较低的功耗,网关在终端入网时规定终端的休眠周期,终端会定期自唤醒和接收,如果未发现Chirp信号,则会继续休眠;如果发现Chirp信号,则会接收一包完整的数据,通信时序见下图:
2、支持主动发包机制,与Mode A一致
3、支持时间帧同步(终端在收到网关的payload时刻同步当前的周期起始点)
Mode B模式的通信流程见下图:
Mode B模式通信流程说明如下:
T1:EP1被唤醒,但ID不匹配,后继续休眠
T3:同周期内EP2也被唤醒,EP2的ID匹配ok,继续接收数据
T2:EP1被唤醒,同时ID匹配正确,继续接收数据
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
点对点定点模式数据包:0x10
点对点透传模式数据包:0x11
帧序号:帧的编号,每一帧都单独递增,重复包ID相同,Ack 包的序号和请求包对应
节点ID:节点的编号,由应用来分配,一个网络里应该唯一
应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求
通信模式:取值范围:1~3
1:主动上报模式,
2:空中唤醒模式,
3:全速运行模式,
校验:数据校验和
5.2 入网回复帧¶
帧格式说明:
帧类型:参见入网包帧类型定义
帧序号:帧的编号
应用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:主动上报模式
2:空中唤醒模式
3:全速运行模式
5.3 数据帧¶
帧格式说明:
帧类型:参见入网包帧类型定义
帧序号:帧的编号
应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求
数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空。
网络ID:解析说明:与IP地址解析类似
单播地址:低bit开始不能连续为1,如0x11223344
组播地址:低bit 连续的1为组播地址,不能设置为具体的网络地址,如0x1122334F,组播地址的范围包括地址为0x11223340-0x1122334E
数据内容长度:payload的数据包长度,不包括校验位
5.4 配置帧¶
说明:配置帧目前保留,后续版本会使用。
5.5 定点通信数据帧¶
帧格式说明:
帧类型:参见入网包帧类型定义
目标地址:解析说明,与IP地址解析类似
单播地址:低bit开始不能连续为1,如0x1122
组播地址:低bit 连续的1为组播地址,不能设置为具体的网络地址,如0x112F,组播地址的范围包括地址为0x1120-0x112E
数据内容长度:payload的数据包长度
数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空。
5.6 透明传输帧数据帧¶
帧格式说明:
帧类型:参见入网包帧类型定义
数据内容长度:payload的数据包长度
数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空
5.7 同步帧¶
同步帧分为请求同步帧和时间同步帧,见下图:
帧格式说明如下(仅说明如下2个字段,其它字段都类似):
工作周期:网关或者对端发射的周期,单位1ms
剩余时间:当前同步帧距离下次发射的剩余时间,单位1ms