Armadillo-640、Armadillo-IoTゲートウェイA6のUSBインタフェースの電源をGPIOで制御する方法について下記記事でご紹介しております。
Armadillo-640・Armadillo-IoT A6:USB電源を制御する
Armadillo-IoT A6EのUSBインタフェースの電源も、上記記事と同様にデバイスツリーを変更してGPIOで制御することが出来ます。
デバイスツリーの変更
Armadillo-IoT A6Eのデバイスツリーの定義ファイルのうち、USBの制御についての記載があるのは、Linuxカーネルのソース内の以下のファイルです。
arch/arm/boot/dts/armadillo-iotg-a6e.dts
こちらを下記のように編集してください。
①reg_usb_otg1_vbus,の記述を削除
以下を全て削除する reg_usbotg1_vbus: regulator-usbotg1vbus{ (中略) };
②usbotg1を下記のように修正
&usbotg1 { vbus-supply = <®_usbotg1_vbus>; *削除 pinctrl-names = "default"; *追加 dr_mode = "host"; disable-over-current; *削除 status = "okay"; };
以上編集の上、Linuxカーネルをビルドします。
ビルドしたarmadillo-iotg-a6e.dtをArmadillo-IoT A6Eに書き込んで使用してください。
SWUpdateによって書き換えを行う事を推奨します。
GPIOの操作
上記dtbを書き込んだArmadillo-IoT A6Eで、以下のようにGPIOを操作してUSBの電源を制御できます。
GPIOのエクスポート
GPIOをコマンド操作できるようにエクスポートします。
GPIO1のIO19を使用するので、GPIO番号は19となります。
echo 19 > /sys/class/gpio/export
エクスポートしたことで、/sys/class/gpioディレクトリの下に
gpio19ディレクトリが作成されます。
この手順に失敗する場合はdtbが正しく書き換えられていないか、ビルドしたdtbに誤りがある可能性があります。
端子設定
この時点ではGPIO1 IO19は入力端子となっているので出力端子として設定し直します。
エクスポートで作成されたディレクトリ内にあるdirectionファイルに値を書き込むことで設定することが出来ます。
[armadillo]# echo out > /sys/class/gpio/gpio19/direction
電源制御操作
GPIOの値を書き込んで電源のON/OFFを行います。
エクスポートで作成されたディレクトリ内にあるvalueファイルに値を書き込むことで操作することが出来ます。
USBポートの電源をONする際は、以下のように入力します。
[armadillo]# echo 1 > /sys/class/gpio/gpio19/value
同様にUSBポートの電源をOFFする際は、以下のように入力します。
[armadillo]# echo 0 > /sys/class/gpio/gpio19/value
USBポートの電源をOFFにした状態でUSBメモリを接続して、そのままでは認識されないこと、
USBポートの電源をONにすると認識されることを確認します。
[armadillo]# ls /dev/sda* ls: cannot access '/dev/sda*': No such file or directory [armadillo]# echo 1 > /sys/class/gpio/gpio19/value [ 138.580193] usb 1-1: new high-speed USB device number 2 using ci_hdrc [ 138.805791] usb-storage 1-1:1.0: USB Mass Storage device detected [ 138.845777] scsi host0: usb-storage 1-1:1.0 [ 139.931463] scsi 0:0:0:0: Direct-Access Mass Storage Device 1.00 PQ: 0 ANSI: 0 CCS [ 140.058911] sd 0:0:0:0: [sda] 60456960 512-byte logical blocks: (31.0 GB/28.8 GiB) [ 140.090203] sd 0:0:0:0: [sda] Write Protect is off [ 140.095624] sd 0:0:0:0: [sda] No Caching mode page found [ 140.101032] sd 0:0:0:0: [sda] Assuming drive cache: write through [ 140.144816] sda: sda1 sda2 [ 140.155783] sd 0:0:0:0: [sda] Attached SCSI removable disk [ 141.650562] EXT4-fs (sda2): mounting ext3 file system using the ext4 subsystem [ 141.737706] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [armadillo]# ls /dev/sda* /dev/sda /dev/sda1 /dev/sda2