0
0

More than 1 year has passed since last update.

MEEPROMMER前編

Last updated at Posted at 2021-12-28

MEEPROMMERというEEPROMライターの記事がありました。

これを改造してEPROMライターを作ろうと思いつきました。

ROMはPROM->EPROM->EEPROM->Flashと変わってきました。EPROMはチップの真ん中に窓があり紫外線で消去して、高電圧(25V,21V,12V)をかけて書き込むタイプの部品でした。EEPROMは電気的に消せるようになったので、窓はありません。

EPROMは70年代から90年代にかけて主流だったので、かなりの数生産され中古部品で潤沢にあり入手しやすいと思われます。それに比べるとEEPROMが主流だったのはFlashが出てくるまでの5年程度の期間だったので、生産量はかなりすくなかったと思われます。

DIP 600milのEEPROMは新品を購入できるみたいですが、1000円以上もしてかなり高価です。おそらく同じ容量の中古のEPROMは100円くらいで買えることもあると思います。

大昔の中学生時代にEPROMライターを作ろうとして、いまだに未完成案件になっています。

完成してないのは紫外線のイレーサーの問題があったためでもあるが、今はamazonやaitendoさんで安いのがあるので今度購入するつもりだ。

MEEPROMMERのリポジトリはここです。

Hardwareの下に非常に分かりやすく書かれた回路図があります。ターゲットは32KByteのEEPROMの28C256のようです。

こちらのターゲットはまずEPROMの27C256にします。ほぼほぼピンは同じなので回路図に沿ってワイヤリングしていきます。

データーシートを見るといくつかピンが違います。

image.png

A14は1ピンから27ピンに変更して、VPPはとりあえずVCCにつなぎます。

これで回路は完成なのでPlatformioの設定ファイルを用意して、Arduinoのスケッチを書き込みます。

ワーニングは出ますがコンパイルできます。ボーレートはflashromが115200でうまく動かなかったので57600に変えました。

ファームの用意ができたのでホスト側のプログラムを用意します。MEEPROMMERはJavaで書かれたGUIのプログラムとPythonのコマンドラインのツールが用意されていました。ところがPythonのスクリプトは不完全なものでした。

しかたないので、Pythonで続きを書こうかと思ったのですが、いろいろ調べていたらMEEPROMMERを大きなEEPROM対応にしている人のところに完全なスクリプトがありました。おそらくどっかのアーカイブにはあってコミットし忘れたのかもしれません。

ちょっと変更されているので、MEEPROMMER向けにバックポートしてみました。

% ./CommandlineClient/meepromer.py -h
usage: meepromer.py [-h] [-w | -W | -r | -d | -v | -V | -S] [-a ADDRESS]
                    [-o OFFSET] [-b BYTES] [-p PAGE_SIZE] [-f FILE] [-c COM]
                    [-s SPEED]

Meepromer Command Line Interface

optional arguments:
  -h, --help            show this help message and exit
  -w, --write           Write to EPROM
  -W, --write_paged     Fast paged write to EPROM
  -r, --read            Read from EPROM as ascii
  -d, --dump            Dump EPROM to binary file
  -v, --verify          Compare EPROM with file
  -V, --version         Check burner version
  -S, --signature       Check EPROM Electonic Signature (set A9 to 12V)
  -a ADDRESS, --address ADDRESS
                        Starting eeprom address (as hex), default 0
  -o OFFSET, --offset OFFSET
                        Input file offset (as hex), default 0
  -b BYTES, --bytes BYTES
                        Number of kBytes to r/w, default 32
  -p PAGE_SIZE, --page_size PAGE_SIZE
                        Number of bytes per EPROM page e.g.:CAT28C*=32,
                        AT28C*=64, X28C*=64, default 32
  -f FILE, --file FILE  Name of data file
  -c COM, --com COM     Com port address
  -s SPEED, --speed SPEED
                        Com port baud, default 57600

Read source for further information

EPROMはVPPが12Vになった256kBitの頃から部品番号を返す仕組み(シグネチャ)が入りました。メーカーが1バイトで部品番号が1バイトの2バイトになります。256しかメーカーがない平和な時代でした。FlashになるとCFI仕様になり、メーカーと部品番号が2バイトづつに拡張されます。USBも2バイトづつですね。

これを読めるように拡張してみます。まずArudinoのファームウエアーにSを追加して2バイトを読んで返すようにします。

Pythonのスクリプトにもコマンドを追加します。

シグネチャを読み出すにはA9ラインに12Vを加える必要があるので595から切り離して、12Vを加えられるようにします。

IMG_20211228_090426.jpg

% ./CommandlineClient/meepromer.py -S -c /dev/cuaU0
EPROM Signature:
20 8D
ST M27C256B
ST M27C256B*PLCC32

image.png

読めました。デバイスハックの一歩目は正しい値が読めるところから始まります。

VPP関係の部品が手元にないので、書き込みについては後日いじります。

まずは27C256で使えるようにして、その後他のチップもサポートしないな。

Type Pin Size VPP Address Signature
27C32 24 4K 21V A0-A11 NO
27C64 28 8K 21V A0-A12 NO
27C128 28 16K 21V A0-A13 NO
27C256 28 32K 12V A0-A14 YES
27C512 28 64K 12V A0-A15 YES

MC34063で5Vを昇圧してVPPを作るようにしました。

写真(2022-04-09 11.41).jpg

適当に実装したら、コイルとレバーがギリギリぶつからない状態でした。

まずは64,256をサポートしたい。64はPGMピンがあり256にはない。しかしEEPROMにはPGMと同等のWEが復活している。64のEPROMを動くようにしてから256対応を考えるのが良さそう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0