EPROMライタを汎用ロジックのみで作りたい

記事作成日時:2022-06-27 00:07:59
最終更新日時:2022-07-26 23:37:47

ちょっとEPROMライタが必要になったので作ってみました。
例の如く汎用ロジックICのみで、です。
もう作ることもないでしょうが備忘録的にまとめておきます。まとめておいてもロジックICだけでEPROMライタを作るという人はそう多くなさそうなので不必要な情報かもしれませんが(笑)

RS-232Cの負電圧がなんかうまく出ないとかなぜか書き込みデータが97->98->99...となってほしい所97->96->96->96...となっておかしいとかいろいろありましたがそれはおいおい追記します。(多分)
記事を書きたくても時間よやる気が足らん。そのため情報が薄いのは仕方なし。

まず、UV-EPROMとは紫外線を当てると全領域が消去され(全領域を0xFFになる)、高電圧をかけ書き込みパルスを与えると任意の値を書き込むことができる(H->L方向のみ)ROMデバイスの一種です。
ちなみにEPROMは窓に光を当てると起電力が発生します。 このツイート を見てもらうとわかりますが、確かに起電力が発生しています。また、 ここ では電卓を動かしていますね。すごい。

このような魅力的なデバイスを使っていこうと思います。

さて、この書き込み装置ですが、この書き込み装置はパソコンからRS-232Cで書き込みデータを受信し、そのデータをEPROMに書き込みます。
書き込みが終わるとEPROMからデータを出力させデータを読み取りパソコンに送り返すことでパソコン上でベリファイ(検証)させることで完全に書き込みが完了したかをチェックするという流れで次々と1Mbit分データを書き込む寸法です。
書き込みデータの中で0xFFは特別な意味があって、この場合は書き込みのプロセスをパスして読み取りのみを行います。こうすることで書き込み回数を減らしちょっとEPROMにやさしいかもしれません。(どのタイミングでEPROMが痛むのかは不明。もしかしたら書き込み電圧を加えた時点で痛んでいるかもしれない。)
そして書き込みはパスしてもEPROMからは読み出しを行うのでこれを利用するとROMリーダになります。実は書き込み電圧を加えていなければ書き込みパルスを加えても問題ないとされていますが少し気分が悪いので気分的にそうしています。
0xFFを特別な用途で使ってしまっては0xFFを書き込みできないのでは? となるかもしれませんが、EPROMはもとよりL->Hの方向にしか書き込みでは操作できないため、すべてHの0xFFは書き込み動作では不要です。つまり、0xFFは特別な処理に割り当てても問題ありません。

こういった動作で装置をつくりました。


書き込みの制御を考える。

まず脳死でデータシートを眺めましょうか。
M27C1001(ALL DATASHEETより)
ここの17ページ、Figure 9が書き込みに関するタイミングの図のようです。
これを見ると書き込みパルスが95~105μsの間で、パルス発射前後は最低でも2μs間データを保する必要があるようです。

また、ベリファイのためにデータを読み出す際には書き込みから4μs開けるなどなどありますね

他にもいろいろありますが、早くても遅くてもいけない書き込みパルスの100μsを基準にして進めていけば何とかなりそうだということで設計を進めていきました。
ぱぱぱーっと必要そうなタイミングを書き出した後、ロジックICの4017という10進カウンタをベースにタイミングチャートを引いてみました。
EPROMライタ タイミングチャート cnt_clkは4017に実際に入るクロックでパソコンからのデータ受信待の際にクロックの供給を止めていることを示しています。

クロックはreceive(RS-232Cモジュールからのデータ受信完了フラグ)が立ったらクロックを供給開始して書き込みプロセスを始めます。

まずバスを転送モードに設定(transfer)し、シフトクロックを供給することで受信データを書き込みレジスタに転送します②

転送はSPIモドキで行い、完了後③~⑤の間書き込みレジスタの出力を有効にしてそのちょうど中間の④で書き込みパルスをEPROMに与えます。するとクロック1周期を100μsだとすれば前後に2μs以上開けているので安全に書き込みができるはずです。

バスがかち合わないように最低1クロック分開けてEPROMの出力に切り替えたいのですが、バス制御用のD-FFに与える信号の都合上色々あって2クロック分開けざる負えないため⑥すべてのバス出力を無効にしたのち⑦ではお休みします。

⑧でEPROMの出力を有効にした状態でレジスタにクロックを与えベリファイ用のデータを用意し、⑨で転送モードに切り替えRS-232Cの送信レジスタに読み取ったデータを転送します。

送信するデータを用意できたところで送信パルスをRS-232Cに送りベリファイデータをパソコンに送信、各状態をリセット、アドレス指定用カウンタをインクリメントを行い1byte分の書き込みは終了です。

これを128kbyte分繰り返します。


回路を考える。

回路図はまともに引いていないのでありません。ちゃんと図面引くほどでないうえにちょっと面倒だったので…(汗)
ホワイトボードに書いた制御用の回路図(モドキ)を一応出しておきます。あっているとは限りません。
EPROMライタ制御回路(仮) クロックは100μsを作りたいので家に転がっていた20.04MHzの水晶を11分周して作りました。
95~105μsを作られれば74123のようなワンショット回路などでもなんでも構いませんが、私はなるべく正確にしたかったので水晶で書き込みの制御に使うクロックと共用する形で作りました。


波形


転送パルスと書き込みパルス シフトパルス(青)と書き込みパルス(黄)
各種タイミング実測 ロジアナで実測


スポンサードリンク

動画

動画をわざわざ作るのも面倒だったので暫定で実験記録用の映像をそのままうpしました。
制御回路のテスト。EPROMを使わずに書き込みレジスタまでの通信が正常に動作するかのテスト。
EPROMの代わりにSRAMを使用して書き込みができるか試験
実際のEPROMを使ったテスト


コメント欄

投稿をすべて見る

最新の投稿を見る

投稿をすべて見る

投稿する場所
名前
メール
削除キー
添付画像(1投稿1枚10MBまで)
↓チェックを入れてからボタンを押してね!!認証エラーになるよ!!
削除する場所
削除する投稿ID
削除キー
↓チェックを入れてからボタンを押してね!!認証エラーになるよ!!
アクセス今日21PV累計37342PV

スポンサードリンク