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

terada email@hidden
2011年 2月 10日 (木) 12:39:49 JST


竹之下様

寺田です。ご回答ありがとうございます。

>FT245BLの載っている基板は自前で起こされたものでしょうか?
そうです。


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

手元にログが残っていないのと、現状実機で確認できないため、正確な
メッセージ内容をお伝えできないのですが、認識されないときには、認
識されない旨のメッセージが連続して吐き出されます。

これは正常に認識された場合に、ケーブルを抜いた場合に吐き出される
メッセージと同じです。

a〜c については、再度実機で検証してから改めてご連絡致します。


また、回避策の実装方法について、詳細にご回答頂きありがとうござい
ます。

まずは現在の実装にあまり影響がないところから試してみることにしま
す。


以上です。ありがとうございました。


>竹之下です。
>
>> もう少し、詳しい状況を教えていただけますか?
>> (デバイスの型番など、公開できますでしょうか?)
>>> 接続先基板の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 mailing list
>email@hidden
>http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo




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