OTGをUディスクモードに切り替える
1.1. 本文紹介
1.1. 1 OTGをUSBモードに切り替える
OTGのUSBモード切り替えにより、開発ボードがHOST(ホスト)としてもDevice(デバイス:Uディスク等)としても機能するようになり、データ転送効率が向上します。

1.1.1 OTGをUSBモードに切り替える 図1
1.1.2 OTGの基本概念
OTGは「USB On-The-Go」の略称であり、2001年にUSB標準化団体によって発表されたUSB機能を拡張する技術規格です。そのコアとなるのは、従来のUSBの「ホストとデバイスが固定されている」という制限を打破し、異なるデバイス間の接続とデータ交換を改善することです。これにより、デバイス(開発ボード、スマートフォン、タブレットなど)がホストとして周辺機器を接続することも、デバイス(スレーブ)として他の機器からアクセスされることも可能になります。

11.1. 2 OTGの基本概念 図2
1.2. Linuxカーネルドライバの設定とコンパイル
1.2.1 最新ファームウェアへのアップグレード
1.2.2 UbuntuシステムSDKのダウンロード
1.2.3 カーネルの変更
Device Drivers --->[ ] USB support ---><*> DesignWare USB2 DRD Core Support(RV1126Bはデフォルトでこのコアドライバをサポート)DWC2 Mode Selection (Dual Role mode) --->(デュアルロールモードを選択)<*> USB Gadget Support --->(デフォルトを保持)Maximum VBUS Power usage (2-500 mA) を 500 に設定(デフォルトを保持)Number of storage pipeline buffers を 2 に設定<M> USB functions configurable through configfs [*] Mass storage(マスストレージ機能を有効にする) <M> Gadget Filesystem< > Function Filesystem<M> Mass Storage Gadgetカーネル内で対応するドライバ設定を見つけ、以下のようにRV1126b_eai.config`に追加してください。

11.2. 3 カーネルの変更 図3
💡 注意 :RV1126b_eai.config`はkernel_dev/arch/arm64/configs ディレクトリにあります。
1.2.4 カーネルモジュールのコンパイルと生成
💡 注意 : 忘れずにlib_modules.tar.gz`を開発ボードに転送して解凍してください。 コンパイルと更新が完了すると、開発ボードの指定ディレクトリに以下の4つの重要なモジュールが生成されます。
drivers/usb/gadget/libcomposite.kodrivers/usb/gadget/legacy/gadgetfs.kodrivers/usb/gadget/legacy/g_mass_storage.kodrivers/usb/gadget/function/usb_f_mass_storage.ko所在ディレクトリ:/lib/modules/6.1.141/kernel/drivers/usb/…
【コンパイル・更新前】

1.2.4 カーネルモジュールのコンパイルと生成 図4
【コンパイル・更新後】

1.2.4 カーネルモジュールのコンパイルと生成 図5
💡 注意 : 更新が完了するとadbは無効になります。シリアルコンソールまたはsshを使用してデバッグを行ってください
1.3. OTG USBメモリ切り替え設定
1.3.1 USBメモリイメージファイルの作成とマウントポイント
以下のコマンドを実行して1.6GBの仮想USBメモリイメージを作成します(RV1126Bのメモリサイズに応じて調整可能です。メモリが少ない場合はcount値を減らしてください。例:count=800で0.8GBになります):
dd if=/dev/zero of=/userdata/mydisk/udisk.img bs=1M count=1600依存ツールをインストールします:
sudo apt-get update && sudo apt-get install dosfstools -yPCで認識可能な vfat形式でイメージをフォーマットします:
mkfs.vfat /userdata/mydisk/udisk.img1.3.2 モジュールのロードとUSBメモリシミュレーションの起動
イメージファイルを loop デバイスにバインドします(RV1126Bは `loop7`デバイスをサポートしており、追加の設定は不要です):
sudo losetup /dev/loop7 /userdata/mydisk/udisk.imgコンパイルで生成されたカーネルモジュールを順次ロードします:
sudo insmod gadgetfs.kosudo insmod libcomposite.kosudo insmod usb_f_mass_storage.ko💡 注意 : 上記のコマンドは実行後にメッセージは表示されません。必ず上記の順序通りに実行してください。
所在ディレクトリ:/lib/modules/6.1.141/kernel/drivers/usb/…
イメージファイルのマウントポイントを作成します:
sudo mkdir /mnt/udisk作成したディレクトリにイメージファイルをマウントします:
sudo mount /dev/loop7 /mnt/udiskUSBメモリシミュレーション機能を起動します(実行後、PC上で新しいUSBデバイスが検出されたという通知が出ます):
sudo insmod g_mass_storage.ko file=/dev/loop7 removable=11.4. 機能テスト
基本的なデータ送受信テスト
1. PC側: USBケーブルで Nano-TB RV1126B 開発ボードのOTGインターフェースとPCを接続し、通常のUSBメモリと同じようにファイルの読み書きができます。
2. 開発ボード側: /mnt/udisk ディレクトリに入ると、PCからUSBメモリにコピーされたファイルを確認できます。このディレクトリにファイルを書き込んだ後、USBケーブルを抜き差しすることでPC側にも反映されます。
1.4.1 注意事項
1. PCでファイルを書き込んだ後、開発ボード側で表示されない場合:
sudo umount /mnt/udisk && sudo mount /dev/loop7 /mnt/udiskを実行して再マウントしてください。
2. 開発ボードでファイルを書き込んだ後、PC側で表示されない場合:
USBケーブルを一度抜き差しして更新してください。
3. マスストレージモードを起動して開発ボードをUSBメモリとして使用している場合、**adb機能は無効になります**。
2. USB OTGモード
2.1. USB OTGの概要
USB OTG(On-The-Go)はUSBプロトコルの拡張規格であり、従来のUSBが「ホスト(HOST)-デバイス(Peripheral/Device)」の一方向接続しかできないという問題を解決するものです。EASY-EAI-Nano-TB開発ボードのUSB OTGインターフェースは、HOSTモードとPeripheralモードの柔軟な切り替えをサポートしています。デフォルトでOTGモードとして設定でき、システムコマンドを使用して動作モードを迅速に変更することで、さまざまなシナリオにおけるデバイス接続のニーズ(USBメモリ、キーボード・マウスなどの周辺機器への接続や、スレーブデバイスとしてPCと通信するなど)を満たすことができます。
2.2. デフォルトのOTGモード
EASY EAI Nano USBリソースの紹介

2.2. デフォルトのOTGモード 図1
以下のファームウェアを使用して開発を行うと、デフォルトでUSB OTGモードとして構成されます:
現在のOTGモードを確認する:
cat /sys/devices/platform/21400000.usb2-phy/otg_mode2.2.1 HOSTモードへの切り替え
しかし、USBメモリやその他のUSBデバイスを接続して使用したい場合など、特定のシナリオではUSBインターフェースをUSB HOSTとして切り替える必要があります。その場合は、以下の手順に従って切り替えてください。 まず、USBインターフェースに接続されているデバイスを【すべて取り外し】ます。その後、【シリアルコンソール(シリアルデバッグ)】(ボーレート:1500000)を使用してボードのコンソールにログインします。ユーザー名はnano、パスワードは 123456`です。 次に以下のコマンドを実行することで、USBインターフェースをHOSTモードに切り替えることができます:
echo host \> /sys/devices/platform/21400000.usb2-phy/otg_mode現在のHOSTモードを確認する:
cat /sys/devices/platform/21400000.usb2-phy/otg_mode
2.2.1 HOSTモードへの切り替え 図2
USBデバイス(USBメモリを例とします)を使用して検証します。USBメモリを挿入した後、以下の2つの方法で検証できます:
1 lsusbコマンド

2.2.1 HOSTモードへの切り替え 図3
2 lsblk コマンド

12.2.1 HOSTモードへの切り替え 図4
2.2.2 Deviceモードへの切り替え
USB Deviceモードに戻して使用したい場合は、HOSTモードへの切り替えと同様の操作でDeviceモードに切り替えることができます。まず同様に、USBインターフェースに接続されているデバイスを【すべて取り外し】ます。その後、以下のコマンドを実行してUSB Deviceモードに切り替えます:
echo peripheral \> /sys/devices/platform/21400000.usb2-phy/otg_mode
2.2.2 Deviceモードへの切り替え 図5
最後にADBケーブルを接続し、`adb shell`を使用してADB環境に入り、確認を行います。
💡 注意 :Deviceモードに切り替えた際、ADBはすぐには有効になりません。adb shellコマンドでADB環境にアクセスできるようになるまで、1分ほど待つ必要があります。