440 字
2 分钟
开源鸿蒙系统配置 GPIO
GPIO 输入
运行时可通用地按“bank 编号 + 引脚号 + 上下拉模式”配置。D1 的 PIO 规则如下:
GPIO编号 = bank编号 × 32 + 引脚号- bank 编号:
PA=0、PB=1、PC=2、PD=3、PE=4、PF=5、PG=6 - 引脚号:每个 bank 内的引脚编号,例如 PG8 的 pin 为 8
- 上下拉值:
0=浮空/禁用,1=上拉,2=下拉 - Toybox 使用
devmem 地址 4 [值],其中4是 32 位访问。
set_pull(){ bank=$1 # PA=0, PB=1, PC=2, PD=3, PE=4, PF=5, PG=6 pin=$2 # 该 bank 内的引脚号,例如 PG8 的 pin 为 8 pull=$3 # 0=浮空, 1=上拉, 2=下拉
addr=$((0x02000000 + bank * 0x30 + 0x24 + (pin / 16) * 4)) shift=$((2 * (pin % 16))) val=$(devmem "$addr" 4)
devmem "$addr" 4 $(( (val & ~(0x3 << shift)) | (pull << shift) ))}使用范例:
# PG4(GPIO196)设为上拉输入set_pull 6 4 1
# PG5(GPIO197)设为下拉输入set_pull 6 5 2
# PG8(GPIO200)设为浮空输入set_pull 6 8 0再通过 sysfs 将对应引脚复用为 GPIO 输入,例如刚才配置的 PG4(GPIO196):
echo 196 > /sys/class/gpio/exportecho in > /sys/class/gpio/gpio196/direction上下拉是电气属性;echo in 仅将引脚设为 GPIO 输入,不会改变上拉、下拉或浮空状态。直接写寄存器的设置会在重启后失效,也可能被启用该引脚的外设驱动覆盖。
最后通过 cat 读取 GPIO 输入值:
cat /sys/class/gpio/gpio196/value读取到 0 表示低电平,读取到 1 表示高电平。
NOTE使用其它接口时需要修改对应的GPIO编号。
GPIO 输出
参考 GPIO 输入的配置方法,确定 GPIO 编号后,可以进行如下配置,例如配置 PG9(GPIO201)为输出:
echo 201 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio201/direction然后配置输出电平:
echo 0 > /sys/class/gpio/gpio201/value # 低电平echo 1 > /sys/class/gpio/gpio201/value # 高电平NOTE使用其它接口时需要修改对应的GPIO编号。