GPIOピンをプルダウンしたいです。

GPIOピンをプルダウンしたいです。

一部の入力ピンのデフォルト値を弱いプルダウンに設定したいと思います。私は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)

似たような経験をした人はいますか?

答え1

デバイスツリー(dts)でノードを設定するには、gpio-keysやgpio-ledなどの互換性のあるノードが必要です。私がしたいようにノードを構成することはできません。必要な行はSPI BLEの一部なので、次のようにspi1ノードに追加しました。

        spi1: spi@f8008000 {
            cs-gpios = <0>, <0>, <0>, <0>;
            pinctrl-0 = <&pinctrl_spi1 &pinctrl_ble_irq>;
            dmas = <0>, <0>;
            status = "okay";
            spidev@0 {
                compatible = "semtech,sx1301";
                spi-max-frequency = <10000000>;
                reg = <0>;
            };
        };

        pinctrl@fffff200 {
            board {
                pinctrl_ble_irq: ble_irq {
                    atmel,pins =
                        <AT91_PIOB 14 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOB 20 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOB 22 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOB 26 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOC 17 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOD 6 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOD 15 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOE 16 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOE 23 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOE 31 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>,
                        <AT91_PIOD 8 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_DOWN>;
                };
            };
        };

他のピンがなぜ下に引かれないのかはまだわかりません。しかし、少なくとも今は起動時にエラーは発生しません。このメッセージを表示するには、カーネルでEarlyprintkを有効にする必要があります。

アップデート:ついにドロップダウンメニューが機能するようになりました。ハードウェアの複数のピンが引き上げられているため、プルダウンは効果がありません。 LEDに設定または無効になっている他の周辺機器で使用される複数のピンがあります。上記の例のすべてのピンは正常に引っ張られました。

関連情報