Sazanami Online

カメレオンUSB ROM Readerの試作

[その1] [その2] [その3] [その4] Index に戻る
Flash ROM
汎用I/O+汎用FWで48本ものI/OがPCから操作できるようになったので、手始めにFlash ROMの読み取りを行いました。
Winbond W29C020CW29C011Aは5VのFLASHですが、データシートを見ると入力はそれぞれ2Vと3V入力となっているのでそのまま接続しても問題なさそうです。古い物は書き込み電圧に12Vが必要ですが、これらは5Vなので書き込みできればいいなぁ〜とか思っています

DIP32P FLASH ROM 1M/2M/4Mbit
nc/A18132Vdd
A16231#WE
A15330A17
A12429A14
A7 528A13
A6 627A8
A5 726A9
A4 825A11
A3 924#OE
A2 1023A10
A1 1122#CE
A0 1221DQ7
DQ01320DQ6
DQ11419DQ5
DQ21518DQ4
GND1617DQ3
↑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/Vpp128Vdd
A12227A14/#PGM
A7 326A13
A6 425A8
A5 524A9
A4 623A11
A3 722#OE
A2 821A10
A1 920#CE
A0 1019DQ7
DQ01118DQ6
DQ11217DQ5
DQ21316DQ4
GND1415DQ3

窓付き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 に戻る