我们使用的是 Colibri IMx6,需要访问几个引脚。在 sysfs 时代,我们只需将导出回显到系统上的“文件”,引脚就会“激活”。
现在我想知道如何使用“新” GPIOD 将引脚导出为 GPIO
cat /sys/kernel/debug/gpio
输出:
gpiochip0: GPIOs 0-31, parent: platform/209c000.gpio, 209c000.gpio:
gpiochip1: GPIOs 32-63, parent: platform/20a0000.gpio, 20a0000.gpio:
gpio-37 ( |cd ) in hi IRQ
gpio-54 ( |Wake-Up ) in lo IRQ
gpiochip2: GPIOs 64-95, parent: platform/20a4000.gpio, 20a4000.gpio:
gpio-90 ( |enable ) out hi
gpio-95 ( |usb_host_vbus ) out lo
gpiochip3: GPIOs 96-127, parent: platform/20a8000.gpio, 20a8000.gpio:
gpio-108 ( |scl ) in hi
gpio-109 ( |sda ) in hi
gpiochip4: GPIOs 128-159, parent: platform/20ac000.gpio, 20ac000.gpio:
gpio-130 ( |spi_imx ) out hi
gpiochip5: GPIOs 160-191, parent: platform/20b0000.gpio, 20b0000.gpio:
gpiochip6: GPIOs 192-223, parent: platform/20b4000.gpio, 20b4000.gpio:
gpio-204 ( |id ) in lo IRQ
我们需要导出大约 6 个引脚gpiochip0
,但如果没有导出,我们可以使用 GPIOD-cli-tools 将它们全部设置成我们想要的,但它们不会在硬件上改变,或者硬件不会报告输入引脚。
我们通过 GPIOD 的 CLI 工具设置和查询 GPIO 引脚
# gpioset --mode=signal 2 4=1
# gpioset --mode=time --sec=50 2 4=1
但 LED 不亮
开始编辑
gpioinfo 2
处于活动状态时的输出gpioset --mode=signal 2 4=1
:
gpiochip2 - 32 lines:
line 0: unnamed unused input active-high
line 1: unnamed unused output active-high
line 2: unnamed unused output active-high
line 3: unnamed unused output active-high
line 4: unnamed "gpioset" output active-high [used]
line 5: unnamed unused output active-high
line 6: unnamed unused output active-high
...
结束编辑
对于查询(按钮),我们使用以下内容
# gpioget 0 29
0
0
无论按钮处于什么状态,它都会返回。
编辑
经过进一步检查,我们发现唯一无法正常工作的引脚是引脚 67,这是由于多路复用造成的。现在我的问题变成了:如何禁用引脚 67 上的多路复用,并使其作为 gpiochip2 上的 GPIO 引脚 17 工作
答案1
该引脚的问题在于该引脚是 MUX-ed 的,您需要使用 DeviceTree 禁用 MUX,才能使用该引脚的 GPIO 功能。