あるシステムで設定情報を保存する方法についてどう考えてるの?
と聞いたらマイコン内のフラッシュROMに書き込むんだと言われて、
いや、そのマイコンのROMはプログラムを書き込むことしか想定されていないのでは? と。
あるシステムでは少量の設定情報を保存するのにマイコン内蔵のROMを使っているが、
これはプログラム格納用のROMと分離されたものになっている。
このような分離されたROMがあるか調べたらなかったので、
それは外付けのEEPROMを付けるべきだと思っていた。
プログラムとは別のユーザーデータをROMに格納する話を調べるとこんなのが出てきた。
フラッシュメモリをEEPROMとして使う「裏技」 (EDN Japan)
消去が遅くて回数が限られるという欠点を踏まえた上で使えばいいですよとある。
ただ、本当に問題はないのかと気になって調べたらわかったことがあった。
この記事はSTマイクロの人が回答しているが、
同社のSTM32ではフラッシュROMを2つのバンクに分けており、
消去・書き込み中も、他方のバンクについては通常通りアクセスできるという。
すなわち2つのバンクを全部プログラム用に使うこともできるが、
1つをプログラム用、もう1つを設定情報用と使い分けるのは想定された作りになっているわけである。
一般のマイコン内蔵フラッシュROMがそうなっているとは言えない。
調べたところ今回採用すると言っているマイコンはそうはなっていなかった。
ところでEEPROMとフラッシュROMの指すところは少し違うらしい。
EEPROMは電気的に消去・書き込みができるROMを表す言葉で、
今どきマスクROMやUV-EPROMなど作られることは少ないので、ROM=EEPROMと言っても間違いではない。
この点ではフラッシュROMもEEPROMに含まれるのだが、
部品としてのEEPROMはワード単位や比較的少量のデータ単位で読み書きできるものを指す。
これに対してフラッシュROMは一定のまとまりをもったページ単位で消去を行うものを指す。
フラッシュROMの書き込みはビットを1→0にすることしかできない。
消去を行ってデータを全部1にしてから、書き込みを行う手順を踏むため、
少量のデータの保存に手間と時間がかかる傾向がある。
一方で大容量化には適している。概ね1Mbitが境目になるみたい。
EEPROMと呼ばれる部品も実態としてこういう動きなのかもしれないが、
消去を経ずに書き込み命令を出せばよいので取扱が便利である。
このような使われ方の差もあって書換(消去)可能回数が多い傾向がある。
例えばEEPROMは100万回、NOR Flashが10万回など。
先の「フラッシュメモリをEEPROMとして使う裏技」で言及されているのは、
フラッシュの消去は時間がかかるが、書き込みだけなら速いので、
書き換えごとに違う領域に書き込み、全部埋まったら消去するというやり方があるという話だった。
確かにそういう工夫をして使っているものを見たことはある。
一方でマイコン内蔵のROMは読み出しが高速であるというメリットもある。
書き換え回数も1万回もあれば十分と言うケースも多いだろう。
ただし、これはプログラム用と設定情報用でバンクが分かれている場合の話。
もしも分かれていない場合は消去・書き込み中のフラッシュへのアクセスが止まる。
このため、消去・書き込み処理中はSRAM上でプログラムを動かす必要がありそうだ。
ページ単位での消去ができるので、プログラムデータごと消去してしまうことはないが。
というわけで整理すると、
- 書き込み頻度が高い場合は基本的には外付けのEEPROMを使うべき
- プログラムと設定情報でROMのバンクを分けられるなら通常動作を継続しながら使うことはできる
- プログラムと同じバンクを書き換える場合は、書換中はROMが読めなくなるのでSRAM上でプログラムを動かすなどする必要がある
(結果として通常動作を継続しながら書き換えることが難しい) - フラッシュROMの消去にかかる時間には注意が必要
(消去済みの領域に書き込むならむしろ速い場合もある) - 読み込みが高速である点は内蔵ROMを使うメリットである
こうして整理してみると、バンクが分けられないとかなり不便である。
通常動作の中で消去を行うのはほぼ困難なので、ここで制約されることは考えられる。
ただ、今回のケースは上記条件に照らして絶対不可能とも言い切れないところが悩ましい。
でも常識的に考えてそういう使い方する意味は乏しいと思うのだけどね。
わざわざそんな面倒なことやるんかいと。
あえて外付けのEEPROMを付けるのはそれだけの価値があるからだという話なんだと思うんですけどね。
高速・高頻度書き込みというところに価値を見いだしにくいのはあるが、
そこに価値を見いだせるケースはそれなりに多いとは思うんですがね。