Armadilloフォーラム

接続したUSBメモリが認識されない

salt_009

2023年12月19日 18時11分

お世話になっております。

現在、Armadillo610を弊社で開発したIOボード上に搭載し、
開発を行っております。

IOボードには、TypeAのUSBポートが一つあり、
開発ボードのCON6のUSB_IDのみが省かれた状態で接続されています。
そして、GPIO1_IO19がLOWのときに電源が供給される回路になっています。

この状態でArmadillo起動中にUSBメモリを接続しても認識しません。
また、USBメモリを挿入した状態で起動させても同様に認識しません。
下記リンクに関連があるのでしょうか?
https://armadillo.atmark-techno.com/forum/armadillo/15246

また、仕様上ブート時にUSBメモリを読む必要があり、
確認のためブートローダーでusb startを行うと

=> usb start
starting USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... EHCI timed out on TD - token=0x80008d80
 
      USB device not accepting new address (error=22)
1 USB Device(s) found
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found

といったログが表示されUSBメモリを読めていないような動作になります。
こちらはブートローダーの設定等を変更する必要があるのでしょうか。

コメント

松坂です。

> 下記リンクに関連があるのでしょうか?
> https://armadillo.atmark-techno.com/forum/armadillo/15246

上記についての注意事項を以下の通りリリースしていますが、適用済みでしょうか。

「Armadillo-610 開発セットでUSBデバイスを認識しない現象について」
https://armadillo.atmark-techno.com/change_notification/2023-014

> IOボードには、TypeAのUSBポートが一つあり、
> 開発ボードのCON6のUSB_IDのみが省かれた状態で接続されています。
> そして、GPIO1_IO19がLOWのときに電源が供給される回路になっています。
> この状態でArmadillo起動中にUSBメモリを接続しても認識しません。

開発ボードでのVBUS電源スイッチの論理は以下の通りになっています。

・GPIO1_IO19がHighでVBUS電源が供給
・GPIO1_IO19がLow でVBUS電源が遮断

お客様の回路では「GPIO1_IO19がLOWのときに電源が供給される回路」のため、
U-BootおよびLinuxでのVBUS電源制御をActive HighからActive Lowに変更する必要があります。

U-Bootでは以下の箇所を修正する必要があります。

■ソースファイル
/board/atmark-techno/armadillo-640/board_usb.c

■修正箇所(※)

int board_ehci_power(int port, int on)
{
	int ret = -ENODEV;
 
	debug("port %d %s\n", port, on ? "on" : "off");
	switch (port) {
	case 0:
		ret = gpio_set_value(to_gpio(port), !!on);  ※感嘆符を「!!」から「!」に変更してください
		break;
	case 1:
		ret = gpio_set_value(to_gpio(port), !!on);
		break;
	default:
		break;
	}
 
	if (ret < 0)
		ret = -ENODEV;
 
	return ret;
}

Linuxでは以下の箇所を修正する必要があります。

device treeでのUSBモード設定が「otg」になっていると、USB_IDピンを見てホストモード、デバイスモードを切り替える機能が働いてしまうので、ホストのみで使用する場合は、USBを「host」モードにする必要があります。

■ソースファイル
/arch/arm/boot/dts/armadillo-610-extboard-eva-common.dtsi

■修正箇所1(※)

		reg_usbotg1_vbus: regulator-usbotg1vbus {
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_usbotg1_vbus>;
			compatible = "regulator-fixed";
			regulator-name = "USB_OTG1_VBUS";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio1 19 GPIO_ACTIVE_HIGH>;  ※GPIO_ACTIVE_HIGHをGPIO_ACTIVE_LOWにしてください
			enable-active-high;  ※デフォルトのactive-lowにするため、この行を削除してください
		};

■修正箇所2(※)

&usbotg1 {
	pinctrl-names = "default";  ※idピンは使わないので、削除してください
	pinctrl-0 = <&pinctrl_usbotg1>;  ※idピンは使わないので、削除してください
	vbus-supply = <&reg_usbotg1_vbus>;
	dr_mode = "otg";  ※otgを→hostに書き換えてください
	disable-over-current;
	status = "okay";
};

松坂 様
ご回答ありがとうございます。

> ■ソースファイル
> /board/atmark-techno/armadillo-640/board_usb.c
> ■ソースファイル
> /arch/arm/boot/dts/armadillo-610-extboard-eva-common.dtsi

上記2つファイルにご提示いただいた変更を行ったところ
認識できるようになりました。
ご対応ありがとうございました。今後ともよろしくお願い致します。