ブログ

Armadillo-X1:CON8のUSBでUSBガジェット(シリアル通信/マスストレージ)を使う

at_kazutaka.bito
2020年8月31日 18時06分

Armadillo-X1で、CON8(拡張インタフェース)のUSB(USB_OTG2)で
USBガジェット(シリアル通信/マスストレージ)を使う方法です

ここでは、動作確認にあたり、Armadillo-X1と Armadillo-X1評価用拡張ボードセット01 を組み合わせた方法を説明します。

1. USBガジェットドライバの有効化

カーネルコンフィギュレーションで、USBガジェット(シリアル通信/マスストレージ)を有効にします。

Kernel Configuration
Device Drivers
  USB support
   USB Gadget Support
    <*>   USB Gadget Drivers
     (X) CDC Composite Device (ACM and mass storage)

上記設定後、ビルドします。
ここでは、ビルドにより生成された下記のカーネルと、評価用拡張ボードUSBデバイス用DTBのイメージファイルを使用します。

linux-4.9-x1-at[version]/arch/arm/boot/uImage
linux-4.9-x1-at[version]/arch/arm/boot/dts/armadillo_x1-extboard-eva01-usbdevice.dtb


2. Armadillo-X1+評価用拡張ボードの準備

参考)この項目の説明では、下記情報を参考にしています。
Armadillo-X1製品マニュアル(19.10. Armadillo-X1評価用拡張ボードセット01)
Armadillo-X1製品マニュアル(21.8. Armadillo-X1 評価用拡張ボードを使用する)
Armadillo-X1:評価用拡張ボード(SA-AX1-EXTEVA-01)入門

2.1. 評価用拡張ボード用ブートローダーのイメージをダウンロードする

Armadillo-X1 評価用拡張ボードセット01 イメージファイルのサイトから評価用拡張ボード対応ブートローダー(※)を
Armadillo-X1にダウンロードします。
※)u-boot-x1-fec1-en-at[version].binという名前のイメージファイル([version]の箇所はバージョンによる)

カーネル、DTBは、手順1でビルドしたイメージファイルをArmadillo-X1に置きます。

以降の説明にて、各イメージファイル名は、下記のように表記します。

ブートローダー: u-boot-x1-fec1-en-at[version].bin
USBデバイス用DTB: armadillo_x1-extboard-eva01-usbdevice.dtb
カーネル: uImage


2.2. カーネル、DTBを書き換える
[armadillo ~]# mount /dev/mmcblk2p1 /mnt
[armadillo ~]# cp uImage /mnt/uImage
[armadillo ~]# cp armadillo_x1-extboard-eva01-usbdevice.dtb /mnt/armadillo_x1.dtb
[armadillo ~]# umount /mnt


2.3. 評価用拡張ボード対応ブートローダーをインストールする
[armadillo ~]# x1-bootloader-install u-boot-x1-fec1-en-at[version].bin

補足)[version]の箇所は、手順2.1でダウンロードしたイメージファイル名に読み替えます。

3. Armadillo-X1を再起動

Armadillo-X1を保守モードで起動します。
u-bootの設定で、USBガジェット(シリアル通信/マスストレージ)を有効にします。

=> setenv optargs g_acm_ms.removable=1
=> boot

補足)上記設定を保存する場合は、saveenvを実行してからbootします。

4. USBガジェット(シリアル通信/マスストレージ)を使用してみる

評価用拡張ボードのCON6(USB Micor-ABコネクタ)とPCをUSBケーブルで接続します。

参考) Armadillo-X1製品マニュアル(図19.25 Armadillo-X1評価用拡張ボード インターフェースレイアウト)
補足)評価用拡張ボードのCON6は、Armadillo-X1のCON8(拡張インタフェース)のUSB(USB_OTG2)に接続されています。

4.1. シリアル通信の使用例

Armadillo-X1は、USBガジェットのシリアル通信のデバイスファイルは、/dev/ttyGS0という名前で見えます。
デフォルトのボーレートは、115200になっています。

ここでは、PCのシリアル通信ソフト(Teraterm等)と通信してみます。
PCのシリアル通信ソフトを起動し、USBシリアルデバイスとして見えているCOMポートを指定します。
シリアル通信ソフトのボーレートを115200に設定します。

PC→Armadillo-X1の確認の場合は、Armadillo-X1のコンソールで下記コマンドを実行しておきます。

[armadillo ~]# cat /dev/ttyGS0

PCのシリアル通信ソフトで文字を入力し、Enterを入力すると、Armadillo-X1のコンソールに文字が表示されます。

Armadillo-X1→PCの確認の場合は、Armadillo-X1のコンソールで下記コマンドを実行します。

[armadillo ~]# echo sample > /dev/ttyGS0

PCのシリアル通信ソフトに、sampleという文字が表示されます。

4.2. マスストレージの使用例

ここでは、Armadillo-X1にRAMDISKを作成し、PCからこのRAMDISKにマスストレージとしてアクセスします。

Armadillo-X1で、/dev/shm下に64MBのファイルを作成します。
補足)/dev/shmはRAM上にあるファイルです(tempfs)

[armadillo ~]# dd if=/dev/zero of=/dev/shm/file bs=1M count=64


fatでフォーマットします。

[armadillo ~]# mkfs.vfat -F 32 /dev/shm/file


RAMDISK(/dev/shm/file)をマウントして、ファイル(ここでは、サンプルとしてaaaa.txt)を作成しておきます。

[armadillo ~]# mount /dev/shm/file /mnt
[armadillo ~]# echo aaaa > /mnt/aaaa.txt


RAMDISK(/dev/shm/file)をマスストレージとして見えるようにします。

[armadillo ~]# echo /dev/shm/file > /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/gadget/lun0/file


PCからArmadillo-X1の/dev/shm/fileがマスストレージと見えます。
上記の手順にて作成したaaaa.txtというファイルが見えます。

備考)
マスストレージで接続中にArmadillo-X1でファイル追加、変更等の更新しても、PCのディスクキャッシュの情報は更新されないため、
マスストレージ内のファイル更新の変化が見えません。
PCで更新後のマスストレージを見る場合は、PCでディスクキャッシュをクリアする(※1)か、
下記のようにArmadillo-X1で再接続する(※2)、などが必要になります。
※1)PCにこの機能があるのであれば。
※2)PCからは突然切断されることになるため、運用上、不都合がないかは検証が必要。

[armadillo ~]# echo > /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/gadget/lun0/file
[armadillo ~]# echo /dev/shm/file > /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/gadget/lun0/file