[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 メーリングリストの案内