[Armadillo:06804] Re: STXD4(CPUモジュール、39番ピン)のUSBリセットについて

Takenoshita Koyo email@hidden
2011年 2月 10日 (木) 11:28:45 JST


竹之下です。

> もう少し、詳しい状況を教えていただけますか?
> (デバイスの型番など、公開できますでしょうか?)
>> 接続先基板のUSBコントローラは、FT245BLです。
FT245BLの載っている基板は自前で起こされたものでしょうか?

また、「USBデバイスがまれに認識されない」とはどのような状況でしょうか?
a. 正常に認識されたときと、現象が発生したときで、コンソールに表示される
   ログ(カーネルメッセージ)に何か違いがありますか?
b. その現象は、USBデバイスを接続したまま起動したときだけ発生するのでしょうか?
   Armadilloが起動している状態で、USBデバイスの抜き差しを行った場合、
   同じ現象が発生しますか?
c. 現象が発生したあと、USBデバイスを抜き差しすると、正常に認識されますか?
   (ホストコントローラは正常に動いていて、USBデバイスだけの問題?)

> 回避策として可能であれば、具体的な方法を伝授頂けると助かります。
>> 1. FTDIのドライバをカーネルモジュールとしてビルドしておいて、
>>   USBデバイスの認識に失敗したらモジュールを再ロードする。
Linux Kernel Configurationを以下のように変更して、FTDIドライバをカーネルモジュールとして
ビルドします。すると、ftdi_sio.koというファイルができるはずです。

Linux Kernel Configuration
  Device Drivers  --->
    USB support  --->
      USB Serial Converter support  --->
        <*> USB Serial Converter support
          <M>   USB FTDI Single Port Serial Driver (EXPERIMENTAL) <- '*'ではなく'M'にする

後は、Armadillo上で
[armadillo ~]# insmod ftdi_sio.ko
としてカーネルモジュールを読み込むと、通常はUSBデバイスを認識すると思います。
もし認識しなかったら、一度
[armadillo ~]# rmmod ftdi_sio.ko
としてみてカーネルモジュールをリムーブして、再度insmodを行ってみます。

現象が発生している理由にもよりますが、上手くいったら儲けものと言う程度の案です。

ちなみに、FTDIデバイス用のデバイスドライバは、linux-2.6.18ではExperimental(実験的な実装)
となっています。Experimentalなドライバは、様々な問題があって当然という程度の完成度です。
linux-2.6.26ではExperimentalが外れていますので、linux-2.6.26-atで試していただくと、
もしかすると問題が解決する可能性もあります。

>> 2. (linux-2.6.26-atにある)Delayed Probe機能を使って、電源が安定してから
>>   USBデバイスの認識をおこなうようにする。
こちらは、linux-2.6.26-at限定の機能になります。
Linux Kernel Configurationで、「Delay probe of OTG port」を選択して
カーネルをビルドすると、起動時にUSB OTGポートが初期化されません。

Linux Kernel Configuration
  Device Drivers  --->
    [*] USB support  --->
      [*]           Delay probe of OTG port <- '*'にする

Armadilloが起動したあと、以下のコマンドを実行した時点で
USB機能が有効になり、USBデバイスが検出されます。
[armadillo ~]# echo 1 > /sys/devices/platform/fsl-ehci.1/delayed_probe

もし、起動時に電源が不安定でUSBデバイスが正常に認識されないという状況
であれば、効果があるかもしれません。

> Armadillo基板プログラムでは、リセット信号入力後、USBデバイスを検
> 索して再オープンを実行してみようと考えておりました。この他にも設
> 定が必要になるのでしょうか。
少なくとも、USB PHYを再設定しなければなりません。
linux-2.6.18-at8/arch/arm/mach-mx3/usb.c::ulpi_set_vbus_power()
の処理に該当します。

> リセット信号の入力は、下記ファイル関数のような処理を想定しており
> ました。
> 
> linux-2.6.18-at8/arch/arm/mach-mx3/usb.c
> 
> void otg_hs_reset(void)
ここで行っているのは、
>> STXD4は、ISP1504(USB PHY)のリセット信号への入力です。この信号線だけを
>> 操作してUSB PHYをリセット
しているだけです。

