« 2006年9月 | トップページ | 2006年11月 »

2006年10月27日 (金)

USB入門

USBデバイスを作る2

ちょっとだけUSBに対する知識を得ることが出来たので、AVRで
実験をしてみる。
USB2.0では3種類のデータ転送スピードがあり、ハイスピード/
フルスピード/ロースピードというふうに区別されていて、それぞれ
の転送スピードは480Mbps/12Mbps/1.5Mbpsと規定されている。
当然AVRを使ってソフトウェアだけで送受信出来る可能性のある
転送スピードはロースピード/1.5Mbpsに限られる。
そこで、ロースピードで送られてくるデータをAVRで受信して見る
事にする。

USBポートには4個の端子が在って、そのうち1本は5Vを供給する
事が出来るVBusで1本がグランド。残りの2本がデータを送受信する
為に使用するD+とD-という信号線になっている。ロースピードで信号
を送受信する為にはD-をプルアップすればいいらしい。
USBホスト側(つまりPC側)はD-がプルアップされているデバイスが
接続されると自動的にロースピードデバイスとして認識する。
そこで、小さく切った基板にUSBコネクタを配置し、D-側をプルアップ
して見た。

Usb02 

 

 

 

 

 

 

これをブレッドボード上のATMega88に接続する。他にAVRのTxD
とRxDにAMD3202を繋ぎRS232Cを経由してPC上でAVRをモニタ
する事にする。

USBホスト側では、USBポートにデバイスが接続されると、まずバス
リセットを行い、それからその接続されたデバイスが何物であるかを
知る為に、そのデバイスを定義しているディスクリプタを要求する。
この動作をエニュメレーションと呼ぶ。また、USBホストとデバイス間
ではパケットを送受信して通信を確立する。そこで、エニュメーレー
ション時にホスト側から送られてくるパケットをAVRで受信してみる。

1.5MHzのタイミングでUSBのD-を読むプログラムを書いて、パケット
を受信すると、

0x4E 0x55 0xA5
0x14 0xD5 0xA8 0xAA 0x55 0x55 0x55 0x95 x0AA 0xE1 0x26

というパケットを数組受信した。これはNRZIという方式で符号化され
ているので、この受信したパケットを復号すると。

0x2D 0x00 0x10
0xC3 0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 0xDD 0x94

になり、これはホストがそのデバイスを定義するデバイスディスク
リプタを要求するパケットであることが解る。なんとか、書き上げ
たパケットの受信部は無事動作しているようだ。

| | コメント (0) | トラックバック (0)

2006年10月24日 (火)

USB入門

USBデバイスを作る1

CPA02とATmega88を使ってUSBテスト基板を作った時、プログラム
的にはUSBを意識しない(しなくてよい)構造だった。なので、猛烈に
USBを意識したプログラムを書きたい。しかし、

USBって何?

正直、どうやってUSBを使いPC-デバイス間で通信をする事が出来る
のか解らない。USBと言っても様々なデバイスがあるし、そもそも各
デバイスごとに、専用のデバイスドライバーを必要としている様に見
える。RS232Cみたいに単純じゃない事が予想される。
なので、幾つかの解説書買い、他にとトラ技の記事やWEB上の情報
を読んで見る。

いゃーわかんねー。

ある資料を読む→用語が解らないので別の資料を読む→
さらに解らない定義が見つかる→次の資料を読む→
またまた解らない実装を発見する→最初の資料に戻る

という循環を際限なく繰り返す。何分、夜間仕事を終えてからという
事なので、必然的にアルコールを摂取しながらなという事になり、
その進行スピードはのろい。アルコールを摂取するとモチベーショ
ンは向上するのだが、作業効率は格段に下がる。

Usb00  

 

 

 

 

 

 

買った書籍の一部。その価格とページ数に畏怖の念を抱きながら、
結局購入してしまった「WindowsXPデバイスドライバプログラミング」

こんな事を繰り返し、なんとかUSBを俯瞰出来る位置に立つことが
出来た(気がする)。細部は全然理解していないが、取り敢えず
AVRを使って実験しながらUSBを理解する事にする。

Usb01   

 

 

 

 

 

 

ATmega88を使ってUSBホストから送られるパケットを拾う実験

| | コメント (0) | トラックバック (0)

ぐち

久々の更新。

私は神奈川県西南部の外れの田舎に居住している成人男性な
ので、必然的に地域のコミュニティー(自治会)に関する幾らかの
労役に服する事を免れることが出来ない。なので、決して自発的
ではないのだが地方自主防災の一躍を担っている。平たく言えば
消防団員ってやつ。

これが、結構つらい。

なんか、ここ3週間程すごい事になってました。

| | コメント (6) | トラックバック (0)

2006年10月 1日 (日)

AVRのためのPIC再入門

PICでAVRライタを作る12

AVRStudioがバージョンアップしたらしい。

AVRからライタを使う時、ライタのファームウェアのバージョンを
チェックして、適合したバージョンではない場合ファームウェアの
更新を促すダイアログが表示される。

当然16F648A-AVRライタは純正AVRISPではないので、AVRStudio
からファームウェアの更新は出来ない。毎回このダイアログが表示
されるのは煩わしいので、16F648A-AVRライタのバージョン番号の
応答を変更することにした。
ただし、毎回AVRStudioの適合ファーム番号が変更されるたび
PICのプログラムを再アセンブルして書き込むのは、なおさら煩わし
いので、ターミナルソフトからファームのバージョン番号を変更できる
ようにしてみた。

Hterm

 

 

 

 

 

 

ハイパーターミナルなどのソフトから操作する。
決して使い安くはないが、取り敢えず機能すると思う。
AVRStudio-Build497の場合、SoftwareMinorVersioを0x0Aに
すればいいらしい。

しかし、このライタのネタでこんなに記事を書くとは思ってな
かったなぁ。

ソースとHEXファイル ダウンロード

| | コメント (4) | トラックバック (0)

« 2006年9月 | トップページ | 2006年11月 »