私はi.mx6ボード(yocto(jethro))を使ってデバイスツリーを構築しています。 dtsファイルを変更し、dtbファイルをブートパーティションに配置しました。 dtsファイルにGPIO4_IO19を次のように設定しました。
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
...
MX6UL_PAD_CSI_VSYNC__GPIO4_IO19 0x0000B0B0
...
>;
};
...
もともとMX6UL_PAD_CSI_VSYNC__GPIO4_IO19は別のグループ(usdhcgrp)で定義されていましたが、コメントアウトされました。
起動後、設定に従ってgpioが正常に決定されたことを確認してください。明らかにする
echo 115 > /sys/class/gpio/export
-sh: echo: write error: Device or resource busy
だからこれを確認してみました。
cat /sys/kernel/debug/gpio
GPIOs 0-31, platform/209c000.gpio, 209c000.gpio:
gpio-10 (phy-reset ) out lo
GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio:
GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio:
gpio-68 (ft5x06_irq_gpio ) in hi
GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio:
gpio-109 (? ) out lo
gpio-115 (cd ) in lo
gpio-116 (? ) out lo
gpio-117 (? ) out lo
gpio-118 (sysfs ) in hi
GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio:
gpio-128 (phy-reset ) out lo
CDはgpio-115を使用しています。たぶんこれはカード検出を意味するかもしれません。状態を読み取るためにsysfsとして使用したいと思います。他に読む方法はありますか?さらに、gpio-10、68、109、116、117は他のデバイスで使用されています。 sysfsでどのように使用できますか?
私がすべきことは、レジスタに正しい値が設定されていることを確認することだと思います。レジスタ値が私が設定した値と異なる場合は、他のプロセスでピン制御を設定することが推測されます。ところで、登録簿にアクセスする方法がわかりません。
私がgpio115について知っていることは次のとおりです。
mux_reg address: 0x01DC and the value.
conf_reg address: 0x0468 and the value.
input_reg address: 0x0000 and the value.
他のGPIOと同じです。
0x01DCにアクセスしてlinux(yocto)から値を取得するには?
助けてくれてありがとう。
答え1
ピンの状態だけを知りたい場合は、/sys/kernel/debug/gpioにすでに表示されています。
gpio-115 (cd ) in lo
入力で構成されており、現在低い値を持っています。スロットにカードを挿入/削除すると、値が変わります!
レジスタ値に直接アクセスしたい場合、またはアクセスする必要がある場合は、ユーティリティdevregsを確認してください。