Armadilloフォーラム

Armadillo-IoT G3でUART2を使用したい。

kenhoriuchi

2024年8月8日 18時36分

ArmadilloーIoT-G3を使って、UART2で別の制御ボードとシリアル通信をしたいと思っています。
利用する信号は、CON1の7番、8番です。DTSを変更して、カーネルの再構築を行う必要があることはわかったのですが、
今のところうまくいっていません。

やったこと:
1.VMwareのインストールとATDE8環境の構築
2.カーネルソース「linux-4.9-x1-at35.tar.gz」の展開とビルド
3.DTSの変更
  X1用のサンプルを参考にして、
  armadillo_iotg_g3_m1-uart2_user1.dts
  armadillo_iotg_g3_m1_1.dts
  Makefile
  を作成
4.カーネルのリビルド
5.uImageとarmadillo_iotg_g3_m1.dtbを/dev/mmcblk2p1にコピーして
  リブート

結果:
 ブート時に以下のようなエラーが発生して/dev/ttymxc1が作成されません。
mx7d-pinctrl 30330000.iomuxc: pin MX7D_PAD_LCD_VSYNC already requested by 30330000.iomuxc; cannot claim for 30890000.serial
imx7d-pinctrl 30330000.iomuxc: pin-48 (30890000.serial) status -22
imx7d-pinctrl 30330000.iomuxc: could not request pin 48 (MX7D_PAD_LCD_VSYNC) from group uart2grp on device 30330000.iomuxc
imx-uart 30890000.serial: Error applying setting, reverse things back
imx-uart: probe of 30890000.serial failed with error -22

コメント

at_dominique.m…

2024年8月13日 9時00分

kenhoriuchiさん

お世話になっています、
マルティネです。

> ArmadilloーIoT-G3を使って、UART2で別の制御ボードとシリアル通信をしたいと思っています。
> 利用する信号は、CON1の7番、8番です。

了解しました。

> DTSを変更して、カーネルの再構築を行う必要があることはわかったのですが、今のところうまくいっていません。

(カーネルの再構築で問題ないですが、必要もありません。dts の変更だけでいいです。)

> 結果:
>  ブート時に以下のようなエラーが発生して/dev/ttymxc1が作成されません。
> mx7d-pinctrl 30330000.iomuxc: pin MX7D_PAD_LCD_VSYNC already requested by 30330000.iomuxc; cannot claim for 30890000.serial
> imx7d-pinctrl 30330000.iomuxc: pin-48 (30890000.serial) status -22
> imx7d-pinctrl 30330000.iomuxc: could not request pin 48 (MX7D_PAD_LCD_VSYNC) from group uart2grp on device 30330000.iomuxc
> imx-uart 30890000.serial: Error applying setting, reverse things back
> imx-uart: probe of 30890000.serial failed with error -22

このエラーは、同じ pin を二回使われてると意味します。。

dts の作りに include を使って大変分かりづらいことになっていますが、armadillo_iotg_g3_m1_1.dts に armadillo_iotg_addon.dtsi を include していて、そちらの intf1_gpios に同じ pin を gpio として登録しています:

                intf1-gpios = <0>,              /* CON1_1:  D.G. */
[...]
                             <&gpio3  2 0>,     /* CON1_5:  LCD_HSYNC */
                             <&gpio3  3 0>,     /* CON1_6:  LCD_VSYNC */
                             <&gpio4  2 0>,     /* CON1_7:  UART2_RXD */
                             <&gpio4  3 0>,     /* CON1_8:  UART2_TXD */

こちらの各 <&gpioX Y Z><0> に変更していただければこのエラーがなくなると思います。

この変更で、 u-boot の環境変数で console=ttymxc... のパラメターを調整すれば linux の出力に関してはこれで完了だと思います。

u-boot の出力自体もありますので、u-boot にも同様の変更が必要になります。
確認してませんが、おそらく include/configs/x1.h の CONFIG_MXC_UART_BASE を変更して、 board/atmark-techno/x1/x1.c の setup_iomux_uart() で pinctrl を設定すれば問題ないと思います。

また何かエラーになった場合にまたご連絡ください。

よろしくお願いします。

kenhoriuchi

2024年8月13日 11時18分

ありがとうございます。

大変参考になりました。
本件は、別口で助言をいただいて、armadillo_iotg_g3_m1_1.dtsの

&iomuxc {
pinctrl-names = "default";
/* pinctrl-0 = <&pinctrl_hog>; */
pinctrl-0 = <&pinctrl_hog &pinctrl_uart2>;

&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog>;

に戻すことにより解決しました。

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

at_dominique.m…

2024年8月13日 12時42分

kenhoriuchiさん

> 大変参考になりました。
> 本件は、別口で助言をいただいて、armadillo_iotg_g3_m1_1.dtsの
> &iomuxc {
> pinctrl-names = "default";
> /* pinctrl-0 = <&pinctrl_hog>; */
> pinctrl-0 = <&pinctrl_hog &pinctrl_uart2>;
>
> を
>
> &iomuxc {
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_hog>;
>
> に戻すことにより解決しました。

返事が遅くなって申し訳ございません。

con1_7/8 は uart2 のデフォルトの pin ですので設定しなくても確かに動くかと思いますが、
万が一にデフォルトの設定に変更があった場合に明確に設定した方が安全です。

こういう設定の変更例が過去になかった認識ですし、
Armadillo IoT G3 に使用している i.MX7d はやや古い製品ですので今更変更されないと思いますので理想の話になりますが、
今後に時間を見つけた場合にまた試してみてください。

よろしくお願いします。