当前文档版本为 v0.2.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

1 ChirpLAN 协议介绍

当前版本

V0.2

更新日期

2023年9月16日

2 ChirpLAN 是什么

ChirpLAN目前是一种基于ChirpIoT™通讯技术,采用按需可靠的数据收发机制,适用于远距离低功耗的小型局域网(LAN)的网络通信协议。 ChirpLAN即ChirpIoT和LAN的缩写,也代表了它的特性。

主要特点:

  1. 开源:协议遵循Apache 2.0协议,协议代码和规范都完全公开,可以商用

  2. 轻量级:code<15KB,SRAM<4KB

  3. 组网灵活:支持组网,也支持点对点

  4. 多种功耗配置:对于功耗和实时性要求不同的场景都有支持

  5. 可靠性强:协议简单,可靠,扩展性强

  6. 完全自主开发:有独立的知识产权

  7. 安全:协议支持加解密功能

  8. 易部署:可以灵活的移植适配到不用的平台,MCU,以及和云服务端对接

3 ChirpLAN网络拓扑结构

目前ChirpLAN主要支持两种类型的组网,一种是网络模式,另一种是直连模式,网络模式本版本主要支持星形网络,网络拓扑图见下图,ChirpLAN网络中有2中角色:终端和网关,和云端服务器通信部分由具体的应用业务实现,不属于本协议部分的涵盖范围。

image

网络模式的拓扑结构图

直连模式,此模式又分为两种情况,一种是一对一模式通信,另一种是一对多通信的模式,两种模式拓扑图见下图:

image

直连模式拓扑结构图

image

一对都多模式拓扑结构图

4 ChirpLAN 协议架构

ChirpLAN协议应用的网络架构见下图,从底层到上层分别是物理层,链路层,网络层和应用层。其中本协议只对链路层和网络层做了规范。说明如下:

物理层:是基于磐启微的ChirpIoT通信技术的射频芯片。

链路层:负责实现收发逻辑,提供重传、碰撞检测,入网等功能。链路层为上层网络层提供接口,使用这些接口,网络层可以完成对射频的相关操作,而不用关注这些操作是如何实现的。

网络层:负责网络协议的控制,数据封包和解包,网络地址解析,各种模式管理等工作。

应用层:主要是一些具体的业务逻辑,如MCU外设,AT指令控制等。

image

ChirpLAN协议应用网络架构图

4.1 链路层介绍

链路层负责实现收发逻辑,提供重传、碰撞检测,入网等功能。链路层为上层网络层提供接口,使用这些接口,网络层可以完成对射频的相关操作,而不用关注这些操作是如何实现的。

  • 收发逻辑:射频的相关参数配置,收发数据的控制

  • 重传控制:根据配置参数,来控制射频发射的重传控制

  • 碰撞检测:多个节点同时发送会有冲突,需要做冲突检测和退避处理

  • 入网功能:加入网络的机制,可以从网关端获取分配的信道和相关模式以及参数等信息

  • 安全机制:支持数据的加解密AES128,key:128 bit

4.1.1 碰撞检测

image

碰撞检测机制

参考上图,下面说明碰撞检测机制:

  1. EP每次TX完会设定一个冲突窗口,这个窗内当前EP不允许发送数据

  2. EP每次发数据前都会检测当前信道是否有数据,如果有数据,会推迟到冲突窗口内的一个时间(要保证在冲突窗口内的一个随机值),只有在空闲模式才可以发送数据

  3. 在冲突窗口内, EP-B首先检测到信道空闲,获得了数据包的发送机会,EP-A和EP-C继续退避

  4. EP-C在第一次退避后,在第二个冲突窗口内,首先检测到信道空闲,发送当前的数据,EP-A继续退避

  5. EP-A检测到信道空闲,发送当前数据包

  6. 退避失败的次数越多,后续会在冲突窗口获得更靠前的权重

4.1.2 入网功能

入网是节点加入网络的第一个步骤,在网络模式中,只有终端节点通过网关的网络授权后,加入到网关对应的网络,才能进一步进行数据的交互。具体的通信的流程如下:

image

正常入网流程

正常入网说明:

  • 首先终端在入网信道,向网关发一个入网请求包(包括自己的一些必要信息,参考后面的入网请求帧)

  • 网关收到入网包,如果校验通过,会发送入网确认包,同时会给终端分配相关的RF参数,包括通信信道

  • 终端在数据信道发送数据给网关

  • 如果需要回复确认包,网关收到数据包后,回复相应的确认包

