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としたこの端子の初期値も設定する方法はないでしょうか?

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

コメント

中村です。

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

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

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

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

--
なかむら

古関です。

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

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),
};
---------------------------------------------------------------------------------------

中村です。

> (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になるようです。
何か回路的に根拠があれば、情報いただきたいです。

中村です。

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

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

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

--
なかむら

古関です。

以下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 ※追加
>;
};
---------------------------------------------------------------------

中村です。

スミマセン、訂正です。

何本か前に
> なら、ブートローダの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を出力している時間があったのですが
こちらは古関様、中村様に情報頂いたブートローダーの方の修正で改善されました。

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