自作キーボードの「メモリ」について調べてみた

自作キーボードではマイコンを使います。Pro Micro等のマイコンボードを使うことが多い印象です(マイコン類を基板に直接実装するものも割と見かけます)。
このマイコンにおけるメモリ(記憶領域)、いろいろと種類があるようです。
これまではなんとなく聞き流していましたが、いい機会なので軽く調べました。

目次


0. おことわり

この記事は2023年12月時点の情報に基づいています。
そのため、あなたがこの記事を読んでいる時点では、古い情報になっている可能性があります。

また、一個人である私が調べた結果をまとめた記事になっています。
そのため、この記事の内容が正しいという保証はどこにもありません。
あくまで一つの事例として参照するにとどめてください。

しっかりとした公式情報をもとに調べるのがベストではありますが、今回は公式情報にたどり着くor読み解くことができなかった部分も多いです。
明らかな誤りを見つけた場合、優しく指摘してもらえると助かります。

……というか、ちゃんとした背景を持った専門家がこの辺ちゃんと書いてくれると嬉しいです。

1. ROMとRAM (1)

コンピューターの記憶領域としてよく出てくる言葉に「ROM」と「RAM」があります。
これについて、簡単に。

  • ROM (Read Only Memory) … 不揮発性(電気がなくてもデータ消えない)
  • RAM (Random Access Memory) … 揮発性(電気がないとデータ消えちゃう)

ROMはデータを長いこと保存しておくためのもの、RAMは一時的な作業のためのデータを保存しておくためのもの、とざっくり分けることもできそうです。

2. 私がよく使うマイコンボード

私は以下のボードをよく使いますので、それらで使用されているメモリ関連の用語について調べます。

  • Pro Micro (およびその互換機)
    • フラッシュメモリ : 32KB
    • EEPROM : 1KB
    • SRAM : 2.5KB
  • RP2040-Zero
    • フラッシュメモリ : 2048KB (2MB)
    • SRAM : 264KB

「フラッシュメモリ」「EEPROM」「SRAM」の3つの言葉が出てきました。

3. ROMとRAM (2)

前述の3つの言葉について、ROMとRAMのどれに当たるのか確認します。
あわせて、ROMやRAMにはどういった種類のものがあるのかも簡単に確認します。

  • ROM … 不揮発性(電気がなくてもデータ消えない)
    • EPROM (Erasable PROM) … 書き換え可能
      • UVEPROM … 紫外線で消去してから書き込む
      • EEPROM … 電気的に消去と書き込みが可能
      • フラッシュメモリ … EEPROMの一種、ブロック単位で消去や書き込みが可能
    • OTP (One Time PROM) … 一度しか書き込めない
  • RAM … 揮発性(電気がないとデータ消えちゃう)
    • SRAM (Static RAM) … 電源供給があればデータを保持できるっぽい
    • DRAM (Dynamic RAM) … キャパシタに電荷を蓄えることでデータを保持する

フラッシュメモリとEEPROMがROMに分類されるもの、SRAMがRAMに分類されるもの、ということがわかりました。

キーボードをPC等から外して電源供給が無くなっても、キーボードのファームウェアやキーマップは失われません。
つまりROMにそれらのデータが書き込まれているはずです。

……調べた結果、Pro Micro+QMK/VIAを使ったキーボードの場合はEEPROMにキーマップが保存されるようです。
そうするとフラッシュメモリにはファームウェアが保存されるのかな?

RP2040-ZeroにはEEPROMがありませんが、QMK/VIAを使用した際にキーマップの保存は可能です。
これは推測ですが、フラッシュメモリの一部をファームウェア用に、別の一部をキーマップ用に、というふうに領域を分けて使っているのではないでしょうか。

4. 終わりに

なんだか推測の多いふんわりした記事になってしまいました。
ほんとに誰かちゃんと書いてくれー!

この記事を書くにあたり、以下のサイトを参考にしました。
ありがとうございます。

https://www.chip1stop.com/sp/knowledge/054_types-and-featurs-of-memory
https://www.itmedia.co.jp/news/articles/1706/01/news051.html
https://ht-deko.com/arduino/promicro.html
https://www.waveshare.com/wiki/RP2040-Zero
https://zenn.dev/3araht/articles/2a594a50ae006a