English / 日本語

Gregory J. Durnan, PhD, CEng, FIMarEST

stcisp:STC 8051 MCU向けに再構築されたコマンドラインプログラマ
San Diego, CA, USA · お問い合わせ · durnan.org

古いツールを、再び動くようにする

現在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も不要、レガシー互換のシムも不要——一つの仕事だけをこなす、小さく自己完結した実行ファイルです。

補足: Geanyの中から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側ピン
TXDRXD (P3.0)
RXDTXD (P3.1)
GNDGND
5V(任意)Vcc

日常のループ

Geany compiler panel showing a successful hex build, ready for stcisp

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ページのクイックリファレンスカードを掲載しています。