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…
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
ありがとうございます。
大変参考になりました。
本件は、別口で助言をいただいて、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…
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 はやや古い製品ですので今更変更されないと思いますので理想の話になりますが、
今後に時間を見つけた場合にまた試してみてください。
よろしくお願いします。
kenhoriuchi
2024年8月8日 18時40分
添付ファイルを忘れました。