古いツールを、再び動くようにする
現在STC89/90シリーズのチップに書き込みを行う人の多くは、純正のSTC-ISP GUIアプリケーションを使います——モデル選択のドロップダウン、ボーレートのスライダー、「Download/Program」ボタンを備えた、あの大きなWindowsプログラムです。これはこれで動作しますが、新しいファームウェアを書き込むたびにAlt+Tabで切り替えなければならない、完全に別のアプリケーションでもあり、スクリプトやエディタと統合されたワークフローを想定して作られたものでもありません。
stcispは、それに代わる目立たない選択肢です。最新のGUI系統ではなく、古いオープンソースのstc-isp-winソースパッケージから構築された、ネイティブなコマンドラインISPプログラマです。小規模で、ほとんど話題に上らないツールですが——多くのSTCチュートリアルではまったく触れられません——たった一つの仕事を、ターミナルから確実にこなし、シリアルポート、ボーレート、hexファイルさえあれば、それ以外は何も要求しません。
なぜ再構築が必要だったのか
これほど古いツールにありがちな落とし穴は、「今でもコンパイルできる」ことと「今でも正しく動く」ことが別の話だという点です。stc-isp-winのシリアル層はWin32 Communications APIに直接依存しており、もともと書かれた当時のコンソールの挙動は、現在のWindows 10/11のターミナルの実際の挙動から多少ずれてしまっています——再構築しないままだと、最新のcmd.exeセッションでUARTのプロービングシーケンスが誤動作したりハングしたりすることさえあります。ここで扱っているバージョンは、現行のMinGW-w64/GCC 13.2ツールチェーンでソースから再コンパイルされており、この問題を解消しています:プロトコルもコマンドライン仕様も同じままですが、コンソールI/Oは最新のWindowsターミナル上で正しく動作します。Pythonランタイムも不要、追加のDLLも不要、レガシー互換のシムも不要——一つの仕事だけをこなす、小さく自己完結した実行ファイルです。
stcispで書き込みを行えば、純正のSTC-ISP GUIツールを開く必要は一切なくなります。ウィンドウを持つアプリケーションではなく単純なコンソール実行ファイルであるため、他のコマンドラインツールと同じようにそのままBuild/Executeコマンドに組み込めます——Geanyがそれを呼び出し、実行され、進捗がコンパイラパネルに表示され、終わればエディタに制御が戻ります。重量級のGUIプログラマにも一度限りの探索的な作業には出番がありますが、日常的な編集・コンパイル・書き込みのループにおいては、CLIツールの方がはるかにきれいに統合され、サイクルからアプリケーションを一つ丸ごと取り除いてくれます。コマンドラインでの使い方
stcisp -s COM3 -b 2400 -f LedBlink.hex
| オプション | 意味 | 典型的な値 |
|---|---|---|
-s | シリアルポート | COM3(または1, 2, ...) |
-b | 初期ボーレート | 2400(最も安定) |
-f | ファームウェアイメージ | .hex / .ihx / .bin |
2400ボーは、STCの伝統的なハンドシェイク速度です。一度接続が確立すれば、より高速な速度もサポートされますが、まず低速で始めることが、実際に人々が手元に持っているさまざまなUSB-TTL変換アダプタとの間で最初の接続を確実にする鍵となります。
ハンドシェイクの詳細
単純に制御を握ってそのまま進むSPI/ISPプログラマとは異なり、stcispはリセット直後の一瞬しか耳を傾けないブートローダを相手に、会話をしながら通り抜けなければなりません。起動した瞬間から、プローブバイトの連続ストリームを送り始めます:
TX: 7F TX: 7F TX: 7F ...
このストリームはハングしているのではなく、stcispが辛抱強くノックし続けているだけです。STCのブートローダは電源投入直後のわずかな時間しか動作しないため、ここでボードの電源を入れ直す(あるいはリセットを押す)ことになります。チップが起動途中でこのプローブを捉えると、ISPモードにとどまって応答するようになり、やり取りが先に進むのが確認できます:
Start Programming >>> target is full gain target is normal speed(12T) target's P1.1&P1.0 normal ... Program OK
Program OKは、フラッシュへの書き込みが完了し、新しいファームウェアが有効になったことの確認です。
配線
オンボードのUSB-シリアル変換チップを持たないボードを使う場合、通常のUSB-TTL変換アダプタは次のように配線します:
| アダプタ/PC側 | MCU側ピン |
|---|---|
| TXD | RXD (P3.0) |
| RXD | TXD (P3.1) |
| GND | GND |
| 5V(任意) | Vcc |
日常のループ
sdccとstcispの両方に(PATH上、あるいはバッチスクリプトのすぐ隣に置くなどして)アクセスできるようになれば、一連のサイクルは2つのコマンドと1つの物理的な動作にまで凝縮されます:
:: Compile buildhex.bat LedBlink.c :: Program (then power-cycle when TX: 7F appears) program_hex.bat LedBlink.hex
これを同じようにGeanyのBuildボタンとExecuteボタンに組み込めば、F9でコンパイル、Executeで書き込みという流れになります——別のアプリケーションが開くことは一切なく、プローブストリームと最終的なProgram OKを示すターミナル出力は、そのままGeany自身のコンパイラパネルに表示されます。
対応範囲と制約
stcispは、あくまで従来のSTC89/90ファミリーのプロトコルを話します。より新しいSTCファミリー——STC15やSTC8系列——は異なるブートローダプロトコルを使用しており、一般的にはstcgalのような別のツールが必要になります。とはいえ、ほとんどのホビー用・教育用ボードに搭載されている従来型のチップに関しては、stcispだけで完結します:付随するランタイムも設定ファイルも不要で、必要なのはコンパイラの出力とシリアルポートだけです。
詳細リファレンス
付属の詳細ガイドでは、事前準備、buildhex.bat/program_hex.batの完全なスクリプト、実際に遭遇しやすい少数の失敗パターンをまとめたトラブルシューティング表、そして1ページのクイックリファレンスカードを掲載しています。