GPIO 使用¶
BM1684 芯片包含 3 组 GPIO 控制器,每个控制 32 根 GPIO,与 Linux 的设备节点对应如下:
GPIO控制器 | Linux设备节点 | GPIO 物理编号 | GPIO 逻辑编号 |
---|---|---|---|
#0 | /sys/class/gpio/gpiochip480 | 0到31 | 480到511 |
#1 | /sys/class/gpio/gpiochip448 | 32到63 | 448到479 |
#2 | /sys/class/gpio/gpiochip416 | 64到95 | 416到447 |
比如要操作 GPIO6
,则需要:
编号转换:物理编号是
6
, 对应的逻辑编号是(480 + (6 - 0)) = 486
,这里的0
代表 GPIO 物理编号的开始导出该 GPIO, 以 root 用户运行:
echo 486 >/sys/class/gpio/export
操作 GPIO,设定读取输入或输出指定值:
cd /sys/class/gpio/gpio486 # 设置输入模式 echo in >direction cat value # 设置输出模式 echo out >direction # 输出低电平 echo 0 >value # 输出高电平 echo 1 >value
有以下几点注意事项:
如果 GPIO 已经被其他驱动申请了的话,是无法导出 (export) 成功的,也就无法进行后续的读写操作。
涉及到 IO 功能的复用,如果该引脚的功能已经是 GPIO 的话,才可以用上面的方法;否则要在设备树里指定 pinctrl 状态。
一般来说,如果要简易地在用户层操作 GPIO,可在设备树里添加为 GPIO-LED。详情请参考 linux-linaro-stable/arch/arm64/boot/dts/bitmain/bm1684_firefly.dtsi
。