ブログ

Armadillo-X1:拡張I/FのUARTを使用する方法

at_kazutaka.bito
2017年4月3日 16時33分

Armadillo-X1の拡張I/F(CON8)のUARTを使用する方法です。
Armadillo-X1マルチプレクス表より、使用するCON8の端子番号と機能の相関は下記のとおりとしました。
※)下記設定にはRTS/CTSを含んでいますが、今回はRTS/CTSの動作確認は行っていません。

UART(UART1)
 24:CTS
 25:RTS
 26:RX
 27:TX

UART(UART2)
 72:RX
 73:TX
 74:RTS
 75:CTS

UART(UART4)
 62:RTS
 63:CTS
 64:TX
 65:RX

下記手順にて、カーネル"linux-3.14-x1-at[version]"の[version]の部分は、 ご使用のカーネルのバージョンに読み替えてください。

1.カーネルのビルド準備

Armadillo-X1製品マニュアル 10.2. Linuxカーネルをビルドする を参考に、カーネルをビルドする環境を用意します。

2.Device Tree Sourceで端子設定

UARTの機能を設定したDevice Tree Sourceを準備します。

linux-3.14-x1-at[version]/arch/arm/boot/dts/ に添付の x1_uart124_dts_20170403.zip 内の
Makefile
armadillo_x1.dts
armadillo_x1-uart124_user1.dts
を置いてください。

補足)
armadillo_x1-uart124_user1.dts:UART1,UART2,UART4を設定しています。

armadillo_x1.dts
 armadillo_x1-uart124_user1.dtsのUART1,UART2,UART4の設定(&pinctrl_uart1 &pinctrl_uart2 &pinctrl_uart4)
 を追加したものです。
 標準のarmadillo_x1.dtsについて、
  pinctrl-0 = <&pinctrl_hog_1>;
 を
  pinctrl-0 = <&pinctrl_hog_1 &pinctrl_uart1 &pinctrl_uart2 &pinctrl_uart4>;
 に変更してます。

Makefile
 armadillo_x1-ecspi3_uartx3.dtsをビルドすることを追加したものです。
 標準のMakefileについて、
armadillo_x1-ecspi4_mcp3202.dtb \
 の下に
armadillo_x1-uart124_user1.dtb \
 を追加しています。

3.カーネルコンフィギュレーション

今回の用法ではデフォルトのままの設定にします。

atmark@atde6:~/linux-3.14-x1-at[version]$ make ARCH=arm x1_defconfig

4.ビルド

ビルドします。

atmark@atde6:~/linux-3.14-x1-at[version]$ make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm
atmark@atde6:~/linux-3.14-x1-at[version]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage

5.Armadillo-X1のカーネル、DeviceTreeの変更

5.1.上記の手順で4ビルドされた
linux-3.14-x1-at[version]/arch/arm/boot/uImage
linux-3.14-x1-at[version]/arch/arm/boot/dts/armadillo_x1-uart124_user1.dtb
をArmadillo-X1に置きます。

5.2.カーネルイメージ変更します。
(以下は、ホームディレクトリにuImageを置いてある場合)

root@armadillo:~# mount -t vfat /dev/mmcblk2p1 /mnt
root@armadillo:~# cp uImage /mnt/uImage
root@armadillo:~# umount /mnt

5.3.armadillo_x1-uart124_user1.dtb(UART1,UART2,UART4を設定したDTB)を追加します。
(以下は、ホームディレクトリにarmadillo_x1-uart124_user1.dtbを置いてある場合)

root@armadillo:~# mount -t vfat /dev/mmcblk2p1 /mnt
root@armadillo:~# cp armadillo_x1-uart124_user1.dtb /mnt/
root@armadillo:~# umount /mnt

6.DeviceTreeの選択

保守モードで、armadillo_x1-uart124_user1.dtb(UART1,UART2,UART4を設定したDTB)を選択します。

6.1.電源を落とします。

root@armadillo:~# halt

を実行後、電源を落とします。

6.2.保守モードで起動します。
Armadillo-X1製品マニュアル 図4.8 スライドスイッチの設定 を参考に保守モードにスイッチを設定して、電源を入れます。

6.3.armadillo_x1-uart124_user1.dtb(UART1,UART2,UART4を設定したDTB)を選択します。

=> setenv fdt_file armadillo_x1-uart124_user1.dtb
=> saveenv

6.4.通常モード(オートブートモード)で再起動します。

電源を落とします。
Armadillo-X1製品マニュアル 図4.8 スライドスイッチの設定 を参考にオートブートモード側にスイッチを設定して、電源を入れます。

以上で、拡張I/F(CON8)で、UART1,UART2,UART4が使用できるようになります。

各UARTは、下記のように"dev/ttymxc*"というデバイスファイルとして見えます。
UART1:/dev/ttymxc0
UART2:/dev/ttymxc1
UART4:/dev/ttymxc3