说明,目前入网中采用的是AES128加密机制,128 bit密钥

image

异常入网流程

异常入网流程说明:

  1. 终端发送的入网包,网关没有收到

  2. 终端继续发送一个入网包,但是入网包是一个非法的,此时网关可以收到,但不回复确认包

  3. 终端发送一个合封的入网包,网关也收到了此入网包

  4. 网关回复的确认包,终端没有收到

  5. 终端会继续重新发送入网包,直到收到网关的数据确认包为止

4.2 网络层介绍

负责网络协议的控制,数据封包和解包,网络地址解析,各种模式管理等工作。下面先介绍下网络层支持的几种模式。

image

网络模式介绍

ChirpLAN主要分为2个大的模式,网络模式(network mode)和直连模式(direct mode),Network Mode包括如下几种子模式:

  1. Mode A:主动上报模式

    特点:

    • 用户按需来发送数据,比如AT指令或者定时发送数据,不发送数据时RF处于休眠状态

  2. Mode B:周期同步模式

    特点:

    • 支持网关与终端时间同步

    • 下行:支持MAPM功能,在下行时隙终端周期打开RX,网关可以通过长前导码唤醒终端

    • 上行:终端在上行时隙按网关分配的时隙有序上行数据

  3. Mode C:全速运行模式

    特点:

    • 支持主动上报的功能

    • 半双工模式,终端在非TX的模式时,RF处于RX的模式,用来快速响应网关的数据

直连模式(Direct Mode),主要分为点对点直连模式和一对多通信模式,特点如下:

  • 支持终端之间的点对点通讯

  • 支持一对一和一对多

  • 地址参数可以配置

4.2.1 网络模式–Mode A

Mode A:主动上报模式,支持双向通信,终端具有极低的功耗,但是双向通信必须由终端发起,终端发送消息后,会打开一个短暂的接收窗口,网关需要在这个接收窗口内回复消息或者下发指令,通信时序见下图:

image

Mode A模式通信时序

Mode A模式单节点通信流程见下图:

image

Mode A模式单节点通信流程

通信流程说明如下:

  1. 终端发送数据包D1给网关(需要回复)

  2. 网关回复确认包给终端

  3. 终端发送数据包D2给网关(需要回复)

  4. 网关回复确认包,但终端没有收到

  5. 终端会重传数据包D2给到网关(此时网关不需要将该数据包上报给应用层)

  6. 网关收到后会继续回复确认包

Mode A模式多节点通信流程见下图:

image

Mode A模式多节点通信流程

通信流程说明如下:

  1. 两个终端节点EP1和EP2在不同的上行信道,网关支持多个上行信道接收,绿色柱代表终端RX打开的状态

  2. EP1和EP2分别同时发送数据包D1和P1给网关

  3. 网关下行只有一个信道,所以需要串行回复确认包,此时两个终端的RX开窗时间都满足,所以ack都可以正常接收到

  4. EP1和EP2分别同时发送数据包D2和P2给网关

  5. 网关先回复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的执行周期

image

Mode B模式通信时序

上行时隙流程说明:

  1. 为了避免终端同时上行,导致终端相互干扰、信道拥挤、收包率降低,终端入网时,网关会根据各终端的ID分配对应的上行时隙号,终端只有在自己规定的时隙号到达时才能发送数据。

  2. 上行时隙的时隙长度根据终端使用的RF参数和发包长度决定,推荐值最小应大于等于终端的发包时间。

  3. 可以根据实际应用中终端数量及上报周期需求调整上行时间长度。

下行时隙空中唤醒功能示意图如下:

Mode B模式下行时隙

Mode B模式的通信流程见下图:

image

Mode B模式通信流程

Mode B模式通信流程说明如下:

  1. T1:EP1被唤醒,但ID不匹配,后继续休眠

  2. T3:同周期内EP2也被唤醒,EP2的ID匹配ok,继续接收数据

  3. T2:EP1被唤醒,同时ID匹配正确,通过MAPM中的计数器,可休眠至同步字前继续唤醒接收数据

  4. T4:EP2在较晚的时刻被唤醒,ID未被正确匹配到,继续休眠

