GPIO

开发板上引出了4个GPIO,分别是GPIO11、GPIO2、GPIO7和GPIO6。并且通过原理图和gpio.h了解到这些GPIO对应的GPIO_NUM:

# vi kernel/drivers/sstar/include/infinity2m/gpio.h

GPIO丝印名称 GPIO NUM
IO11 11
IO2 73
IO7 7
IO6 6
  • DTR配置

DTS需要将这4个GPIO设置为GPIO_MODE(取消其他复用,使默认为GPIO_MODE):

# cd kernel/arch/arm/boot/dts
# vi infinity2m-ssc011a-s01a-padmux-display.dtsi

# vi infinity2m-ssc011a-s01a-display.dtsi
# cd -

  • kernel config 的配置

Kernel默认加载了GPIO驱动,因此不需要修改任何东西。

# cd kernel
# ARCH=arm make menuconfig

每次修改需要保存一下配置

# cp .config ./arch/arm/configs/infinity2m_spinand_ssc011a_s01a_minigui_defconfig  -f
# cd ..

这样配置完成后,重新编译固件并升级kernel:

 # cd ..
 # ./Release_to_customer.sh -f nand -p ssd201
  • 验证

我的验证方法是这样的,把IO11和IO2用导线联通,IO7和IO6用导线联通。然后将IO11作为输入,IO2作为输出,如果IO11的输入电平等于IO2的输出电平,说明GPIO功能是正常的;类似地,将IO7作为输入,IO6作为输出。

# echo 11 > /sys/class/gpio/export
# echo in > /sys/class/gpio/gpio11/direction
# echo 73 > /sys/class/gpio/export
# echo out > /sys/class/gpio/gpio73/direction
# echo 1 > /sys/class/gpio/gpio73/value
# cat /sys/class/gpio/gpio11/value
# echo 0 > /sys/class/gpio/gpio73/value
# cat /sys/class/gpio/gpio11/value

# echo 7 > /sys/class/gpio/export
# echo in > /sys/class/gpio/gpio7/direction
# echo 6 > /sys/class/gpio/export
# echo out > /sys/class/gpio/gpio6/direction
# echo 1 > /sys/class/gpio/gpio6/value
# cat /sys/class/gpio/gpio7/value
# echo 0 > /sys/class/gpio/gpio6/value
# cat /sys/class/gpio/gpio7/value

可以看到,结果与我们设想的一致。
至此,GPIO功能调试完成。

文档更新时间: 2021-08-17 14:45   作者:Aeeditor