前回一つ忘れていたのだが、
- ライターを用意する必要がある: PCで言えばOSのインストール作業にあたる事が、MCUでも当然必要である。ただし、MCUでは電源が入ると内蔵するFlash Memoryに書き込まれたプログラムを即座に実行する(ロードの必要すらない、というのはMCUはFlash Memoryから直接命令を読み取って実行するためで、SRAMで構成されるメモリ領域は、あくまでスタックとかデータといったものの格納ためにのみ使われるのが原則である。つまりPCの様に、プログラムをFlash MemoryからRAMにコピーするという動作は発生しない)。この場合問題になるのは、「どうやってFlash Memoryにプログラムを格納するか」である。実のところ、チップそのものにFlash Memoryへの書き込み回路を搭載しているMCUはそう多くない(技術的に難しい訳ではなく、確実にコストが上がるため)。またFlash MemoryではなくEEPROM(Electrically Erasable and Programmable Read Only Memory: 電気的に書き込めるPROM)を搭載しているMCUもあり、こちらは(書き込みに際して高い電圧が必要なため)更にオンチップで書き込み回路を搭載するのが難しい。
このため、プログラムのロード(というかFlash MemoryやEEPROMへの書き込み)には専用のライターと呼ばれるものを用意する必要がある。Photo01は簡易型ライターの一例で、Photo02の様にMCU(や、MCUを搭載した基板)をソケットに差し込み、外部から書き込みソフトを使ってプログラムを書き込むというわけだ。
Photo01: これは秋月電子通商で売られているPICプログラマーキット Ver.4。これに15Vの電源とシリアルケーブルを繋いでPCから書き込みを行う形。 |
Photo02: Photo01の右下のソケットにMCUを載せて書き込みを行うことになる。 |
もっともこれが面倒、という話は当然にある。なにしろプログラムの開発中は煩雑にプログラムを書き換えて動作を確認するわけで、その度ごとに「基板から抜く→ライターに挿し込む→書き込み→ライターから抜く→基盤に挿す」を繰り返すことになる。いや昔はそれが当たり前だったので筆者なども「もうちょっと楽にならねえかなぁ」などと言いつつこれを繰り返していたのだが、さすがに昨今はもう少し簡単な方法が使えるケースが増えてきた。Photo03はSTM8S-DiscoveryというSTMicroelectronicsの開発キットで、写真で言えば基板右半分の中央に鎮座しているのが8bitのSTM8SというMCUだ。まぁそれはいいのだが、このSTM8Sは内部にFlash Memoryが搭載されている。このSTM8SのFlash Memoryへの書き込みや、あるいはST-LinkというSTMicroelectronics社独自のデバッグI/Fの管理は左側の基板の上に置かれたSTM32という32bit MCUで管理しており、USB経由でPCと繋がっている。「なんで8bit MCUの管理に32bit MCU?」と思うだろうが、開発キットでは非常に良くありがちなパターンである。STM32の側は工場出荷前にプログラムが書き込まれており、基本的には開発者がこちらをいじることは出来ない(それをやりたければSTM32の開発キットを買え、という話だ)のだが、これにより外部にライターを用意しなくてもプログラムの書き込みが可能になったのは非常に楽である。
Photo03: これも秋月電子通商で販売中。というか、別のものを買いに秋月に行ったとき、レジの横にこれが並んでいるのを見て思わず購入してしまったという、完全な衝動買い。\750だったし。 |
もっとも開発とかホビー用途にはこれでいいのだが、量産には無駄が多い事になる。一応このキットの場合、書き込みが終わったら2つの基板を切り離し、右側だけで単独に動作させられるようになっているが、切り離した後の左側の基板はただのゴミでしかない。PCとかならメモリカードやUSBメモリを使ってブート、なんて技も使えるのだが、MCUではこうした形でFlash書き込み機能を基板上に実装するか、もしくはライターを別に用意するのが必須となる。
ちなみに前回説明したICEを使うとこのあたりの手間は大幅に省ける(なんせMCUのFlash Memoryに相当するものはICE本体のメモリだから、ここにプログラムをロードするだけでそのままFlash Memoryへの書き込みに相当する行為が終わる)し、JTAGポートを使ってFlash Memoryへの書き込みが行える製品もあるから、絶対に必要というわけではないが、まぁ普通は何かしら必要になると考えてよいだろう。
といったわけで、次回からもう少し具体的に製品で遊んでみるところから始めてみたいと思う。
(続く)