特性说明:

  • 同样是唤醒ID不匹配,由于唤醒的时刻不一样,会导致RX开的窗口大小不一样,对比T1和T4:T1>T4,所以功耗消耗也不一样

  • 同样是ID匹配正确,也会有T2和T3有差异的情况

4.2.3 网络模式–Mode C

Mode C:全速运行模式,支持双向通信,且终端和网关可以随时互相通信,该模式的数据实时性好,但是终端需要消耗更多的电量。通信时序见下图:

image

Mode C模式通信时序

Mode C模式通信流程见下图:

image

Mode C模式通信时序

Mode C模式通信流程说明如下:

  1. EP1和EP2工作在相同的信道

  2. EP1发送数据D1给网关,该数据包需要回复

  3. 网关由于应用层先前触发发送一个数据G1的需求,所以优先发送G1给EP2

  4. 网关发送ack给EP1

  5. 网关需要同时给两个终端EP1和EP2发送一个不需要回复的数据包G2

  6. 终端发送一个需要回复的数据包给P1

  7. 网关收到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唤醒前导码,然后会和发射端做数据同步,此模式接收端功耗会比较低,发射端也不需要特别长的前导码

通信流程见下图:

image

直连模式通信流程

直连是通信流程说明如下(包含两种模式的通信流程):

  1. EP1,EP2,和EP3处于同一个信道

  2. EP1发一个透明传输的包到EP2,EP2收到后回复一个ack

  3. EP2发送一个P1的包(不需要ack),EP1和EP3都可以收到

  4. EP2发送一个P2的定点的数据包(给EP1),EP1收到包后回复一个ack,EP3收到后,发现地址不一致,则不回复ack

5 空中包结构

所有的帧结构遵循:字节序:MSB,比特序:MSB

5.1 入网请求帧

image

入网请求帧格式

帧格式说明如下:

帧类型(其它帧格式定义都相同,不在赘述):

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)

image

入网回复帧格式

帧格式说明:

帧类型:参见入网包帧类型定义

帧序号:帧的编号

应用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)

image

入网回复帧格式

帧格式说明:

帧类型:参见入网包帧类型定义

帧序号:帧的编号

应用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 数据帧

image

数据帧格式

帧格式说明:

帧类型:参见入网包帧类型定义

帧序号:帧的编号

应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求

数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空。

网络ID:解析说明:与IP地址解析类似

  • 单播地址:低bit开始不能连续为1,如0x11223344

  • 组播地址:低bit 连续的1为组播地址,不能设置为具体的网络地址,如0x1122334F,组播地址的范围包括地址为0x11223340-0x1122334E

数据内容长度:payload的数据包长度,不包括校验位

5.5 配置帧

image

配置帧格式

说明:配置帧目前保留,后续版本会使用。

5.6 定点通信数据帧

image

配置帧格式

帧格式说明:

帧类型:参见入网包帧类型定义

目标地址:解析说明,与IP地址解析类似

  • 单播地址:低bit开始不能连续为1,如0x1122

  • 组播地址:低bit 连续的1为组播地址,不能设置为具体的网络地址,如0x112F,组播地址的范围包括地址为0x1120-0x112E

数据内容长度:payload的数据包长度

数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空。

5.7 透明传输帧数据帧

image

透明传输帧数据帧格式

帧格式说明:

帧类型:参见入网包帧类型定义

数据内容长度:payload的数据包长度

数据内容:当本帧为数据帧时,本字段为数据内容。当本帧为ACK应答帧时,本字段为空

5.8 广播信标帧(Mode B)

广播信标帧由网关周期发送,终端收到广播信标帧后更新本地时间,实现终端与网关的时间同步,见下图:

image

请求同步帧格式

帧格式说明:

帧类型:参见入网包帧类型定义

帧序号:帧的编号

应用ID:网络号,用于区分不同的子网络,网关只接受与自己应用ID相同的节点的入网请求

目标分组号:指本次上下行标志位指示的设备分组,其中0xff代表所有设备

下行标志:1有效,代表网关即将由下行数据下发

上行标志:1有效,代表对应分组的设备需要发送上行数据

新时隙时间:更新终端设备上行的时间间隔

新周期时间:更新Mode B周期时间

网关当前时间(lGw-CurRTC):单位ms,指当前网关的时间,精确到ms

本包飞行时间:单位ms,指当前入网回复帧的空中传输时间