2014.2.28

前へ
次へ
ホームページトップへ戻る

CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!


[第22回]


●PICの内と外

月末で追い込みの仕事が入ったものですから、数日お休みをしてしまいました。
このところ書いておりますように、一部のパソコンでND80ZV(ND80Z3.5)をUSB接続したときに「不明なデバイス」になってしまう原因がやっと特定できましたので、PICプログラムを修正し今までにお問い合わせをいただいたお客様に修正済みのPIC18F14K50をお送りしました。
すでに何人かの方から「正しく接続できるようになった」とのメールをいただきました。
今はほっと一息ついております。

今までメールにて「USB接続ができない」というお問い合わせをいただいたお客様にはメールにてご連絡を差し上げたうえで修正済みのPIC18F14K50をお送りしていますが、ひょっとしてリストに漏れがあってご連絡をお送りしていない方もいらっしゃるかもしれません。
ND80ZV(ND80Z3.5)がパソコンにUSB接続しようとすると「不明なデバイス」と表示されて接続できないお客様で、もしまだご連絡を受け取っていらっしゃらない場合にはお手数ですがメールにてご連絡をいただきますようお願いいたします。

そういうことで説明の途中から割り込んで、ちょいとUSB信号の説明などに行ってしまっておりましたが、このままで行きますとテーマからずれたままでどんどん行ってしまいそうです。
このあたりで本題のCPLD+SIMMに戻らなければいけないとは思っているのですが…。

しかし。
今回の作業を通じて、実にわかりにくくて面倒なEnumerationの手続きについて、いくつか学んだことがあります。
それについてもまだ記憶が新しいうちに書き留めておきませんと、そのうちきれいさっぱり忘れてしまいます。
どうせノートに書き留めておくつもりならば、いっそのこと備忘録としてホームページに書きましたほうが丁寧なノートになります。
しかし、しかし。
そういうことになりますと、まだしばらくはCPLD+SIMMに戻れなくて、USBのあたりで行ったりきたりすることになります。
いつになったらCPLDのお話に戻るの?とお叱りをいただいてしまいそうです。
私としましても、ただでさえ脈絡もなく書いておりますものがなおさら迷走の度を深めていくことになってしまうと危惧してはおりますが、しかし、なまじ系統だててなどと考えておりますと、何も書けなくなってしまいます。
ですので、ここは兼好法師様に学びまして、心に浮かぶままをひたすら脈絡なく書き綴ることにいたします。
おもちゃ箱ないしはびっくり箱であります。
なにとぞご了承いただきますように。

さて、そういうことで、今回のテーマです。
いろいろテストをする過程で、当初はただUSB信号を記録し解析するだけのツールでありましたCPLD+SIMMを途中で改造して、USB信号を記録しつつ、同時にPIC18F14K50のプログラムもテスト用に手を加えて、内部処理の進行状態をポート出力したものもCPLDで取り込んでSIMMに記録するようにしました([第12回]参照)。

そのこころは、といいますと。
USB信号を記録してそれを解読することはできるようになりましたが、それを解析していく過程で、もうひとつはっきりしない、かゆいところに手が届いていないというもどかしさを感じるところが出てきました。
PICの外からUSB信号を見ているだけでは送られてくるコマンドに対するPICの側の応答シーケンスについてはPICから吐き出されるDATA1、DATA0を見て推測するしかありません。
そこのところをもう少しはっきりさせて、なんでそういう応答になってしまうのか、というあたりをダイレクトにつかむためには、そのようにする(PICのパラレルポートから進行状態を示すデータを出力させる)必要があると思ったのが動機です。

プログラムのデバッグ手法にトレースとかステップというテクニックがあります。
いまどきはシミュレーションなどというようですが、どうやってこういうものをシミュレーションするのでありましょうか。
私はやっぱり実機デバッグが一番だと思います。
MPLABにもデバッグ機能はあるようなのですが、そりゃあ内部処理が中心でしたらそれもよろしいでしょうが、本テーマのようにホストから送られてくるEnumerationコマンドにリアルタイムに応答しなければならないというようなプログラムのデバッグには無力でありましょう。
やっぱり今も昔もツールは自分でつくるものだと思います(そう思うところがもうすでに昔人間なのでありましょうね)。

で。
そのツールのできばえを見ていただくつもりなのでありますが。
さて、どのように説明を進めていったらよいのか、実はそこのところの準備で本日はまるっと一日かかってしまいました。
実際に記録したデータを見ていただこうとしたのですが、なにしろ山ほど記録ファイルを作ったものですから、その中から適当なものを選ぶこと自体がなかなかに大変なことだったのです。
あれこれ準備をしておりますうちに本日も残り時間が少なくなってきましたので、実際のデータをお見せしての説明はおそらく次回になってしまうと思います。
どこまで書けるかはわかりませんが、とりあえずはその記録データとはどういうものか、というあたりから書いていくことにいたします。

ここで行なった作業では、[第12回]に書きましたように記録データが2種類あります。
そのひとつは当初と同じで、USB信号を生のままCPLDに取り込んでそれをシリアルから8ビットパラレルに変換してSIMMに記録します。
もうひとつはPIC18F14K50のパラレルポートからUSB信号と同時進行で出力されるプログラムの進行を示すデータです。
これも一旦CPLDに取り込んだ上で同じくSIMMに記録します。
このSIMMは幸いなことにデータバスが32ビットです。
つまり同時に32ビットまでのデータを同じアドレスに書き込むことができます。
最初からそういうことを狙っていたわけではありませんが、たまたま入手したSIMMがそういう仕様だったので、しかし、これはまことに好都合でありました。
おかげでUSB信号とPICデータを同時に記録することができました。

これはのちほどSIMMからデータを読み出してパソコンのパラレルポートから読み込む仕組みについても説明をするつもりですが、そのようにしてSIMMの同じアドレスに16ビットのデータとして書き込んだものを、読み出すときはパソコンのパラレルポート(プリンタポート)を経由する関係で、8ビットのデータとしてパソコンに取り込みます。
SIMMに記録するときは、16ビット×4Mのデータなのですが、それを読み出すときには8ビット×8Mのデータになります。
そこのところのコントロールもCPLDが受け持ちます。

説明の途中ですが、本日は時間がなくなってしまいました。
続きは次回にいたします。

CPLD+SIMMを使ってUSBプロトコルの解析を![第22回]
2014.2.28upload

前へ
次へ
ホームページトップへ戻る