USBで遊ぼう

2002/11/21からのアクセス人目
Last update: 2002/11/21
USBN960x
CY7C63001A

USBN9603/9604

USBN960xは、2002/08/19 現在、日本の電子工作マニアの間で一番良く使われているであろうと(私が勝 手に)思うUSBデバイスコントローラICである。
秋月でも 扱っている。通販で600円。
SIPなので、私のようにハンダ付けが上手くない人にはハンダ付けが面倒であ る。

Cypress CY7C63001A

Cypress CY7C63000Aシリーズ は、USB LowSpeed device一式を内蔵したワ ンチップマイコンである。
プロセッサ部分はPICやAVRと同様、ハーバードアーキテクチャのスカラプロセッ サである。
外部クロックが6MHz、内部では12MHzで動作する。が、命令のレイテンシが4〜 14と命令毎にまちまちで、大きい。同クロックならAVRの方が4倍以上高速であ ろう。
USB部分は、LowSpeed(1.5Mbps)のみ対応なので、EndPointのうち、コントロー ル転送(EndPoint0, device←→host)と、IN(EndPoint1, device→host)のみを 持っている。
ホストとの通信は割り込みによるイベントドリブンで処理される。
EndPoint0割り込みは、ホストからコントロール転送のパケットが送られてきた 時に割り込みがかかる。
Endpoint1割り込みは、IN転送リクエストがホストから来ると呼ばれる。
IN転送で送られるデータはDSPレジスタ+8(一般的には0x78)に置かれている (See Manual p.8)。
IN転送要求が来ると、FIFOにあるものが自動的に送られる。
転送されるバイト数はUSB End Point 1 TX Configuration Register(Address 0x11)の下位4ビットで指定する。USBのロースピード時は8バイトまでしか許さ れないので、8を超える値をセットしてはいけない。8超の値セットしたらどう なるのかはマニュアルに記述されていないのでわからない。

汎用USB-IOキット

モルフィー企画ではこの石を使った、 汎用USB-IO キットを販売している(1500円)。完成品も売っている(2500円)。
詳しい動作は ここ で紹介されている。
前述したリンク先の最後にあるUSBアナライザログは動作の説明部が間違っている。
Log2.txtが、01 37のコマンド(WritePort1)を送った時の動作
Log3.txtが、03 のコマンド(ReadPort1)を送った時の動作
である。ログを見ればわかる事だけど。

ファームウェアを もうちょっと改良すると もっと良くなりそうだ。
読み取りに関しては、One_mSec_ISR:で毎回Port0/1の値を読んで Endpoint1_Byte0とEndpoint1_Byte1に書くようにすれば良さそうだ。
こんな感じ
。 usbio.asm: L395 の辺り
Prev_Port0:      equ 40h
Prev_Port1:      equ 41h

     iord Port0_Data
     mov [Prev_Port0], A
     cmp A, [Endpoint1_Byte0]
     jnz Port0_Read_End:
     mov [Endpoint1_Byte0], A
Port0_Read_End:
     iord Port1_Data
     mov [Prev_Port1], A
     cmp A, [Endpoint1_Byte1]
     jnz Port1_Read_End:
     mov [Endpoint1_Byte1], A
Port1_Read_End:
     mov A, [Data_Byte2]
     mov [Endpoint1_Byte2], A
     mov A, [Data_Byte3]
     mov [Endpoint1_Byte3], A
     mov A, [Data_Byte4]
     mov [Endpoint1_Byte4], A
     mov A, [Data_Byte5]
     mov [Endpoint1_Byte5], A
     mov A, [Data_Byte6]
     mov [Endpoint1_Byte6], A
     mov A, [Data_Byte7]
     mov [Endpoint1_Byte7], A

ただし、 入力ポートの 値は予め1にセットしておかないと入力にならない (See also this PDF pp.13)
直接スイッチを付けて入力とする場合には、チャタリングとノイズ除去のため、 適度にサンプリングして、 ANDをとる ようにすれば良いだろう。
ファームを改良するにはプログラムされてない新しいチップと$99のWriterが 必要。開発キットは必要なのだろうか?

個人的感想

CY7C63000で使われているEPROMはUV-EPROMで、消去用の窓が有るものと無いも のがある。
EEPROMやFLASHだったら良かったのになぁ…。
窓付の奴が手に入れば万々歳だけど 難しそう(リンク先の「さいごに」の部分参照)だし。
ロット単位で購入すれば、 @320円位で買えるらしい。10個位あれば十分なんだけどそんな少量じゃ売っ てくれないよなぁ。前述した所では「残り150個切ったら注文」とか書いてあ るので、500〜1000個単位かな?