tetsuya.ooka
2014年5月13日 11時08分
いつも大変お世話になっております。ロームの大岡です。
Armadillo-410に搭載されているUSBホストコントローラのアイパターンを測定したいと思うのですが、
Armadillo側からテストパケットを送信する方法がわからなくて困っています。
カーネルコンフィグの以下のあたりを有効にすればいいのかなとは思うのですが、
そこから先がよくわかっていません。どなたかご教授願えないでしょうか。
Device Drivers --->
[*] USB Support --->
< > USB testing driver
< > USB Gadget Support
それでは、よろしくお願いします。
コメント
at_ohsawa
既に寺島様が答えられている方法と同様ですが、
アットマークテクノでもdrivers/usb/host/ehci-arc.c
からテストモードを有効にするレジスタを使用して
コンプライアンステストを行っています。
添付のパッチ(usb_compliance_test.patch)
をカーネルに当てると下記のprocfsができます。
/proc/driver/ehci-ptc-c8802540 (CON5 上段 LS/FS)
/proc/driver/ehci-ptc-c8804140 (CON5 下段 LS/FS/HS)
procfsに0から7までの文字列を書き込む事で、
USBのコンプライアンステスト用の波形を出力できます。
echo 4 > /proc/driver/ehci-ptc-c8804140
テストモードはUSB Specification 2.0 の
7.1.20 Test Mode Support に対応する下記の
8つのモードが使用できます。
0: TEST_MODE_DISABLE
1: J STATE
2: K STATE
3: SE0 (host) / NAK (device)
4: Packet
5: FORCE_ENABLE_HS
6: FORCE_ENABLE_FS
7: FORCE_ENABLE_LS
ファイル | ファイルの説明 |
---|---|
usb_compliance_test.patch |
tetsuya.ooka
forks_yas
forks_yas
tetsuya.ooka
at_daisuke.sasaki
佐々木大輔です。
弊社で実際にハブからのTest Packet出力を試しているわけではないですが、、、
ソフトウエア制御により、USBハブのTest Packetを出すために必要な制御は
「3. USBハブのドライバを修正してテストモードにする」のみです。
USBハブはUSBホストコントローラから送信するリクエストにより、テストモードに遷移する事ができます。
(USB規格により規定されています)
このリクエストが寺島様がおっしゃられている「USB 2.0 specification 11.24.2.13Set PortFeature」に記載されているものです。
従い、USBホストコントローラはテストモードではなく通常モードである必要があります。
つまり、
> 1. usb_compliance_test.patchをあててホストコントローラをテストモードにする
については行ってはいけません。
USBホストとしては、この状態で「USB 2.0 specification 11.24.2.13Set PortFeature」に記載されている
PORT_TESTのシーケンスに従う事でテストモードに遷移する事が可能です。
詳細は確認できていないのですが、カーネル(linux-2.6.26-at)のdrivers/usb/hub.cに
Set PortFeatureを送るための関数があるようなので、これを活用する事でUSBハブにリクエストを送る事ができそうです。
もしも、ご使用のチップに、外部端子の制御によるテストモードへの遷移機能がある場合は、
> 2. USBハブチップをテストモードにする
によるテストも可能です。
これは、ソフトウエア制御によるテストモード遷移とは全く別のもので、
どちらかの手段でUSBハブをテストモードに遷移させる事ができればよいです。
tetsuya.ooka
ロームの大岡です。
佐々木様、説明して頂いてありがとうございます。
もう少しだけ質問させてください。
> 1. usb_compliance_test.patchをあててホストコントローラをテストモードにする
> 2. USBハブチップをテストモードにする
> 3. USBハブのドライバを修正してテストモードにする
上記手順で1.はホストをテストする手順、
2.と3.はハブのみをテストする手順という事でしょうか?
最終的にやりたいことは、ハブにアイパターン計測用機器をセットして
ホストのアイパターンを取得することなのですが、
ホストからテストパターンを出力して、
ホストに接続しているハブにそのテストパターンを分配させ、
ハブからの出力を計測してホストのアイパターンを見るという事は不可能なのでしょうか?
at_daisuke.sasaki
佐々木大輔です。
> 上記手順で1.はホストをテストする手順、
> 2.と3.はハブのみをテストする手順という事でしょうか?
はい。正しいです。
> 最終的にやりたいことは、ハブにアイパターン計測用機器をセットして
> ホストのアイパターンを取得することなのですが、
HS(High Speed)のEye Patternを計測する場合ですが、
USBハブは、HSの転送をする際、USBハブ内部の物理層で、
USBホストからの信号の切り直しを行っています。
(切り直しを実施しなければ波形品質を保てないためです)
そのため、クロスポイント、オーバーシュート、アンダーシュートやジッタなど
Eye Patternに影響する要素は、USBハブの回路に依存すると言えます。
この仕様により、USBハブが多段構成になることで、末端のUSBハブの波形品質が悪くなる。
という事はありません。
つまり、USBハブのEye Patternを測定しておけば、装置としての波形品質は保てるはずです。
> ホストからテストパターンを出力して、
> ホストに接続しているハブにそのテストパターンを分配させ、
> ハブからの出力を計測してホストのアイパターンを見るという事は不可能なのでしょうか?
USBハブはアップポート(USBホスト側のポート)からの信号を、
有効なダウンポート(USBデバイス側のポート)にブロードキャスト転送する仕様です。
ダウンポートを有効にする事ができれば、自然とUSBホストからのパケットはダウンポートに流れます。
ただし、私の理解では、Eye Patternの試験ではUSBデバイスを挿さずに解放状態で試験するため、
ダウンポートが有効になりません。
Set PortFeatureでC_PORT_ENABLEに設定する事で、ポートを強制的に有効にできるかもしれませんが、
通常このような試験は行われないと思いますので、実現可能かも含めわかりません。
forks_yas
2014年5月14日 12時36分
FORKS 寺島と申します。
i.MX25xでテストパケットを送信するためには、カーネルコンフィグではなく、drivers/usb/host/ehci-arc.c のehci_testmode_init() を動くようにする必要があります(デフォルトでは#undef EHCI_PROC_PTC によってなにもしない関数が選択されています)。
なお、#undefを削除しただけでは、procのエントリを”ehci-ptc"という1つしか作らず、i.MX25xのように複数EHCIコントローラが存在する場合に対応できないので、pdev-idを使ってコントローラ毎にprocのエントリ(例えば"ehci-ptc.0"と"ehci-ptc.1")を作成するようソースを修正します。
修正したドライバを使うと、/proc/driver/ehci-ptc.0 のようなエントリが出来るので、ここにPORTSCレジスタのPTCフィールド設定値を書き込むとテストモードになります(4でテストパケット送信、i.MX25xのリファレンスマニュアルを参照して下さい)。
以上、ご参考まで。
> いつも大変お世話になっております。ロームの大岡です。
>
> Armadillo-410に搭載されているUSBホストコントローラのアイパターンを測定したいと思うのですが、
> Armadillo側からテストパケットを送信する方法がわからなくて困っています。
>
> カーネルコンフィグの以下のあたりを有効にすればいいのかなとは思うのですが、
> そこから先がよくわかっていません。どなたかご教授願えないでしょうか。
> Device Drivers --->
> [*] USB Support --->
> < > USB testing driver
> < > USB Gadget Support
>
> それでは、よろしくお願いします。