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