ブログ

Armadillo-IoT A6E:USB電源を制御する

at_takuma.fukuda
2023年1月10日 6時32分

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 = <&reg_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