AirLink通信协议
简介
AirLink通信协议是合宙定义的, 用于两个芯片之间的通用通信协议, 载体可以是SPI主从, 也可以是UART, 也可以是其他双向通信手段.
协议分成多个层
- 物理层, 负责数据包在物理界面的传输, 保证传输的完整性
- 链路层, 将指令数据打包/解包,含包头magic/校验码的规则,流控等
- 指令层, 负责描述指令的类型, 长度, 命令序号, 附加数据等
- 执行层, 负责执行指令, 用于协调队列优先级, 执行时序等
物理层
当前的实现有2种, 将来会增加更多
- SPI主从模式
- UART对等模式
详细描述请查阅 AirLink物理层描述
链路层
链路层的头部, 包含16个字节, magic,len,crc16,pkgid, flags
详细描述请查阅 AirLink链路层描述
指令层
指令层的数据
- 2字节的指令id
- 2字节的数据长度
- 不定长的数据
详细描述请查阅 AirLink指令层描述
指令层支持非常多的指令类型, 对于不支持的指令,应该给予忽略处理
指令分类
- 基础指令, 包括设备信息
- IP包, 包括IP包/MAC包的传输, 对有联网需求的设备是必须实现
- GPIO指令, 初始化GPIO,设置GPIO输出状态,读取GPIO输入状态
- UART指令, 初始化UART,读写UART,处理UART事件
- FOTA指令, 执行FOTA相关的操作
- WIFI指令, WIFI操作相关
- BT指令, 蓝牙操作相关
- PM指令, 功耗控制相关
执行层
执行层分2部分组成:
- 处理物理层的task, 即SPI主机任务, SPI从机任务, UART的收发任务, 通过airlink.start按类型启动
- 处理指令的task, 即 airlink 主任务task
对数据包的优先级处理:
- IP包的优先级最低, 而且受流量控制, 必要时抛弃
- 非IP包的优先级较高, 有数据就传输, 不做抛弃处理