作成したUSBプロトコル・アナライザーがきちんと機能しているかどうかを検証する必要があります。USBフルスピードでは転送周波数の誤差が±2500ppm以内であることが要求されます。例えば、64バイトのデータを転送した場合、0.16バイトの誤差となります。この場合、USBプロトコル・アナライザーにDPLL(digital phase locked loop)を採用しなくても、ほぼ間違いなくデータを読み取れます。ところが、1024バイトのデータを転送した場合、2.56バイトの誤差となります。USBプロトコル・アナライザーにDPLLを装備していなければ、この誤差を補正できません。つまり、USBプロトコル・アナライザーの機能を検証するためには、転送周波数の誤差が±2500ppmであっても、アイソクロナス転送で1024バイトのDATAパケットをきちんと受信できるかどうかを確認しなければいけません。
以下、PIC32MX270F256B-50I/SP (HARMONY)の章に書いてあるMHC環境を整えてあることと、Microchip Libraries for Applications(MLA)のv2017-03-06とMPLAB XC8 Compiler v1.43をインストールしてあることが前提です。
アナライザーの機能検証用に回路をつくりました。以下に回路と、その回路図を示します。
回路図中、PIC32MX270F256B-50I/SPをUSBオーディオ・ホストとします。このPICへのクロックは、PIC16F1459で制御した「3ch出力プログラマブル周波数ジェネレーターモジュール」(秋月伝子通商)で与えています。PIC32MX270F256B-50I/SP用のファームウェアはaudio_sp_host.zipで、PIC16F1459のファームウェアは1459_usb_3clk.zipです。
○USBオーディオHOST
PIC32MX270F256B-50I/SPにaudio_sp_host.zipを解凍して出てくるaudio_sp_hostフォルダーを\microchip\harmony\v2_04\appsフォルダーの中にいれます。XC32(v1.44)でコンパイルして、PICにファームウェアを書き込めば、このPICはUSBオーディオ・ホストになります。いまのところ、1023バイト以下のデータしか送ることができませんが、アナライザーの機能検証にはこれで十分です。
○3ch出力プログラマブル周波数ジェネレーターモジュール
1459_usb_3clk.zipを解凍して出てくる1459_usb_3clkフォルダーを\microchip\mla\v2017_03_06\appsフォルダーの中にいれます。XC8でコンパイルして、PIC16F1459にファームウェアを書き込みます。
PIC16F1459に接続したトグルスイッチSW1を押すごとに、3つの周波数のパルスが順次出力されます。今回購入したモジュールでは、実測値で20.00008 MHzと20.05020 MHzと19.95022 MHzの3つの周波数のパルスが出力されます(周波数のふらつきは±0.00001 Hzと安定しています。これは、計測誤差かもしれません。)。これら3つの周波数は、USB規格での周波数の最大許容誤差が±2500ppmであることを念頭において設定しました。
なお、モジュールに個体差があるかも知れませんので、以下のような作業を行います。ただ、ある程度正確な周波数カウンターが必要です。まず、マニュアルにしたがい、モジュールの出力周波数を20MHzに設定します。すなわち、PLL周波数は400MHzとし(a=15, b=1, c=1)、出力分周器は、a=10, b= 50000, c =10000と設定します。具体的には、1459_usb_clk.zipを解凍すると出てくる1459_usb_clkフォルダーを\microchip\mla\v2017_03_06\appsフォルダーの中にいれます。1459_usb_clkフォルダーの中にあるblink.cのなかのmain関数の中の変数c2の値を10000とします。1459_usb_clkをコンパルしてPIC16F1459に書きこみ、モジュールの出力周波数を周波数カウンターで実測します。出力周波数が、20MHzからずれていると思いますので、変数c2の値だけを変えて、出力周波数が、20MHzにできるだけ近くなるようにします。このとき、デバッグモードで配列msoの中身の数値を読み取り、それを紙などにメモしておきます。同様に、変数c2の値だけをかえて、20.05000 MHzと19.95000 MHzにできるだけ近くなるようにして、それぞれの場合で配列msoの中身の数値を読み取り、それをメモしておきます。1459_usb_3clk.zipを解凍して出てくる1459_usb_3clkフォルダーの中にあるblink.cのなかのmso_high[8]、mso_exact[8]、mso_low[8]にメモの数値を書きこみます。これをコンパイルして、PIC16F1459に書き込みます。これで、モジュールの個体差への対応が完了します。
上記検証用回路(USBオーディオ・ホスト)をUSBプロトコル・アナライザーを介してUSBオーディオスピーカーの章に書いてある回路(USBオーディオ・デバイス)を接続します。以下は、USBプロトコル・アナライザーのアプリケーション・ソフトウェアをパーソナル・コンピュータ上で実行した結果です。
実測値で20.00008 MHzと20.05020 MHzと19.95022 MHzの3つの固定周波数で、まったく同じ結果が得られました。結論として、USBプロトコル・アナライザーは、正しく機能していることが分かります。ただ、周波数は3つ切り替えることができますが、それぞれは固定しています。このため、USBの1パケットの時間(1ミリ秒)内で転送周波数が±2500ppm変動する場合でも、問題なく機能しているかどうかを検証することはできていません。その意味では、不完全な検証と言えます。