2ドルのマイコンが今も教えてくれる、本物の学び
STC89C52RCは、マイコンとしてはこれ以上ないほど地味な存在です。1980年代にまで遡る8051コアを搭載し、動作速度は1桁台のMIPS、USBペリフェラルも持たず、データシートはクリントン政権時代からほとんど手を加えられていないかのような趣です。それでも上の写真のようなボードは、今でもAmazonやAliExpressから数ドルで手に入り、ブレッドボードに挿すだけで、レジスタ、ポート、割り込み、そして自分の手で設定しなければならないUARTといった基礎を教えてくれます。これらはArduinoのような親切なラッパーを備えた現代の開発ボードでは抽象化され、見えなくなってしまうものです。隠されたレイヤーが何もないチップには、どこかすっきりとした明快さがあります。
このページは、その体験のための実践的なガイドです。空の.cファイルから、実際のSTC89C52RCチップ上でLEDを点滅させるまでを、無料のコンパイラ(SDCC)と無料のエディタ(Geany)だけを使い、Windows上で、プロプライエタリなIDEを一切使わずに行う方法を説明します。
STCファミリーが他と違う点
インターネット上のほとんどの8051チュートリアルは、専用のSPI/ISPプログラミングヘッダーを持つAT89Sシリーズのチップを前提としています——USBaspを挿してavrdudeを実行すれば完了、という具合です。STC89C52RCは、この前提を静かに覆します。STC Microelectronicsは、SPIではなく単純なUARTで通信する独自のブートローダをチップ内に直接組み込みました。ボード上にISPヘッダーを探す必要はありません。なぜならそもそも不要だからです——電源供給に使うのと同じmicro-USBポートが、オンボードのUSB-シリアル変換チップを介して、そのままプログラミング用の接続にもなります。
その代わりに、ちょっとした儀式が必要になります。STCのブートローダは電源投入直後のわずかな時間しか待ち受けていません。書き込みは「Flashをクリックして放っておく」というものではなく、「ツールを起動し、指示が出たら実際にボードの電源を入れ直す」というものです。チップが応答すると、通信線上に特徴的なハンドシェイクバイト(70H)が現れ、残りの転送は自動的に行われます。どこか昔ながらのやり方に感じられますが、事前にそういうものだと分かっていれば、基本的に失敗することはありません。
ツールチェーン
3つの無料ツールが、それぞれ一つの役割をきちんと果たします:
- SDCC(Small Device C Compiler)——8051ファミリーのような8ビットターゲット向けに作られたオープンソースのCコンパイラ。1回のパスでコンパイルとリンクを行い、書き込み可能なIntel HEXファイルを生成します。
- Geany——ビルドメニューを設定できる軽量テキストエディタ。Compile/Build/Executeボタンに適切なコマンドを設定すれば、重厚なツールチェーンを必要としない、組み込み開発のための本物のワンクリックIDEになります。
- STC純正のISPユーティリティ——UART経由で実際にブートローダと通信し、コンパイル済みのhexファイルをフラッシュに書き込むツールです。
あらかじめ知っておくべき一つの落とし穴があります。Geanyはコマンドシェルを介さずに直接ビルドコマンドを起動します。これはsdcc.exeを直接呼び出す分には問題ありませんが、.batラッパースクリプトを経由しようとするとつまずきます——解決策は単純で、コマンドの前にcmd /cを付けるだけです。そうすればGeanyのコンパイラパネルにも、プロンプトで同じコマンドを打った時と同じ、きれいな[OK]の結果が表示されます。
一連のワークフロー
+----------------------+
| Write LedBlink.c |
| (registers via |
| 8052.h) |
+----------------------+
|
v
+----------------------+
| Compile with sdcc |
| -> .ihx + .map |
+----------------------+
|
v
+----------------------+
| Rename/convert to |
| standard .hex |
+----------------------+
|
v
+----------------------+
| Run STC ISP tool, |
| power-cycle board |
| on prompt |
+----------------------+
|
v
+----------------------+
| Bootloader responds |
| (TX: 70H), flash |
| completes |
+----------------------+
編集、コンパイル、書き込み、LEDの点滅を確認する——この一連のループは、ツールさえ正しく設定されていれば、生のコマンドプロンプトから実行してもGeanyのF9/Executeボタンから実行しても、余裕をもって1分以内に収まります。
詳細ガイドを入手する
完全版の入門ガイドでは、SDCCのインストール(すでにMinGW/GCCを導入している人がつまずくPATHの競合の解説を含む)、buildhex.batとprogram_hex.batの完全なスクリプト、Geanyのビルドコマンドの正確な設定、そしてこのワークフローを初めて試した際に実際に発生したエラーをもとにしたトラブルシューティングの章を掲載しています。
この先にあるもの
点滅するLEDは組み込み開発における「hello world」であり、必要な一歩ではありますが、それ自体が目的ではありません。同じツールチェーンは、タイマー、ホストPCとのUART通信、割り込み駆動のI/O、そして最終的には、付属のヘッダーピンよりも安いチップを中心に構築される小さな独立した計測器にまで、そのままスケールしていきます。このようなボードの本当の魅力は、箱から出してすぐに何ができるかではなく、ツールチェーンさえ整えてしまえば、ハードウェアとの間にほとんど何も立ちはだからないという点にあります。