2014.1.15


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

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


[第1回]


●USB接続の不具合を解明するために…

長のご無沙汰をしてしまいました。
正月をはさみまして、昨年の暮れあたりから本日まで、例によってずっと泥沼の日々を送っておりました。
本日、つい先程やっと一筋の光明を見出しまして、ほっと一息ついたところです。
このところホームページもずっと更新しておりませんで、
ん?死んじゃったんじゃないの?
なんて正月早々から縁起でもないことを言わないでくださいまし。
ちゃんとまだ生きておりまする。

だってねえ。
テーマがテーマですもの、途中でやっぱり駄目でしたぁ、なんてことになりましたら、引っ込みがつかないじゃありませんか。
それでなんとか成果を出そうと四苦八苦しておりましたのです。

実はND80Z3.5(ND80ZV)をご購入いただいたお客様の何人かの方から、Windows7(あるいはWindowsXP)にUSB接続しても「不明なデバイス」になってしまい、接続できません、というメールをいただきました。
ところが私の手元にありますWindows7(32bit、64bit)パソコン、WindowsXP、Windows98SEではみんなまともに認識されてしまいます。
お客様の情報によって、Windows7 Professional 64bit SP1なんてのも購入して試してみましたけれど、それでもちゃんと認識されてしまうので打つ手がありませんでした。
おかげでもうWindows7だらけです。

そんな折に、葛Z術少年出版の吉崎様から朗報(いや、これは違うか)が届きました。
たまたま手持ちのWindowsXPパソコンにE−80パソコン(Legacy8080)をUSB接続したのだけれど、不明なデバイスになってしまいます、というご連絡でした。
有難い!(って、喜んでいる場合じゃないでしょう)
さっそく吉崎様にお願いして、そのWindowsパソコンを送っていただきました。
ND80Z3.5(ND80ZV)もE−80パソコン(Legacy8080)も同じPIC18F14K50によるUSB通信を行なっています。
いままで手元にあるパソコンでは、全部まともに認識されてしまうので、それ以上追及ができなかったのですが、おかげさまでやっと「不明なデバイス」になってしまうパソコンが手に入りましたから、これを徹底的に解析すれば、どうして認識されないのか、その原因と対策がわかるかもしれません。

さて、そこで解析のためのツールを、ということなのですが。
パソコンにUSBで接続すると、最初にEnumerationという複雑な手続きが行なわれて、それが無事にパスできますと、そこではじめてUSBデバイスとして認識されます。
そのEnumerationの途中で何かがうまくなくてこけてしまっているのであるらしい、ということまでは考えるまでもなくおおよそ見当がつきます。
となれば、Enumerationの過程をつぶさに観察すれば、その「何か」がわかるのではないか。
と、それもまあどなた様でもお思いになられることでありましょう。
その解析のツールとしましては、フリーで入手できるUSBプロトコルアナライザもいくつかあって、もちろんそれも入手して試しております。

ところがですねえ。
これには不都合な点がありまして、そもそもまずはUSBデバイスとして認識できなければ、そのツールにはひっかからないのでありますね。
それになんだかところどころこちらが一番知りたいと思っている肝心なところに限って省略してくれたりします。
やっぱり通信しているUSBの回線そのものを横から盗みましてそれを解析してみないことには埒があきません。
もちろんそういう装置も販売されてはおります。
これがまた高い。
いや、なんでも数万円という安価なものもあるらしいのですが、それで本当にちゃんと観測できるのか、ちょっと不安で購入する気にはなりません。

そういうことになりますと、やっぱり手作りするしかありませんでしょう。
実は、かってND80ZVの設計の過程で、PICを利用してUSB通信を行なうことを思いつきましたときに、Enumerationの様子を観察するために、回路を自作したことがあります(TTLでCPUをつくろう[第627回])。
しかしこれはとりあえずということで作ったもので、なにしろPIC内蔵のメモリをバッファに使っているだけなので、とてもEnumerationの初めから終わりまでを記録するには、メモリ容量が足りません。
せめて数Mバイトは欲しい…。

そこであれこれ考えた末に行き着いた結論が、表題に有りますとおり、CPLD+SIMMという組み合わせでした。

あれえ?
CPLDは批判していたんじゃないのお?
むむ。さては、宗旨替えか?

いや、別に批判などはしておりませんですよお。
ただ、あんなものじゃ回路のことはわからんでしょう、と申し上げただけで…(ほら、批判してるじゃないの)。
まあ、しかし、利用できるものは適切に利用してしまいたいわけでありまして。
そのあたりのところは、少しずつ書いていくことにいたします。

しかし。
口で言うのは簡単でありますが、CPLDを扱うということになりますと、避けては通れないのがVHDLでありましょう。
これが使いこなせなければ、お話になりません。
え?使えるのか?
あ。わたくし恥ずかしながら、昨年暮れまでVHDLなるものはまったく存じ上げませんでした。
ええ。
ですので、短期速攻で勉強したのでありますよ。



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

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