Armadillo-640 CON9のGPIOの設定について

お世話になっております。徐と申します。

CON9のGPIOを全て使用したいと考えております。

製品マニュアル 6.7 GPIO を参考に

ピン番号CON9_1~CON9_16の入出力方向をoutput、GPIO の出力レベルを1に設定し電圧がHighになるかどうかを試したのですが、CON9_1、CON9_3、CON9_4でHighになりませんでした(CON9_1~CON9_28まで使用予定ですが、CON9_16までしか試していません)。

CON9のUARTが有効になっていることが原因と考えたため、それを無効にするために以下を試してみたのですが、再度上記の確認をしましたが結果に変化が見られませんでした。

CON9_1、CON9_3、CON9_4をGPIOのピンとして使用するにはどうすればよいかご教示ください。

---------試した内容--------------------------------------------------------------------------------------------------

20.3.3.3. DTS/DTB の生成 を参考にat-dtwebにて
何も設定していない状態で「save」をクリックし、arch/arm/boot/dts/以下に DTS/DTBが生成されていることを確認。

ftpでArmadillo-640に上記で生成した armadillo-640-at-dtweb.dtb を送信。

11.2.3. DTB の書き換え を参考にDTBを書き換え。

----------------------------------------------------------------------------------------------------------------------

製品: 
Armadillo-640

徐です。

追記です。

本日、製品マニュアル 6.7 GPIO を参考に3/15に質問させていただいた内容と同じことを試したところ、CON9_3、CON9_4でHighになったことが確認できました。(CON9_1~CON9_6、CON9_13~CON9_18、CON9_25~CON9_28を使用予定で、CON9_1以外は全てHighになったことを確認)。

なぜ、3/15にCON9_3とCON9_4の電圧がHighにならなかったのかは原因が分かりませんでした。

また、https://users.atmark-techno.com/blog/8700/3342 を参考に

現在、Armadillo-640のコンソール出力先をCON9からCON3、CON4に変更しています。

CON9_1の入出力方向をoutput、GPIO の出力レベルを1に設定しても電圧がHighにならないのは、コンソール出力先の変更が原因でしょうか?

未だCON9_1の電圧がHighにならない原因が分からないため、Highにする方法のご教示をお願いいたします。

溝渕です。

> 未だCON9_1の電圧がHighにならない原因が分からないため、Highにする方法のご教示をお願いいたします。

CON9_1のGPIO番号は22です。

GPIOクラスディレクトリ(/sys/class/gpio/gpio22/)のdirection/valueを操作
してみてください。

お世話になります。徐です。
返信ありがとうございます。

ご教示の通り、GPIOクラスディレクトリ(/sys/class/gpio/gpio22/)のdirection/valueを操作してみましたが、Highになりませんでした。

他にCON9_1をHighにする方法はありますでしょうか?

> 溝渕です。
>
> > 未だCON9_1の電圧がHighにならない原因が分からないため、Highにする方法のご教示をお願いいたします。
>
> CON9_1のGPIO番号は22です。
>
> GPIOクラスディレクトリ(/sys/class/gpio/gpio22/)のdirection/valueを操作
> してみてください。
>

こちらでも、gpio22 をdirection = output, value = 1 にしても CON9_1 がHighにならない現象が再現しました。
GPIOの入力は動作するようでした。

原因についてはこれから調査します。

ご迷惑おかけして申し訳ありません。

佐藤です。

at-dtwebで生成された arch/arm/boot/dts/armadillo-640-expansion-interface.dtsi の
MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x80000000
となっている個所を
MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x0001b0b0
このように修正して試してもらえますでしょうか

修正後、次のようにdtbを再生成できます。
[PC ~]$ cd linux-v4.14-at[version]
[PC ~/linux-v4.14-at[version]]$ rm arch/arm/boot/dts/armadillo-640-at-dtweb.dtb
[PC ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640-at-dtweb.dtb

佐藤様、お世話になります。徐です。

ご教示の通り、arch/arm/boot/dts/armadillo-640-expansion-interface.dtsiを

MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x0001b0b0

に修正した後、armadillo-640-at-dtweb.dtb を再生しました。

その後、製品マニュアル 11.2.3. DTBの書き換えを参考に書き換え、6.7. GPIO の内容をCON9_1で試してみたのですが、catで確認するとvalueは1になっていたのですが、電圧がHighになりませんでした(LEDが光らなかった)。

他に考えられる原因はありますでしょうか。
もしあればご教示の方をお願いいたします。

> 佐藤です。
>
> at-dtwebで生成された arch/arm/boot/dts/armadillo-640-expansion-interface.dtsi の
> MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x80000000
> となっている個所を
> MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x0001b0b0
> このように修正して試してもらえますでしょうか
>
> 修正後、次のようにdtbを再生成できます。
> [PC ~]$ cd linux-v4.14-at[version]
> [PC ~/linux-v4.14-at[version]]$ rm arch/arm/boot/dts/armadillo-640-at-dtweb.dtb
> [PC ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640-at-dtweb.dtb
>

佐藤です。

dtbファイルが正常に書き換えられているか以下の通り確認できますでしょうか。

[armadillo ~]# apt-get install device-tree-compiler
[armadillo ~]# fdtdump /boot/a640.dtb

出力された内容の中に
(省略)
expansion_interfacehoggrp {
                    fsl,pins = <0x0000009c 0x00000328 0x00000000 0x00000005 0x00000000 0x0001b0b0
(省略)

となっている個所があると思います。
fsl,pins = <0x0000009c 0x00000328 0x00000000 0x00000005 0x00000000 0x0001b0b0 <-ここの値が 0x0001b0b0 になっていますでしょうか。
なっていないのであれば、書き換えたdtbファイルが間違ってると思われますので、再度dtb生成手順を確認してもらえますでしょうか。

佐藤様、お世話になります。徐です。

ご教示の通り、fdtdump /boot/a640.dtb コマンドを実行し、expansion_interfacehoggrのfsl,pins = <・・・・・0x0001b0b0になっていることを確認しました。

また、6.7. GPIO の内容をCON9_1で試し、電圧がHighになったことを確認しました(LEDが光った)。

ありがとうございました。

> 佐藤です。
>
>
> dtbファイルが正常に書き換えられているか以下の通り確認できますでしょうか。
>
> [armadillo ~]# apt-get install device-tree-compiler
> [armadillo ~]# fdtdump /boot/a640.dtb
>
> 出力された内容の中に
> (省略)
> expansion_interfacehoggrp {
> fsl,pins = <0x0000009c 0x00000328 0x00000000 0x00000005 0x00000000 0x0001b0b0
> (省略)
>
> となっている個所があると思います。
> fsl,pins = <0x0000009c 0x00000328 0x00000000 0x00000005 0x00000000 0x0001b0b0 <-ここの値が 0x0001b0b0 になっていますでしょうか。
> なっていないのであれば、書き換えたdtbファイルが間違ってると思われますので、再度dtb生成手順を確認してもらえますでしょうか。