Sazanami Online
カメレオンUSB ROM Readerの試作
[その1] [その2] [その3] [その4] Index に戻る
- Flash ROM
- 汎用I/O+汎用FWで48本ものI/OがPCから操作できるようになったので、手始めにFlash ROMの読み取りを行いました。
Winbond W29C020C、W29C011Aは5VのFLASHですが、データシートを見ると入力はそれぞれ2Vと3V入力となっているのでそのまま接続しても問題なさそうです。古い物は書き込み電圧に12Vが必要ですが、これらは5Vなので書き込みできればいいなぁ〜とか思っています
DIP32P FLASH ROM 1M/2M/4Mbit
nc/A18 | 1 | ○ | 32 | Vdd
|
---|
A16 | 2 | 31 | #WE
|
---|
A15 | 3 | 30 | A17
|
---|
A12 | 4 | 29 | A14
|
---|
A7 | 5 | 28 | A13
|
---|
A6 | 6 | 27 | A8
|
---|
A5 | 7 | 26 | A9
|
---|
A4 | 8 | 25 | A11
|
---|
A3 | 9 | 24 | #OE
|
---|
A2 | 10 | 23 | A10
|
---|
A1 | 11 | 22 | #CE
|
---|
A0 | 12 | 21 | DQ7
|
---|
DQ0 | 13 | 20 | DQ6
|
---|
DQ1 | 14 | 19 | DQ5
|
---|
DQ2 | 15 | 18 | DQ4
|
---|
GND | 16 | 17 | DQ3
|
---|
↑PageTop
- アダプタの製作
- 出力固定のP8,P9,PAをアドレスA0-19、PBのBit0-2を#CE,#OE,#WE、P0をデータDA0-7に接続します。
32ピンのICソケットが品切れだったので40ピンのを使いました。
秋月のCサイズ基板(72x47mm)を好んで使っているのですが一回り小さいです。
大き目の両面基板を使えば同じカメレオンUSBとサイズで、ROMを裏に配置する物も作れそうでしたが、試作なので、ROMを横に配置してL型接続になるようにしました。
出来上がったのがこちら、裏はポリ線配線です。雑なのでお見せできません(汗
ROMを挿してカメレオンUSBにドッキング!
↑PageTop
- ホストアプリの作成
- サンプルなどはCで提供されているので、Delphiを主に使っている私には JH1PJL Homepage : EZ-USBプロジェクトのコードが非常に参考になりましたm(__)m
UBSチップAN2135SCはROMを持っていない為、初期化時にPC側から8051コードで書かれたファームウェアを送信しなければなりません。これはEZ-USBの電源を切断するまで保持されるので、ファームウェアのID8バイトを比較して送信の必要があるか確認するカメレオンUSBライブラリの手順があるのですが、参考にさせていただいたコードには実装されていなかったのでこれを追加しただけでほとんど手を入れていません。
配線のミスも無く、驚くほどあっさりFLASHの内容が読めてしまいました。
↑PageTop
- 28Pin ROMも読んでみる
- 32pinと28pinのROMはほぼ互換性があるので、Vccピンの切り替えジャンパを付けて28PinのUV-EPROMも読んでみました。
テストしたROMは下記の4種類で、AKI-80で使っていた256kとアダプティックのSCSIボードに搭載されていた512kで、いずれも読めているようです。
256kbit : National Semiconductor NMC27C256BQ-150
256kbit : TOSHIBA TMM27256BD-20
256kbit : NEC D27C256AD-12
512kbit : ST M27C512-15F1
DIP28P UV-EPROM 128/256/512kbit
A15/Vpp | 1 | ○ | 28 | Vdd
|
---|
A12 | 2 | 27 | A14/#PGM
|
---|
A7 | 3 | 26 | A13
|
---|
A6 | 4 | 25 | A8
|
---|
A5 | 5 | 24 | A9
|
---|
A4 | 6 | 23 | A11
|
---|
A3 | 7 | 22 | #OE
|
---|
A2 | 8 | 21 | A10
|
---|
A1 | 9 | 20 | #CE
|
---|
A0 | 10 | 19 | DQ7
|
---|
DQ0 | 11 | 18 | DQ6
|
---|
DQ1 | 12 | 17 | DQ5
|
---|
DQ2 | 13 | 16 | DQ4
|
---|
GND | 14 | 15 | DQ3
|
---|
窓付きROMなんてもう見かけませんね、ジャンパを追加しています。
↑PageTop
- Flashの書き込みができない!
- ここまでFlashやUV-EPROMの読み込みは何の問題も無くできたわけですが、FlashのIDを読み出したりチップ消去するコマンドがまったく受け付けてもらえません、制御ピンには5Vが必要なのかと思い、CE,OE,WEを74F04でバッファリングして接続してもダメ、フルロジックICのパラレルFlashライターは怪しいながらも動いているのに..
カメレオンUSBのアタッチメントをロジアナに付け替えてパラレルFlashライターの動作を見てみると、ノイズだらけ(違!
じゃなくて、コマンドを300uS以内に連続送信しないとキャンセルされてしまう事が判明しました。
USBのコマンドパケットは64バイトなのでこれに収まるように、アドレスとデータを指定したコマンド列を1回で送信するとキチンとIDを返してくれるではありませんか!
チップ消去コマンドも動作しているようです!
バンザイ〜!
よろこびも束の間でした、128バイト書き込みしているのに4バイトしか書き換わっていない感じです。
Flashの書き込みは書きますよコマンドを送ってから1ページ分(128Byteとか256Byteとか)を連続処理する必要があって、1パケット分つまり64バイトで指定できる所までしか処理が行われていなっぽいです。書き込み完了フラフを検査すると1バイトで止まってしまいます。
これを解決するには、USBチップのファームウェアである程度の処理を行う必要がありそうです。
更に高速化するにはCPLDにも手を入れる必要があるわけですが、低速でもいいから良い方法が無いかなぁ
まだ汎用FWの動作すらきちんと理解していないので下記ロジックでいいのかなとぼんやり考えています。
1.ファームにPageWriteのコマンドを追加
2.1ページ分の書き込みデータをホストからバルク送信
3.データが届いたら1バイトWrite動作し書き込み完了を待ちアドレスをインクリメント
4.1ページ分Writeを繰り返して完了
パイプでデータを受け取るのは割り込み処理のようなので、書き込み完了待ちなんかしてはまずいような気もします。時間の掛かる処理は TD_Poll で行うとどこかで見たような気がするし、そうなると書き込みデータは一旦USBチップ内のデータエリアにプールして書き込み中でもホストに応答できるようにする必要がありそう、これはなんだか大変そうです(汗
このへんの動作を理解するにはFLASHでは確認が大変なので、キャラクタLCDでも接続して実験したほうが手っ取り早いかもしれないですね
次へ →
↑PageTop
E-mail : saza00@mail.goo.ne.jp
[その1] [その2] [その3] [その4] Index に戻る