USB PHYをリセットすると、USBPWR_EN1がdisableになって、
その後段についているPower Switchの出力がOFFになるので、
確かに、接続先のUSBデバイスの電源供給が停止します。

しかし、リセットを解除したあとの処理(USB PHYの再設定)を誰がどこでやるのか
ということが問題になります。(リセットを解除した後、ulpi_set_vbus_power()を
実行するだけで良いのか?)現状のArmadillo-500 ベースボードの作りですと、
STXD4を操作してUSBデバイスだけをリセットするというのは難しいと思います。

terada さんは書きました:
> 竹之下様
> 
> 寺田です。ご回答ありがとうございます。
> 
> 接続先基板のUSBコントローラは、FT245BLです。
> 
>> 1. FTDIのドライバをカーネルモジュールとしてビルドしておいて、
>>   USBデバイスの認識に失敗したらモジュールを再ロードする。
>> 2. (linux-2.6.26-atにある)Delayed Probe機能を使って、電源が安定してから
>>   USBデバイスの認識をおこなうようにする。
> 
> 回避策として可能であれば、具体的な方法を伝授頂けると助かります。
> 
> 
>> STXD4は、ISP1504(USB PHY)のリセット信号への入力です。この信号線だけを
>> 操作してUSB PHYをリセットしても、適切にレジスタを再設定しないと
>> USBでの通信はできません。
> 
> Armadillo基板プログラムでは、リセット信号入力後、USBデバイスを検
> 索して再オープンを実行してみようと考えておりました。この他にも設
> 定が必要になるのでしょうか。
> 
> 
> リセット信号の入力は、下記ファイル関数のような処理を想定しており
> ました。
> 
> linux-2.6.18-at8/arch/arm/mach-mx3/usb.c
> 
> void otg_hs_reset(void)
> {
> 	mxc_set_gpio_direction(MX31_PIN_STXD4, 0);	/* OUTPUT */
> 	mxc_set_gpio_dataout(MX31_PIN_STXD4, 1);	/* HIGH */
> 	mxc_set_gpio_dataout(MX31_PIN_STXD4, 0);	/* LOW */
> 	msleep(1);
> 	mxc_set_gpio_dataout(MX31_PIN_STXD4, 1);	/* HIGH */
> }
> 
> リセット信号を入力することで、接続先USBの電源がOFF/ONとなり、接
> 続先USBデバイスもリセットされると考えているのですが、この認識は
> 間違いないでしょうか。
> 
> 
> 以上です。
> お手数おかけして大変申し訳ございませんが、宜しくお願い致します。
> 
> 
>> 竹之下です。
>>
>>> 起動時に 接続されているUSBデバイスがまれに認識されないことがあり、
>>> 一度リセット(USB電源のOFF/ON)してから、USBドライバ(FTDI)を再
>>> オープンしたいと考えております。
>> もう少し、詳しい状況を教えていただけますか?
>> (デバイスの型番など、公開できますでしょうか?)
>>
>> 現象によっては、以下のような回避策が取れるかもしれません。
>>
>> 1. FTDIのドライバをカーネルモジュールとしてビルドしておいて、
>>   USBデバイスの認識に失敗したらモジュールを再ロードする。
>> 2. (linux-2.6.26-atにある)Delayed Probe機能を使って、電源が安定してから
>>   USBデバイスの認識をおこなうようにする。
>>
>> STXD4は、ISP1504(USB PHY)のリセット信号への入力です。この信号線だけを
>> 操作してUSB PHYをリセットしても、適切にレジスタを再設定しないと
>> USBでの通信はできません。いずれにせよ、ユーザー空間で動作する
>> プログラムから直接触ることはできないので、ドライバに手を入れることに
>> なります。外部のUSB機器への電源供給だけをON/OFFするのは、少々難しそう
>> です。
>>
>> -- 
>> Koyo Takenoshita
>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 


-- 
Koyo Takenoshita




armadillo メーリングリストの案内