EPROM とは
EPROM(Erasable Programmable Read-Only Memory)は、その名の通り、データを消し去ったり書き込んだりできるような ROM を指します。 しかし、単に EPROM といったときには UV-EPROM(Ultraviolet EPROM)を指すことが一般的です。 UV-EPROM は、その名に示されるように、データを消し去るために紫外線を使う EPROM です。 そのため、図 1 のように UV-EPROM の IC パッケージには紫外線を照らすための窓がついていて、マイクロチップが中から顔を覗かせています。 セラミックでできたデカい図体は所詮飾りに過ぎず、UV-EPROM の本体はこの小さなシリコンダイであるわけです。
![UV-EPROM M27C256B-10F1 の外観](./01_uveprom.webp)
ところで、このページでは特に断らない限り UV-EPROM を指して EPROM と呼ぶことにします。
EPROM に思いを馳せる
EPROM のデータを消し去る前に、少しだけ EPROM に思いを馳せましょう。
N チャネル MOSFET の構造
準備運動として N チャネル MOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor)の構造と動作を思い出してみましょう。
図 2 は N チャネル MOSFET の模式図です。 N チャネル MOSFET は P 型半導体の上に作られます。 P 型半導体の上に 2 つの N 型半導体を作り、それらをドレイン端子(Drain: D)とソース端子(Source: S)とします。 それらの間に酸化物(SiO2)の絶縁層を挟んでゲート端子(Gate: G)を作ります。
ドレイン・ソース間は P‑N‑P 接合になっているため、電圧を加えても電流は流れません。 ここで、ゲート・ソース間を正に印加すると、絶縁層があるため電流こそ流れませんが、絶縁層を挟んだ P 型半導体の表面に電子が集まってきます(図 3)。 この電子によって薄い N 型のチャネル(反転層)が作られ、ドレイン・ソース間を電流が流れるようになります。
この動作を利用して、N チャネル MOSFET をスイッチのように用いることができます。 ゲート・ソース間に電圧を加えなければドレイン・ソース間は OFF 状態(非導通状態)となり、電圧を加えれば ON 状態(導通状態)となります。
EPROM セルの構造
EPROM の「セル」とは、1 ビットの情報を保持するための最小の構成を指します。 EPROM セルの基本的な原理は N チャネル MOSFET とほとんど変わりありません。 ただし、少しばかり細工を施して、データを保持するための仕組みを作る必要があります。
図 4 は EPROM セルの模式図です。 N チャネル MOSFET の構造と見比べてみると、ゲート部分が二段構成になっていることに気が付きます。 N チャネル MOSFET でゲート端子と呼ばれていた端子はコントロールゲート端子(Control Gate: CG)と呼ばれ、酸化物(SiO2)の絶縁層とトンネル酸化膜(Tunnel Oxide: TNOX)とで挟まれた部分は浮遊ゲートやフローティングゲート(Floating Gate: FG)と呼ばれます。 浮遊ゲートは両側から 2 つの絶縁層で挟まれているため、電気的に孤立しています。 EPROM はこの浮遊ゲートを使ってデータを保持します。
まずは EPROM セルをただの N チャネル MOSFET として使うことを考えてみましょう。 コントロールゲート端子に印加する電圧をゆっくりと大きくしていきます。 すると、ある程度の大きさの電圧を加えたところでドレイン・ソース間を電流が流れるようになります。 N チャネル MOSFET と同様に、絶縁層やトンネル酸化膜を挟んだ P 型半導体に反転層が作られるためです。 この時、コントロールゲート端子に印加されている電圧の大きさを VG1 と名付けて憶えておきましょう。
ここで、コントロールゲート端子に大きな正の電圧を加えます。 やはり P 型半導体の表面に電子が集まってきますが、大きな電圧のおかげでいつもより元気になっている電子はトンネル酸化膜を越えて浮遊ゲートに入り込んできます。 この電子は、コントロールゲート端子に印加されている電圧が小さくなると元気でいられなくなります。 そのため、トンネル酸化膜を越えられず、浮遊ゲート内に閉じ込められてしまいます(図 5)。
この状態で先ほどと同様にコントロールゲート端子に印加する電圧をゆっくりと大きくしていき、VG1 と同じだけの電圧が加えられているときを考えます。 先ほどはこの大きさの電圧を印加すると 2 つの絶縁層を挟んだ P 型半導体の表面に反転層を作れるほどの電子が引き寄せられていましたが、今回は浮遊ゲートになる電子が邪魔をしており、十分な電子を P 型半導体の表面に集められません(図 6)。 コントロールゲート端子に印加する電圧をもう少しだけ大きくしてあげると、無事に反転層が作られ、ドレイン・ソース間を電流が流れるようになります。 つまり、EPROM セルの伝達特性(ID–VGS 特性)は、浮遊ゲートに電子が閉じ込められているか否かによって図 7 のように変化します。
浮遊ゲートに閉じ込められた電子を逃がしてやるためにはどうしたら良いのでしょうか。 ここで紫外線が登場します。 紫外線や可視光線を含む「光」はテレビや Wi‑Fi で使われるような電波と同じ電磁波の一種です。 強さの等しい電磁波は波長の短いものほど大きなエネルギーを持ちます。 紫外線の波長は 400 nm 以下とかなり短く、それ故に大きなエネルギーを持っています。 太陽から照り付ける紫外線は肌に当たると日焼けを引き起こしますからね。 紫外線が EPROM セルに照らされると、浮遊ゲートに閉じ込められている電子はそのエネルギーを受けて元気になります。 元気になった電子はトンネル酸化膜を越えられるようになり、浮遊ゲートから逃げ出していきます(図 8)。
一般的な EPROM は浮遊ゲートに電子が閉じ込められていないときに High レベルが、電子が閉じ込められているときに Low レベルが出力されるように作られています(図 9)。 High レベルと Low レベルはそれぞれ 1 と 0 に対応します。
![EPROM セルの結線図](./09_kessen.webp)
ここまでの話から、EPROM にデータを書き込むときは 1→0 方向、データを消し去るときには 0→1 方向に変化させることしかできないことがわかります。 また、何も書き込まれていない EPROM は全てのビットから 1 が読み出されます。
EPROM を読み書きする環境を揃える
EPROM だけがあっても仕方がありません。 EPROM にデータを書き込んだり、EPROM からデータを読み出したりするために EPROM ライタを用意する必要があります。 ふと足元に目をやると、丁度良いところに秋月電子通商から出ていた AKI-80 を使った ROM ライターキットが転がっていたので、これを使って EPROM を読み書きします(図 10)。 ホスト環境には PC-9801LV22 の上で動作する MS-DOS 3.30D を使います。 作業環境は図 11 のような雰囲気になりました。
![ROM ライターキットの外観](./10_akirom.webp)
![作業環境のイメージ](./11_environ.webp)
EPROM を読み書きしてみる
どいつもこいつも年季が入っていますから、きちんと動作してくれるのか確認しましょう。 何か適当なデータを用意して EPROM に書き込み、書き込んだデータを EPROM から読み出す一連の流れを試します。
書き込むデータを用意する
さて、書き込むデータは本当に何でも良いのですが、折角なのでランダムなデータを作ってくれるプログラム RANDGEN を作ってしまいました。 ソースコードを GitHub で公開しています。 ビルド作業に必要となるアセンブラやリンカ等も GitHub から入手できますから、これらを使うことで実際にプログラムを動作させることもできますよ。
今回使う EPROM M27C256B-10F1(図 1)の容量は 256 kibit、つまり 32 kiB です。 RANDGEN コマンドを使う場合は、次のように実行することで 32 kiB のランダムデータを得られます。 ファイルの名前は適宜設定してください。
RANDGEN 32768 >rand.bin
秋月の ROM ライタに付属している通信プログラム AKIROM は Intel HEX 形式のデータを扱います。 バイナリ式のランダムデータを Intel HEX 形式に変換するためのプログラム HEXUTL もまた ROM ライタに付属しています。 HEXUTL を使ってバイナリデータを Intel HEX 形式に変換するには次のように実行します。 バイナリデータの拡張子が BIN である場合、ファイル名から拡張子を省略できます。 成功すると元のファイル名の拡張子を HEX に替えたファイルが生成されます。
HEXUTL rand
ここで生成される Intel HEX 形式のファイルは、変換元のファイルの 2 倍以上のサイズになります。 利用可能なディスクの空き容量に注意してください(一敗)。 また、変換元のファイルが別のディレクトリに位置している場合、変換後のファイルは変換元のファイルと同じ階層に生成されます。 気を付けてください(二敗)。
ちなみに、同じ仕事を Unix ライクなシステムの上で行うには、次のようなコマンドを実行します。 便利でいいですね。
head -c 32768 /dev/urandom >rand.bin objcopy -I binary -O ihex rand.bin rand.hex
データを EPROM に書き込んで読み込む
HEX ファイルを用意できたらいよいよ書き込み作業を行います。 書き込み作業を行うにはコンピュータと ROM ライタとの間で通信を行う必要があります。 通信には RS-232C として知られるシリアルポートを用います。 ケーブルにはよくあるストレート結線のシリアルケーブルを使えます。 ただし、ROM ライタも PC-98 も DE-9 コネクタ(D-sub 9 pin)ではなく、DB-25 コネクタ(D-sub 25 pin)が搭載されていることに注意が必要です。 ROM ライタ側はコネクタを適当に付け替えてやることで DE-9 コネクタに対応できます。 この場合、当然適切に結線しなおしてやる必要があります。 図 10 の ROM ライタはコネクタを付け替えてあります。 PC-98 側は適当は変換コネクタで誤魔化しましょう。
さて、コンピュータと ROM ライタとを適切に接続したら ROM ライタの電源を入れて AKIROM コマンドを実行します(図 12)。 AKIROM コマンドは TUI(Text-based User Interface)を採用しており、矢印キーや Return キーを使って直感的に操作できます。 AKIROM コマンドを起動すると、まずは EPROM の型番(容量)について訊ねられます。 今回使う EPROM は 27256 系ですから、適切に選択します。 EPROM の型番を選択したら、続いて HEX ファイルを読み込みます。 Load HEX File を選択し、ファイル名を入力します。 HEX ファイルの読み込みが完了したら、とうとう EPROM にデータを書き込みます。 Write & Transmit を選択すると、ROM ライタにデータが転送されます。 転送には少し時間が掛かります。 大体 30 秒くらいです。 書き込みが完了すると、自動的に EPROM のデータチェックが行われ、チェックサムが計算されます。 今回は E967H でした。
うん、これらのシステムは老骨に鞭打ってちゃんと仕事をしてくれそうです。 ああ、今回は続く実験のためにいくつかの EPROM に同じデータを書き込んでおきます。 同じデータを書き込む場合、Write from AKI-RAM を選択します。 このモードではシリアルポートからデータを転送しないため、若干速く済むはずです(いや、あまり変わらないか?)。
![AKIROM コマンドの動作画面](./12_screen.webp)
EPROM のデータを消し去ってみる
先にも述べたように、EPROM に書き込まれたデータは紫外線を照らしてやることで消し去ることができます。 本来であれば、強力な紫外線を発する専用の機器を用いるものですが、時代も令和となればそのような機器を手に入れることも難しくなってきました。 ここでは、身近にある光源を使って EPROM のデータを消し去ってみます。
EPROM のデータシートを読む
図 1 に示した EPROM M27C256B-10F1 のデータシートにはデータを消し去る方法について記載されています。 これによると、400 nm より短い波長の光に照されるとデータが消え始め、蛍光灯なら 3 年間、直射日光なら 1 週間ほどの時間でデータが消え去るようです。 EPROM のデータを消し去りたくない場合には、窓にシールを貼って紫外線から保護することが推奨されています。 また、推奨されるデータの消し去り方は 253.7 nm の紫外線を照らすことで、積算線量は最低でも 15 W·sec/cm2 であると記載されています。 これは、12 mW/cm2 のランプを使って 15–20 分の間照らすことに相当します。
太陽光
太陽から発せられる太陽光には、可視光線のみならず赤外線や紫外線も含まれています。 データシートにも直射日光に 1 週間晒すことでデータが消え去ると書いてあります。 実際にやってみましょう(図 13)。
![EPROM の貴重な日向ぼっこシーン](./13_hinatabokko.webp)
EPROM は 1 週間ほど日向ぼっこを続けましたが、とうとうデータが消えることはありませんでした。 時間だけがむなしく過ぎ去りました。
もっと効率良く EPROM のデータを消し去りたい
太陽光はアテにならなかったので別の方法を探ります。 インターネットを歩き回っていると、古典コンピュータ愛好会による先行事例に辿り着きました。 この方法ではネイルアートで用いられるレジンを固めるための UV ランプを利用しています。 これを参考にして、今度こそ EPROM のデータを消し去りましょう。
DAISO の UV-LED ライト
使用する光源は DAISO で販売されている税込 330 円の UV-LED ライトです(図 14)。 電源を供給するために USB Micro-B コネクタを持つケーブルと USB アダプタが必要ですが、ライトに付属していないため別途用意する必要があります。 外箱に記載されていたライトの仕様を表 1 に示しておきます。
![DAISO で販売されている UV-LED ライトの外観](./14_uvled.webp)
項目 | 値 |
---|---|
使用 LED | 6SMD |
波長 | 365 nm + 405 nm |
電源電圧 | 5 V |
消費電流 | 0.9 A |
本体の側面にはボタンがついており、これを押すことで LED が点灯します。 短く押すと約 1 分間点灯した後に消灯し、長押しすると約 2 分間点灯した後に消灯します。 LED が点灯するとライト全体がほんのり発熱することから、過熱を防ぐための機能であると予想できます。
UV-LED ライトの改造
しかし、今回の用途ではもっと長い時間点灯を維持したいものです。 本体の筐体を開けて内部の回路を確認してみましょう。 図 15 に基板の外観を、図 16 に回路図を示します。
![UV-LED ライトの基板の外観](./15_kiban.webp)
![UV-LED ライトの基板の回路図](./16_circuit.webp)
この回路は次のような仕事をしています:
- MCU はボタン(K)を監視しています。
- MCU はボタン(K)が押されたことに気付くと、FET(Q1)のゲート端子を High レベルにします。
- FET(Q1)のゲート端子が High レベルになると、ドレイン・ソース間が ON 状態になります。
- FET(Q1)のドレイン・ソース間が ON 状態になると、LED に電流が流れ、LED が点灯します。
- MCU は一定時間が経ったら、FET(Q1)のゲート端子を Low レベルにします。
- FET(Q1)のゲート端子が Low レベルになると、ドレイン・ソース間が OFF 状態になります。
- FET(Q1)のドレイン・ソース間が OFF 状態になると、LED に電流が流れなくなり、LED が消灯します。
今回は LED を消灯しないようにしたいため、常時点灯するように改造を施します。 これは FET(Q1)のドレイン・ソース間を短絡することで実現できます(本来であれば、Q1 の ON 抵抗と同じだけの抵抗を挿入すべきです。 しかし、この値は大きくても 50–100 mΩ 程度であり、R1 と R3 とからなる電流制限抵抗と比較した際に十分無視できます)。 都合良く R5 と R2 のランドが空いていますから、ここを使って図 17 のように 0 Ω 抵抗やジャンパ線を取り付けてやります。 本当ならもっと上手にはんだ付けしてあげるべきです。 はんだゴテが手元にないからといってマイナスドライバを火であぶって代用するのはやめましょう。 改造後は電源を供給するとすぐに LED が点灯します。 眼を焼かれないように気を付けてください。
![FET(Q1)のドレイン・ソース間を短絡する](./17_kaizo.webp)
改造した UV-LED ライトを使ってみる
改造した UV-LED ライトを使って、実際に EPROM のデータを消し去ってみましょう。 ここでは、シリコンダイの大きさが異なる 2 つの EPROM IC を用意しました。 これらを図 18 のように UV-LED ライトの下に設置し、UV-LED ライトの電源を入れます。
![実験風景](./18_jikken.webp)
- ごろ
照射開始。
- ごろ
まだどちらも変化なし。
- ごろ
やはり変わっていない。
- ごろ
ダイの大きい方に変化があった。 Blank Check を行う度にエラーになるバイト数が 21298 とか 21358 とかに変化する。 ダイの小さい方は全く変化がない。
- ごろ
ダイの大きい方は Blank Check で 7 バイトがエラーになった。 ダイの小さい方は全く変化がない。
- ごろ
ダイの大きい方は Blank Check にクリアするようになった。 所要時間は大体 2 日と 6 時間くらい。 ダイの小さい方はこれっぽっちも変化がない。
- ごろ
ダイの小さい方はマジで変化がない。 やる気が感じられない。
- から ごろにかけて
Blank Check でエラーになるバイト数が徐々に減り始める。 複数回チェックすると値は不安定に変化する。
- ごろ
ダイの小さい方も消去完了。 所要時間は大体 1 週間くらい。
結果
先行事例と同様の方法で EPROM のデータを消し去れることを確認できました。 紫外線を照らし始めてから完全にデータを消し去るまでの間には、データの全く変化しない時間、読み出されるデータの不安定になる時間を経ていることがわかりました。 先行事例ではデータを消し去るまでに 1.5–3 日間を要していましたが、今回の再現では 3–8 日間を要しました。 これは利用した EPROM の差や UV-LED ライトの紫外線強度の差、また UV-LED ライトと EPROM との距離の差などが要因であると考えられます。
もっともっと効率良く EPROM のデータを消し去りたい
上の実験によって DAISO の UV-LED ライトを用いて EPROM のデータを消し去れることを確認できましたが、やや時間が掛かり過ぎているように感じます。 もっと早くデータを消し去るため、UV-LED ライトと EPROM との距離をもっと近付けてみましょう。
EPROM を UV-LED ライトに貼り付けた状態で使ってみる
図 19 のようにデータを書き込んだ EPROM を UV-LED ライトの本体に貼り付け、紫外線を間近で照射するようにしてみます。 今回は 2 つの EPROM IC をそれぞれ順番に消し去ってみます。
![EPROM を UV-LED ライトに貼り付ける](./19_pittari.webp)
シリコンダイの大きい EPROM IC
- ごろ
照射開始。
- ごろ
データに変化はない。 IC が UV-LED の熱でかなりあたたかくなっている。
- ごろ
データには変化がない。
- ごろ
気付いたらごっそり消え去っていた。 Blank Check で 674 バイトがエラーになる。
- ごろ
Blank Check で 91 バイトがエラーになる。
- ごろ
Blank Check で 12 バイトがエラーになる。
- ごろ
Blank Check で 2 バイトがエラーになる。
- ごろ
消去完了。 所要時間は 19 時間くらい。 ちなみに、消去完了時の EPROM IC の表面温度は 83.8 ℃ くらい。
シリコンダイの小さい EPROM IC
- ごろ
照射開始。
- から ごろ
Blank Check でエラーになるバイト数が緩やかに減少していく。 30 分で数百バイトくらいのスピード感。
- から ごろ
Blank Check でエラーになるバイト数が軽やかに減少していく。 30 分で数千バイトくらいのスピード感。
- から ごろ
Blank Check でエラーになるバイト数がどんどん緩やかになる。 1 時間で数百バイトから数十バイト、数バイトといったスピード感。
- ごろ
Blank Check で 1 バイトだけエラーになる。 かなり粘っている。
- ごろ
消去完了。 所要時間は 2 日間くらい。 EPROM IC も UV-LED 本体もかなり熱くなっている。
結果
データを消し去るまでに先行事例の再現では 3–8 日間要していたところ、EPROM と UV-LED との距離を近付けることで 2 日間以内に収められることがわかりました。 また、EPROM のデータが消し去られていく速度には変化があることもわかりました。
事後
約 1 ヶ月間酷使された UV-LED ライトは発熱に耐えられずにぐにゃぐにゃになってしまいました(図 20)。 変色している部分もあり、かなりマズそうです。 マジで火災の原因になりそうなので真似しないほうがいいと思います。
![変形した UV-LED ライトの筐体](./20_gunya.webp)
おわりに
おわりです。
腐ったミカンに紫外線を当てるとめちゃくちゃ光りますよ。 あ、やだ! やめて!
参考
- 電子情報通信学会編, 平野浩太郎著. 基礎アナログ電子回路. コロナ社, 1989, 236p. ISBN 4-339-00013-2
- 内富直隆. 半導体が一番わかる. 技術評論社, 2014, 208p. ISBN 978-4-7741-6457-1
- 桑野雅彦. メモリ IC の実践活用法. CQ 出版社, 2001, 240p. ISBN 978-4-7898-5252-4
- 福田永. 極薄酸化膜のキャリアトンネル現象と不揮発性メモリーへの応用. 応用物理. 1994, 63(11), pp.1106–1113. DOI:10.11470/oubutsu1932.63.1106
- 槻舘美弘. “フラッシュ・メモリの動作原理と応用”. Design Wave Magazine No.5. CQ 出版社, 1996, pp.47–50.
- STMicroelectronics. “M27C256B”. Mouser Electronics. Updated 2006-05-18, (Accessed 2024-04-29).
- 古典コンピュータ愛好会. “100均のUVランプでEPROMを消去できるか実験”. 古典コンピュータ愛好会. (Accessed 2024-03-30)
- 大創産業. “UV-LED ライト”. ダイソーネットストア. (Accessed 2024-04-29)