Armadilloフォーラム

USB-CDC-ECMモードとUSB-MSCモードの切替

dn106045

2020年7月9日 17時11分

飯島と申します。

armadillo-X1のUSB端子に自社の制御装置を接続し、通常はUSB-CDC-ECMモードでTCP/IP通信の対向機として動作させておき、
あるタイミングでUSB-MSCモードに切り替えてダウンロードプログラムの格納先として利用したいと考えております。
このような制御をarmadilloで実現できますでしょうか?また、できるようであればその手順をご教授いただけませんでしょうか?

コメント

at_makoto.sato

2020年7月10日 12時04分

佐藤です。

> armadillo-X1のUSB端子に自社の制御装置を接続し、通常はUSB-CDC-ECMモードでTCP/IP通信の対向機として動作させておき、
上記で書かれているUSB端子が、armadillo-X1基板上の1ポートUSBコネクタ(CON2)を指しているのであれば、できません。
CON8から出ているUSB_OTG2ピン(47,48,50ピン)を使用する場合は可能かと思います。

以下、CON8を使用する場合の手順です。
1. カーネルビルド時のコンフィグレーションで以下を有効にしてビルドします。
DeviceDrivers -->
[*] USB support -->
<*> USB Gadget Support -->
<*> USB Gadget Drivers (Multifunction Composite Gadget)
Multifunction Composite Gadget
[ ] RNDIS + CDC Serial + Storage configuration
-*- CDC Ethernet + CDC Serial + Storage configuration

2. ビルドしてできた以下のイメージをarmadillo-X1へ転送し書き換えます
 ・uImage
 ・armadillo_x1-extboard-eva01-usbdevice.dtb
ビルド方法やイメージの書き換え方法はマニュアルを参照してください。
https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…

3. 保守モードで起動し、以下のようにlinuxを起動します

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

起動後に以下のようにするとマスストレージとして見せるパーティションを指定できます。
※/dev/mmcblk2p1 を指定する例です。

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

また、Ethernetはusb0という名前のインターフェスとなっているかと思います。

USBマスストレージとしてPC等に接続して使用している場合、armadillo-X1側とPC側から
同時にマスストレージ用パーティションに書き込みを行いますとファイルシステムが破損する恐れがありますのでご注意ください。

dn106045

2020年7月10日 13時05分

飯島です。

佐藤様、早速のアドバイスありがとうございます。

USB端子は、ご指摘いただいた通り CON8から出ているUSB_OTG2ピン(47,48,50ピン)の使用を考えております。
カーネルのコンフィグレーションについては、社内の識者とも相談しながら試しみたいと思います。

> 佐藤です。
>
> > armadillo-X1のUSB端子に自社の制御装置を接続し、通常はUSB-CDC-ECMモードでTCP/IP通信の対向機として動作させておき、
> 上記で書かれているUSB端子が、armadillo-X1基板上の1ポートUSBコネクタ(CON2)を指しているのであれば、できません。
> CON8から出ているUSB_OTG2ピン(47,48,50ピン)を使用する場合は可能かと思います。
>
> 以下、CON8を使用する場合の手順です。
> 1. カーネルビルド時のコンフィグレーションで以下を有効にしてビルドします。
> DeviceDrivers -->
> [*] USB support -->
> <*> USB Gadget Support -->
> <*> USB Gadget Drivers (Multifunction Composite Gadget)
> Multifunction Composite Gadget
> [ ] RNDIS + CDC Serial + Storage configuration
> -*- CDC Ethernet + CDC Serial + Storage configuration
>
> 2. ビルドしてできた以下のイメージをarmadillo-X1へ転送し書き換えます
>  ・uImage
>  ・armadillo_x1-extboard-eva01-usbdevice.dtb
> ビルド方法やイメージの書き換え方法はマニュアルを参照してください。
> https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…
>
> 3. 保守モードで起動し、以下のようにlinuxを起動します
>

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

>
>
> 起動後に以下のようにするとマスストレージとして見せるパーティションを指定できます。
> ※/dev/mmcblk2p1 を指定する例です。
>

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

> また、Ethernetはusb0という名前のインターフェスとなっているかと思います。
>
> USBマスストレージとしてPC等に接続して使用している場合、armadillo-X1側とPC側から
> 同時にマスストレージ用パーティションに書き込みを行いますとファイルシステムが破損する恐れがありますのでご注意ください。