組み込みソフトウェアの開発で必要となるメモリの知識について
はじめに
組み込みソフトウェアのプログラマ向けにメモリの特性についてまとめました。 プログラムから観るとメモリはただのアドレスにしか過ぎませんが、特性を理解しプログラミングに役立てて頂ければと思います。
メモリの種類
揮発性メモリ
- 電源を切るとデータが失われる。
- RAM(Random Access Memory)と言う。
- 自由に読み書きできる。メモリマップドI/Oであれば特定のアドレスに対して直接読み書きできる。
DRAM(Dynamic RAM)
├─ SDR-SDRAM(Single Data Rate-Synchronous DRAM)*SDRAMのこと
└─ DDR-SDRAM(Double Data Rate-DRAM)
SRAM(Static RAM)
不揮発性メモリ
- 電源を切ってもデータは失われない
- ROM(Read Only Memory)と言う、、、が今は当たり前のように書き込みもできる。
- 読み書きに制限がある。読み書きするにはお作法がありドライバなどがあると便利。
Flash
├─ NAND型フラッシュメモリ
└─ NOR型フラッシュメモリ
EEEPROM(Electrically Erasable and Programmable ROM)
外部メディア
HDD
CD
DVD
SDカード
各メモリの特性
DRAM(Dynamic RAM)
- 一定時間経つと自然放電によりデータが消える。
- データ保持のために、リフレッシュ、プリチャージと呼ばれる操作が必要となる。
- リフレッシュは放電で失った電荷を定期的に再充電するための操作、プリチャージはメモリアクセス時に失った電荷を再充電するための操作。
SDRAM(Synchronous DRAM)
- クロックに同期して高速に制御が可能なDRAM。
- クロック信号の立ち上がりのときのみデータを転送する。
DDR-SDRAM(Double Data Rate-SDRAM)
- メインメモリに使用される。
- クロック信号の立ち上がり、および立ち下がりのタイミングでデータを転送する。
SRAM(Static RAM)
- キャッシュに使用されている。
- 電源が供給されている限りデータは消えない。
- SRAMに小さな電池を配置することで、電源が供給されない間も記憶情報を保持することができる ⇒ 不揮発メモリとして扱うことができる。
NAND型フラッシュメモリ
- SSD(Solid State Drive)で使用されている。
- ページ単位(1KB、2KB、4KB)で読み出し/書き込み、ブロック単位(32ページ、64ページ、128ページ)で消去。
NOR型フラッシュメモリ
- CPU内蔵のフラッシュに使用されている。
- 格納されているプログラムコードをRAMにコピーしなくても直接実行できる。
- バイト単位で読み出し(揮発性メモリと同様にアクセス可能)、バイト単位で書き込み(コマンド必要)、セクタ単位で消去(コマンド必要)。
- 0→1のデータ書き込みを行うことができないため、必ず書き込み対象のセクタをイレーズ(対象領域のデータがすべて0xFFFFとなる)してから書き込む。
EEEPROM(Electrically Erasable and Programmable Read Only Memory)
- バイト単位で消去/読み出し/書き込み。