跳转至

GPIO 操作指令

对应源码: components/airlink/include/luat_airlink_drv_gpio.h, components/airlink/src/driver/luat_airlink_drv_gpio.c

启用宏: LUAT_USE_AIRLINK_EXEC_GPIO (主指令), LUAT_USE_AIRLINK_EXEC_GPIO_RESP (异步响应)

GPIO 指令用于在两端之间透明地操作 GPIO 引脚. 主机调用本组指令, 从机实际执行 GPIO 操作并返回结果.

通用 payload 头

所有 driver 指令的 data 字段前 8 字节是 seq_id (uint64_t, 小端, 单调递增), 用于匹配 cmd 0x08 result 回调. 详见 指令层描述.

指令列表

cmd 名称 方向 说明
0x300 gpio_setup 主→从 配置 GPIO 引脚 (模式/上下拉/中断)
0x301 gpio_set 主→从 设置 GPIO 输出电平
0x302 gpio_get 主→从 读取 GPIO 输入电平, 结果通过 cmd 0x310 回调
0x304 gpio_driver_yhm27xx 主→从 通过 YHM27xx IO 扩展芯片读写寄存器
0x305 gpio_driver_yhm27xx_reqinfo 主→从 查询 YHM27xx 设备信息
0x310 gpio_get_result 从→主 异步返回 GPIO 输入电平 (bitmap)
0x311 gpio_irq_cb 从→主 GPIO 中断回调通知

各指令详细定义

gpio_setup (0x300)

配置 GPIO 引脚.

字段 长度 含义
seq_id 8B 序列号
gpio NB luat_gpio_t 结构 (含 pin/mode/pull/irq 等)

引用源码头文件 include/luat_gpio.h 中的 luat_gpio_t 结构定义.

gpio_set (0x301)

设置 GPIO 输出电平.

字段 长度 含义
seq_id 8B 序列号
pin 1B GPIO 引脚号
level 1B 输出电平: 0 = 低, 1 = 高

gpio_get (0x302)

读取 GPIO 输入电平. 结果通过 cmd 0x310 异步回调, 客户端协程/信号量阻塞等待.

字段 长度 含义
seq_id 8B 序列号
pin 1B GPIO 引脚号

约束: 仅当 wifi 固件版本 ≥ 9 时支持 (src/driver/luat_airlink_drv_gpio.c:74-79).

gpio_driver_yhm27xx (0x304)

通过 YHM27xx IO 扩展芯片读写寄存器.

字段 长度 含义
seq_id 8B 序列号
Pin 1B YHM27xx 所在的 GPIO 引脚
ChipID 1B I2C 设备地址
RegAddress 1B 寄存器地址
IsRead 1B 0 = 写, 1 = 读
Data 1B 写入的数据 (IsRead=0 时有效)

gpio_driver_yhm27xx_reqinfo (0x305)

查询 YHM27xx 设备信息.

字段 长度 含义
seq_id 8B 序列号
Pin 1B YHM27xx 所在的 GPIO 引脚
ChipID 1B I2C 设备地址

gpio_get_result (0x310)

异步返回 GPIO 输入电平. 响应方向 (从→主).

字段 长度 含义
req_pkgid 8B 对应 gpio_get 请求的 seq_id
result_code 2B 0 = 成功, 负值 = 错误
input_level_bitmap 8B GPIO 输入电平 bitmap (bit N = pin N 的电平)

gpio_irq_cb (0x311)

GPIO 中断回调通知. 从机主动发送, 主机订阅相应事件.

字段 长度 含义
pin 1B 触发中断的 GPIO 引脚
level 1B 当前电平
event 1B 中断类型 (RISING/FALLING/BOTH)
问一下 AI