de IBY

めざせ知識の無駄遣い

Arduino製EEPROMライタ『MEEPROMMER』を作った

今やっている工作でEEPROMを使う必要があるため,EEPROMライタについて調べました.

 

軽く検索をかけたところ,中華製のライタがほとんどで,値段も平均して8000円と結構高めな印象.

 使いたいEEPROMは今のところ一種類(28Cシリーズ)だけなので,わざわざ高性能なものを揃える必要はないと思い,PICKIT4とかを使ったものとか何かないものかと調べていたところ,Arduinoを使って28Cシリーズのライタを自作したというフォーラムを発見しました。

forum.6502.org

 

MEEPROMMERと名付けられたこのライタ,検索したところ日本語で書かれた紹介記事を見つけることができなかったので,記事に残しておくことにしました.同じように安価な28CシリーズのEEPROMライタを探している人の助けになれば幸いです.

 

記事を頼りに必要な部品を揃えましょう.ほとんどの処理をArduino氏がやってくれるのでハードウェアは少なめです:

  • EEPROM
  • Arduino
  • 74HC595×2
  • ゼロプレッシャーソケット(28Pin,600mil)
  • パスコン×3
EEPROM

今回は28C256を使いました.DigiKeyにあったので,マルツに取り寄せてもらいました.

Arduino

フォーラムではArduino Nanoを使っていましたが,ピンアサインがだいたい同じなので手持ちのUnoを使いました.

74HC595

8ビットシフトレジスタ.データバス+アドレスバスがArduinoのピン数よりも多いので,入力を増やすために使います.秋月で買いました.パスコンは0.1uFです.

ゼロプレッシャーソケット

手持ちのものを使いましたが,まだ千石にあると思います.

 

部品を集めたら回路を組みましょう.MEEPROMMERで必要となる情報(ソフトウェアも)はすべてGitHubにまとまっているので,こちらの Hardware 内に回路図があります.配線のミスに気を付けて気合で組んでいきましょう.

f:id:ibv:20210316180215j:plain

簡易的にブレッドボードに実装しましたが,ArduinoシールドっぽくしたeagleデータもGitHubにアップロードされています.

 

ハードウェアを組んだら,ソフトウェア側の環境を構築しましょう.GitHubリポジトリ内にある「MEEPROMMER.jar」が実行ファイルです.が,このソフトウェアを動作させるためにはシリアル通信のJavaライブラリであるRXTX Libraryを入れる必要があります.Windowsの場合はこちらを参考にしましょう.*1

 

環境構築をして,GUIが表示されたらあとはArduinoスケッチを書き込んでOK!のはずですが,私の環境では不具合が起こったため,同じ不具合が起こった人に向けて対処法なども記録します.

 

私の環境での不具合は,「読み取り・消去はできるが,書き込みの途中でハングアップして止まってしまう」というものでした.フォーラムには「28C256のプロテクトがかかっていた」というものがありましたが,どうもそうではなさそうでした.信号を調べたところ,スケッチのfast_write関数の中のwhile文がずっと回っているためにハングアップしてしまうことがわかりました.そこで,無限ループを防ぐためにwhile文の中に if(cyclecount==0xff) break; という感じで抜ける処理を書いたところ,正常に書き込まれるようになりました.本来であれば,ここの処理は書き込むデータとROMに書き込まれたデータが一致するか確かめるフェーズで,勝手に抜け出すと照合が取られない可能性があるので対症療法的な解決策ではありますが,まあ何も書き込まれなくなるよりはマシやろという感じで….

f:id:ibv:20210316183119p:plain

ハングアップが起きて,途中までしか書き込まれていない

 

f:id:ibv:20210316183642p:plain

きちんと書き込まれている.書き込み元との差分もなく,いい感じ

 

ということで,紆余曲折があったもののArduinoでEEPROMライタを作り,書き込みを行うことができました.引用元のフォーラムには他にも複数の誤作動が報告されているので,うまくいかない場合はそちらをご参照ください.

 

お読みいただきありがとうございました.よいEEPROMライフを!!

*1:Linuxソースコードからのビルドをやろうとしましたが,RXTX Libraryが現在サポートされてない古いライブラリで,少なくともJDK 11環境ではちょっと段階を踏まないとビルドできなさそうだったので諦めました.