我希望某些输入引脚的默认值为弱下拉。我正在使用运行 Debian 4.12.8 的 sama5d36。我修改了dts文件如下:
ahb {
abp {
pinctrl@fffff200 {
board {
pinctrl_inputs: input_pins {
atmel,pins =
<AT91_PIOC 26 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
<AT91_PIOC 27 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
<AT91_PIOA 30 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
<AT91_PIOA 31 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>;
};
};
};
};
};
myInputs {
compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_inputs>;
};
只是想补充一点,我确实在 /sys/kernel/debug/pinctrl/ahb:apb:pinctrl@fffff200/pinconf-pins 中看到了 PULL_DOWN:
pin 30 (pioA30): PULL_DOWN|DRIVE_STRENGTH_MED
pin 31 (pioA31): PULL_DOWN|DRIVE_STRENGTH_MED
pin 90 (pioC26): PULL_DOWN|DRIVE_STRENGTH_MED
pin 91 (pioC27): PULL_DOWN|DRIVE_STRENGTH_MED
但 /sys/class/gpio/pioA30 仍显示值为 1:
direction -> in
active_low -> 0
value -> 1
其他引脚(PioA31、pioC26、pioC27)相同。我不需要此引脚处于低电平有效状态,我只是添加了它以表明输入为高电平而没有任何连接,这是我用示波器验证的。
更新:我添加了以下引脚,它们确实有效:
<AT91_PIOD 6 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
<AT91_PIOD 7 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>;
这让我更加困惑。我检查了 /sys/kernel/debug/pinctrl/ahb:apb:pinctrl@fffff200/pinmux-pins 并且所有引脚显示如下:
pin 102 (pioD6): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 103 (pioD7): (MUX UNCLAIMED) (GPIO UNCLAIMED)
有没有人经历过类似的事情?
在设备树 (dts) 中设置节点需要兼容的节点,例如 gpio-keys 或 gpio-leds。你不能像我试图做的那样仅仅组成一个节点。因为我需要的行是 SPI BLE 的一部分,所以我将它添加到我的 spi1 节点,如下所示:
我仍然不知道为什么其他引脚不会拉下,但至少现在我的启动没有出错。我必须在内核中打开 earlyprintk 才能看到消息。
更新:终于能够下拉工作。几个引脚在硬件中被拉起,因此下拉无效。几个引脚被设置为 LED 或由我禁用的其他外围设备使用。上例中的所有引脚都成功下拉。