AirLink 通信协议
AirLink 是合宙定义的跨芯片结构化命令框架, 用于两个芯片之间的可靠通信, 载体可以是 SPI 主从、UART 对等或 LOOPBACK 自测.
典型应用: Air8101 (WiFi SoC) + Air780EPM (4G Cat.1 模组) 通过 SPI 互联, Air8101 作为 SPI 主机挂载 Air780EPM 作为 SPI 从机, 由 Air8101 控制 Air780EPM 的 4G 链路收发, 实现 "WiFi/以太网芯片获得 4G 上行" 的桥接.
协议栈
┌────────────────────────────────────────────────────┐
│ 4. 执行层 airlink_cmds[] 命令分发表 │
│ -> exec_* / exec_rpc_* handler │
├────────────────────────────────────────────────────┤
│ 3. 指令层 cmd_id(2B) + len(2B) + data(NB) │
│ -> luat_airlink_cmd_t │
├────────────────────────────────────────────────────┤
│ 2. 链路层 magic(4) + len(2) + crc16(2) │
│ + pkgid(4) + flags(4) + data │
│ -> airlink_link_data_t │
├────────────────────────────────────────────────────┤
│ 1. 物理层 SPI master/slave | UART | LOOPBACK │
│ -> 1600B SPI 事务 / 0x7E SLIP / 自发自收 │
└────────────────────────────────────────────────────┘
每层只与相邻层交互:
- 物理层: 负责字节流的传输, 保证 1600B 事务或 SLIP 帧的完整性
- 链路层: 加上 magic/CRC/pkgid/flags, 提供可靠的包边界识别与能力协商 (链路层描述)
- 指令层: 加上 cmd/len 头部, 定义语义化的命令集 (指令层描述)
- 执行层: 通过
airlink_cmds[]静态表分发到具体 exec handler
传输模式
| 模式 | 常量 | 典型场景 |
|---|---|---|
| SPI 从机 | MODE_SPI_SLAVE = 0 |
4G/WiFi 模组作为从机, 挂载到主控 SoC |
| SPI 主机 | MODE_SPI_MASTER = 1 |
主控 SoC 主动轮询从机 |
| UART | MODE_UART = 2 |
板间或低速场景 |
| LOOPBACK | MODE_LOOPBACK = 3 |
PC 模拟器自测 |
三种模式可同时启用 (
LUAT_AIRLINK_MAX_TRANSPORTS = 4), 通过airlink.bindTransport(adapter_id, mode)把指定网络适配器路由到特定传输. 最大网卡数LUAT_AIRLINK_MAX_ADAPTERS = 16.
能力协商
链路层无显式握手. 能力协商通过每帧 flags 字段隐式完成:
| 标志 | 含义 |
|---|---|
flags.rpc_supported |
是否支持 nanopb RPC (cmd 0x30) |
flags.frag_supported |
是否支持 cmd 0x32 分片 |
对端收到任一帧后调用 luat_airlink_peer_flags_update() 保存, 上层通过 luat_airlink_peer_rpc_supported() / luat_airlink_peer_frag_supported() 查询, 决定 sdata 走 RPC 还是 raw cmd 0x20, 是否需要降级.
详细字段定义见 链路层描述.
分层文档
| 层级 | 文档 |
|---|---|
| 物理层 | 物理层描述 |
| 链路层 | 链路层描述 |
| 指令层 | 指令层描述 |
指令分类
按 cmd id 范围分组, 每组对应一个 cmd_*.md 子文档.
基础与通知
业务
- IP包指令 — 0x100 IP/MAC 包透传
- FOTA 指令 — 0x04-0x07 远程升级
- 通用 RPC — 0x30 nanopb 通用 RPC
- 分片重组 — 0x32 大 payload 自动分片
驱动
- GPIO 指令 — 0x300-0x311
- UART 指令 — 0x400-0x411
- WLAN 指令 — 0x200-0x208
- BT 指令 — 0x500-0x511
- PM 指令 — 0x600-0x602
- PWM 指令 — 0x700-0x701
- MOBILE 指令 — 0x800-0x803 (IMEI/IMSI/ICCID/MUID)
- OTP 指令 — 0x900-0x904
执行层任务
执行层分为两部分:
- 物理层任务: SPI 主机任务 (
luat_airlink_spi_master_task.c)、SPI 从机任务 (luat_airlink_spi_slave_task.c)、UART 收发任务 (luat_airlink_uart_task.c)、LOOPBACK 任务 (luat_airlink_loopback_task.c). 通过airlink.start(mode)按类型启动, 每个 mode 占用 1 个 transport slot. - 指令分发任务: airlink 主任务 (
luat_airlink_task.c), 接收所有 transport slot 入队的 cmd, 按airlink_cmds[]表分发到对应 exec handler.
队列优先级
| 类型 | 优先级 | 流量控制 |
|---|---|---|
| IP 包 (cmd 0x100) | 最低 | 受 flags.mem_is_high 标志影响, 内存紧张时对端停止下发 |
| 非 IP 包 (命令/通知) | 较高 | 有数据即传输, 不做抛弃处理 |