Armadilloフォーラム

リセット解除後のGPIOの信号状態について

kamedatomonobu

2021年11月12日 16時33分

お世話になります。

GPIOについてリセット解除後の信号状態について、
変更することは可能でしょうか?
可能であれば方法をご教授頂きたいです。

具体的には、Armadillo-X1 CON7(37)
GPIO4_IO5(UART3_TXD)をOUT(又は、InでPull-UP)の状態に固定にしたいです。

コメント

アットマークテクノの古賀です。

kamedatomonobuさん:
>GPIOについてリセット解除後の信号状態について、
>変更することは可能でしょうか?
>可能であれば方法をご教授頂きたいです。
>
>具体的には、Armadillo-X1 CON7(37)
>GPIO4_IO5(UART3_TXD)をOUT(又は、InでPull-UP)の状態に固定にしたいです。

Armadillo-X1 の CPU リセット直後の UART3_TXD 端子の状態を、OUT 固定(1/High 出力固定?)や、入力でプルアップ有りに固定することは、CPU の仕様上不可能です。ブートローダー(u-boot)で設定変更することは可能ですが、ブートローダーが実行開始して設定変更するまでの間は、リセット直後の設定値を反映した「入力、100kΩ プルダウン」の状態になると思います。

# i.MX 7 Dual のリファレンスマニュアルで、"8.3.5.2 GPIO directioal register (GPIOx_GDIR)" と、
# "8.2.7.75 SW_MUX_CTL_PAD_UART3_TX_DATA SW MUX Control Register (IOMUXC_SW_MUX_CTL_PAD_UART3_TX_DATA)"、
# および "8.2.7.231 SW_PAD_CTL_PAD_UART3_TX_DATA SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_UART3_TX_DATA)" をご覧ください。

もし、CPU がリセットした後、ブートローダーが実行開始して UART3_TXD 端子の設定変更するまでの間だけであれば「In で Pull-Down」の状態になることが許されるのであれば、ソフトウェアで対応可能です。しかし、それが許されない場合は、たとえば、出力をプルアップしたトライステートバッファを UART3_TXD の先に付けるなど、ハードウェアと組み合わせた対応が必要になるかと思います。

いかがでしょうか?

アットマークテクノ古賀様

ご回答ありがとうございました。
ブートローダーで試してみたいと思います。

> Armadillo-X1 の CPU リセット直後の UART3_TXD 端子の状態を、OUT 固定(1/High 出力固定?)や、入力でプルアップ有りに固定することは、CPU の仕様上不可能です。ブートローダー(u-boot)で設定変更することは可能ですが、ブートローダーが実行開始して設定変更するまでの間は、リセット直後の設定値を反映した「入力、100kΩ プルダウン」の状態になると思います。
>
> # i.MX 7 Dual のリファレンスマニュアルで、"8.3.5.2 GPIO directioal register (GPIOx_GDIR)" と、
> # "8.2.7.75 SW_MUX_CTL_PAD_UART3_TX_DATA SW MUX Control Register (IOMUXC_SW_MUX_CTL_PAD_UART3_TX_DATA)"、
> # および "8.2.7.231 SW_PAD_CTL_PAD_UART3_TX_DATA SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_UART3_TX_DATA)" をご覧ください。
>
> もし、CPU がリセットした後、ブートローダーが実行開始して UART3_TXD 端子の設定変更するまでの間だけであれば「In で Pull-Down」の状態になることが許されるのであれば、ソフトウェアで対応可能です。しかし、それが許されない場合は、たとえば、出力をプルアップしたトライステートバッファを UART3_TXD の先に付けるなど、ハードウェアと組み合わせた対応が必要になるかと思います。
>
> いかがでしょうか?

アットマークテクノ古賀様

ブートローダーですが、
ソースダウンロードしました。
内容確認中ですが、
修正箇所をご教授頂けないでしょうか?
(設定を追記する必要があると考えています。)

> > # i.MX 7 Dual のリファレンスマニュアルで、"8.3.5.2 GPIO directioal register (GPIOx_GDIR)" と、
> > # "8.2.7.75 SW_MUX_CTL_PAD_UART3_TX_DATA SW MUX Control Register (IOMUXC_SW_MUX_CTL_PAD_UART3_TX_DATA)"、
> > # および "8.2.7.231 SW_PAD_CTL_PAD_UART3_TX_DATA SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_UART3_TX_DATA)" をご覧ください。

アットマークテクノの古賀です。

kamedatomonobuさん:
>ブートローダーですが、
>ソースダウンロードしました。
>内容確認中ですが、
>修正箇所をご教授頂けないでしょうか?
>(設定を追記する必要があると考えています。)

board/atmark-techno/x1/ にある x1.c で実装している board_early_init_f() に実装を追加することになるかと思います。
この関数から直接および間接的に呼び出している imx_iomux_v3_setup_multiple_pads() は、
 arch/arm/imx-common/iomux-v3.c
で実装されています。これと、
 arch/arm/include/asm/arch-mx7/mx7d_pins.h
で定義されている、各ピンごとの信号割り当て設定のマクロをご覧になって下さいませ。

アットマークテクノ
古賀様

実装方法についてご教授ありがとうございました。
リセット時のGPIOのLOW時間を短くすることができました。
ありがとうございました。