跳转至

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 子文档.

基础与通知

业务

驱动

执行层任务

执行层分为两部分:

  1. 物理层任务: 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.
  2. 指令分发任务: airlink 主任务 (luat_airlink_task.c), 接收所有 transport slot 入队的 cmd, 按 airlink_cmds[] 表分发到对应 exec handler.

队列优先级

类型 优先级 流量控制
IP 包 (cmd 0x100) 最低 flags.mem_is_high 标志影响, 内存紧张时对端停止下发
非 IP 包 (命令/通知) 较高 有数据即传输, 不做抛弃处理
问一下 AI