Armadilloフォーラム

Armadillo-IoT G3L 変更したGPIOの初期値

kazukitakahashi

2019年3月8日 11時34分

解決扱いになっているのか、以前の投稿に続けた質問に返信が無いので
新規投稿させていただきます。

https://users.atmark-techno.com/forum/armadillo/3776

上記投稿の中でご教示頂いた方法により
Armadillo-IoT G3L、CON5デバッグシリアルインターフェースのフロー制御用端子を
出力のGPIOとして動作させることができました。

ただ、OS起動からアプリが出力のGPIOとして制御を開始するまで
当該端子の出力が安定しませんでした。(0.5V程度が継続)

GPIOの初期値が入力だからでしょうか?
できれば、立ち上げ時はきれいなLOWを出力してほしいのですが
GPIOとしたこの端子の初期値も設定する方法はないでしょうか?

一時回答だけでも返信頂けると幸いです。

コメント

y.nakamura

2019年3月8日 11時48分

中村です。

> 解決扱いになっているのか、以前の投稿に続けた質問に返信が無いので
> 新規投稿させていただきます。
>
> https://users.atmark-techno.com/forum/armadillo/3776

の投稿を読んだときに、
アットマークテクノさんが何か示してくれると期待して、
書かずにいました。すぐに書けばよかったですね。

> できれば、立ち上げ時はきれいなLOWを出力してほしいのですが
> GPIOとしたこの端子の初期値も設定する方法はないでしょうか?
>
> 一時回答だけでも返信頂けると幸いです。

ブートローダーを改造して、ブートローダーでプルダウンに
設定することで可能と思います。

--
なかむら

at_koseki

2019年3月8日 17時26分

古関です。

回答が遅れてしまい申し訳ありません。

kernel起動前だと、以下状況でのピンの状態もケアしなければなりませんね。

(1) 電源投入直後(i.MX7リセット直後のデフォルト設定)
  i.MX7のデータシートを確認しましたが、どちらもGPIO input 100k pulldownのようです。
lowが期待値とのことですので、ここはこのままで良さそうです。
(期待値と逆だったらSoC側より強くハード的にpulldownする必要があったのですが)

(2) ブートローダー起動後の設定
中村様が回答済みですが、
bootloaderは以下の処理を変更すればできると思います。
---------------------------------------------------------------------------------------
board/atmark-techno/x1/x1.c

static iomux_v3_cfg_t const uart5_pads[] = {
MX7D_PAD_GPIO1_IO06__UART5_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
MX7D_PAD_GPIO1_IO07__UART5_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
MX7D_PAD_GPIO1_IO04__UART5_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
MX7D_PAD_GPIO1_IO05__UART5_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
};
---------------------------------------------------------------------------------------

y.nakamura

2019年3月8日 23時56分

中村です。

> (1) 電源投入直後(i.MX7リセット直後のデフォルト設定)
>   i.MX7のデータシートを確認しましたが、どちらもGPIO input 100k pulldownのようです。

なら、ブートローダのRTSとCTSの設定
> MX7D_PAD_GPIO1_IO04__UART5_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
> MX7D_PAD_GPIO1_IO05__UART5_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
をコメントにして初期化しないようにするだけでも
よさそうですね。

--
なかむら

kazukitakahashi

2019年3月11日 12時43分

回答ありがとうございます。

bootloaderの設定がRTS,CTSになっているのは理解できました。

ただ、RTSの端子を使用しておりまして、下の(3)にあたる部分で
なんで0.5Vが出力されるのかがピンときていないのですが、※一度HIGHを出力して入力になるから?
このブートローダーの設定が影響しているのでしょうね。

(1) 電源投入直後     入力GPIO
(2) ブートローダー起動後 RTS,CTS
(3) OS起動       GPIO(入力?)
(4) アプリケーション    出力GPIO

情報提供ありがとうございました。

kazukitakahashi

2019年3月11日 14時52分

linux起動後、アプリケーションで当該GPIOを入力とした場合の出力電圧を計測すると
0.5V出ていました。

なので、HW的に入力GPIO時の出力電圧は0.5Vになるようです。
何か回路的に根拠があれば、情報いただきたいです。

y.nakamura

2019年3月11日 18時29分

中村です。

> linux起動後、アプリケーションで当該GPIOを入力とした場合の出力電圧を計測すると
> 0.5V出ていました。
>
> なので、HW的に入力GPIO時の出力電圧は0.5Vになるようです。
> 何か回路的に根拠があれば、情報いただきたいです。

0.5Vが出力されているのではなく、内部の漏れ電流などによって、
外部からの観測値(計測値)が0.5Vになっているのだと思います。

1kΩ程度の外部プルダウンを付けて電圧を計測すると
違う電圧になるかもしれません。

--
なかむら

at_koseki

2019年3月11日 18時45分

古関です。

以下URLに書かせていただきましたdtbのサンプルだと、外部pulldown前提で書いてしまったため、
SoC側でpulldownしておらず、フローティング状態かもしれません。
https://users.atmark-techno.com/comment/6705#comment-6705

"armadillo_iotg_g3l.dtb" を以下のように修正し、SoCの内部pulldownを有効にすることで対策にならないでしょうか。
---------------------------------------------------------------------
pinctrl_lpsr_uart5: lpsr_uart5grp {
fsl,pins = <
MX7D_PAD_GPIO1_IO07__UART5_DCE_TX 0x00
MX7D_PAD_GPIO1_IO06__UART5_DCE_RX 0x70
MX7D_PAD_GPIO1_IO05__UART5_DCE_RTS 0x10 ※削除
MX7D_PAD_GPIO1_IO05__GPIO1_IO5 0x10 ※追加
MX7D_PAD_GPIO1_IO04__UART5_DCE_CTS 0x00 ※削除
MX7D_PAD_GPIO1_IO04__GPIO1_IO4 0x10 ※追加
>;
};
---------------------------------------------------------------------

y.nakamura

2019年3月11日 19時08分

中村です。

スミマセン、訂正です。

何本か前に
> なら、ブートローダのRTSとCTSの設定
> > MX7D_PAD_GPIO1_IO04__UART5_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
> > MX7D_PAD_GPIO1_IO05__UART5_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
> をコメントにして初期化しないようにするだけでも
> よさそうですね。
と書きましたが、

古関さん:
> 以下URLに書かせていただきましたdtbのサンプルだと、外部pulldown前提で書いてしまったため、
> SoC側でpulldownしておらず、フローティング状態かもしれません。

これを忘れてました。
カーネル起動後にDevicTreeでの設定がありました。

--
なかむら

kazukitakahashi

2019年3月12日 11時14分

古関様に再度回答頂いたDeviceTreeの変更で、入力時の0.5V出力が無くなりました。

また、DeviceTreeだけの修正では起動時3.3Vを出力している時間があったのですが
こちらは古関様、中村様に情報頂いたブートローダーの方の修正で改善されました。

こちらの拙い質問にも対応いただきありがとうございました。