2019年4月22日にAndroid Based Targeted Host Compliance Test Specification v1.00という名称の資料がUSB-IFのサイトで公開されました。
これはWindows以外のOSが動作するホスト機器のテストスペックを定義したもので、主なターゲットOSはLinuxとAndroidとなっています。
これらのOSを採用するUSB機器を開発されている方も多いかと思いますので、2ページ程の短い資料ですがその内容をご紹介していきたいと思います。
Targeted Host Compliance Test Specification
2019/2/27
Rev1.00
目的
Embedded HostはStandard-AコネクタまたはMicro-ABコネクタを搭載し、用途を絞ったUSBホスト機能をもつTargeted Hostとして定義されています。この資料では認証要件をType-Cポートを持つTargeted Hostに広げます。また、非Windows系OSのホスト機器の認証についての要件も明確に定義します。なお、DRD(Dual Role Data)機器のPeripheral機能の認証については本資料ではカバーされていません。
試験要件
USBホストの全機能を持つ機器(Full Host)の認証ではUSB 3.2 Product Matrixに記載されている全ての試験の実施が必要です。このためには試験対象のホスト機器がWindows OSをサポートしている必要があります。Windows OSはサポートしていないがUSBホストの全機能を持つ機器はTargeted Hostとしてのみ認証を受けることができます。Full HostとTargeted Hostの主な違いは以下の通りです。
・Full Hostの認証ではXHCICV、USB3CV、USB2CV、Hub3CVが動作できなければなりません
・Targeted Hostの認証では、そのホスト機器はいくつかの機能を無効にすることができます
・Targeted Hostの認証では、そのホスト機器はサポートするPeripheralを限定することができます。対応するPeripheralのリストをTPL(Targeted Peripheral List)と呼びます
Targeted Hostの試験に必要な項目を以下にまとめました。
注) 以下の表中のリンクは2019/7/4現在は有効ですが、各資料のバージョンアップに伴いリンクが変更になることがあります。その際はUSB-IFのウェブサイトのDocument Libraryから最新版を検索してください。
試験要件 | 参照先 |
USB 2.0 Electrical | USB 2.0 Electrical CTS |
USB 3.2 Electrical | Electrical CTS for SuperSpeed USB Electrical CTS for Enhanced SS USB |
USB 3 Link Tests | USB 3.1 Link Layer Test Specification |
Tests for USB-C Ports (USB Type-C Functional, PD, etc) | USB-C Product Matrix |
Interoperability Testing with U1/U2 enabled | 最小要件として試験対象のホスト機器はEmbedded HostのIOP試験( Compliance Plan for USB On-The-Go and Embedded Host 3.0)に合格する必要があります。もしそのホスト機器のTPLがFull Hostの認証試験で使用される全ての機器を含む場合は、xHCI Interoperability Test Procedures for Peripherals, Hubs and Hosts (Legacy, USB Type-C and USB Power Delivery)に記載されているツリーを使用する試験も必要になります。これは150種類のよく使われているUSB2.0機器から抽出されたものを含みます。 |
Embedded Host Testing | Compliance Plan for USB On-The-Go and Embedded Host 3.0 |
BC 1.2 | USB Battery Charging 1.2 Compliance Plan |
xHC Debug Capability | Full Host機能の実装が必要です |
Full Hostの実装
もし、試験対象のホスト機器がWindows OSをサポートしていないという理由だけでTargeted Hostとして認証を受けることを検討しているなら、そのホスト機器はUSB 3.2 Product Matrixに載っている試験のうち、CV試験(XHCICV、USB3CV、USB2CV、Hub3CV)以外の全ての試験に合格しなければなりません。そのようなフル機能のホスト機器はxHCI Interoperability Test Procedures for Peripherals, Hubs and Hosts (Legacy, USB Type-C and USB Power Delivery)に載っているIOPツリーを接続して動作できなければなりません。これは150種類のよく使われているUSB2.0機器から抽出されたものを含みます。
LinuxやAndroidを実装するためのヘルプ
Ubuntu系のLinuxカーネルはusb_hset_testとlvsという2つのドライバ(モジュール)を含んでいます。これらはUSB-IFの試験で使用されます。
USB 2.0電気試験
USB 2.0のEmbedded Hostの試験には対象のホスト機器に対してユーザが関与することなく電気試験ができるような治具の定義が含まれています。これらの治具の購入についてはPIDVIDまたはHS Embedded Host Electrical Test Boardを参照ください。
これらの治具に対する(ホスト機器側の)ソフトウェア実装はLinuxカーネルのv2.6.35以上に含まれています。これはUbuntuのディストリビューションに含まれていますし、Androidのビルドにも含まれています。usb_ehset_testをパッチとして適用したい場合はこちらを参照ください。usb_ehset_testのソースコードはLinuxのソースコードのdrivers/usb/misc/ehset.cにあります。また、この機能については以下のサイトも使用可能です。https://code.google.com/archive/p/openusbhset/
注) USB 2.0のHigh-Speedの電気試験ではTEST_PACKET、TEST_J、TEST_K、TEST_SE0_NAKの4つのテストモードに設定できなければなりません。ここに記載されているモジュールを使用することでこれらのモードの設定を簡単に行うことができるようになります。
Link, USB-C Functional, USB 3.2電気試験
・LVS helpers
Link Layer TestとType-C Functional Testのいくつかの項目ではGetDescriptor等の特定の試験条件に設定するための「Helpers」が必要になります。Linuxの最新のソースコードのdrivers/usb/misc/lvstest.cにlvsというモジュール(ドライバ)を見つけることができます。このモジュールはLink Layer TestやType-C Functional Testのためのホスト機器の初期化のための属性を設定します。これらの動作にはu1_timeout, u2_timeout, hot_reset, u3_entry, u3_exit, warm_resetがあります。
ホスト機器はこのモジュールを実装し、またそれを結合し関連する属性にアクセスできなければなりません。典型的なAndroid機器では、管理者権限で動作しているホスト機器上でターミナルでアクセスすることにより実行されます。lvsドライバは試験対象のホストのルートハブに、またはハブを内蔵している場合はそのハブに関連付けされている必要があります。そのドライバの関連付けの方法はlvstest.cの最初のコミットログの中にあります。属性へのアクセスについてはDocumentation/ABI/testing/sysfs-bus-usb-lvstestに記載があります。
・USB 3.2電気試験
xHCIホストはコンプライアンス試験を有効にするためにソフトウェア上で割り込みを必要とすることがあります。eXtensible Host Controller Interface for Universal Serial Busという資料の4.19.1.2.4.1のCTE documentationを参照ください。もしホストが割り込みを必要とする場合は、lvsモジュールのenable_complianceという属性を使用することができます。
注) USB 3.xのSuperSpeedの電気試験ではコンプライアンスモードと呼ばれるモードに設定できなければなりません。USBホストコントローラはデフォルトでコンプライアンスモードが無効になっていることも多いと聞いています。その場合はここに記載されている方法でコンプライアンスモードを有効にすることができます。
まとめ
試験の際にそれぞれの依頼元からusb_ehset_testやlvsを用いた設定方法をいただくことがありますが、USB-IFの公式の資料としてこれらの情報が記載されたことは初めてではないかと思います。Linux系OSのUSBホスト機器へのテストモードの実装に苦労されている場合は特に有用な情報かと思います。
組み込み向けの場合はその製品に不要なモジュールは元々のOSのイメージから削られていると思われます。そのような場合にはUSB試験の前にテストモード用のモジュールを適用しておく必要があると考えられます。