COM portからSTM8S
discoveryのFLASHを焼けるか?
STM8S-discovery
で何個も工作していると、たった\750の基板だけれど、もっと安く入手できないかと思うようになってきます.
とりわけ、わたしの場合、ホストPCとのインターフェースとして、FT232RLをつかったCOMポート経由で行う仕組みを好んで使っているので、秋月電子のUSBシリアル基板(\950)もペアで購入しているわけです.しかも、開発が終わったら、STM8S-discoveryの半分を占めるSTM32Fの部分は捨てちゃうわけです.な〜んかお金がもったいない気分.
そこで、STM8S+FT232RLが載った基板を自作したくなってきます.この自作基板には、STM8S
discoveryに載っているSTM32Fは載せません.ゆえに、STM32Fが果たしていた、USB通信+FLASH焼き+デバッガの3役のうち、FLASH焼きとデバッガをどうするか決めなければなりません.デバッガはあきらめるとしても、FLASH焼きは必須です.
さて、ブートローダコードの行動を、2になるようにできたとして、その後の手順はどうなるのか?
STMicroが提供する Flash
loader demonstrator
というプログラムで、ホストPCから、UART経由でFLASHを焼くことができますので、その手順を以下で説明します.
●Flash loader
demonstrator ver2.2.0 のプログラムは こちらからDL (zip)します.
説明書は、 UM0462
13916.pdf なのですが、どうも2010.8現在のver2.2.0の動作とは食い違っているようで、さりげなく無視して、以下の手順に従うことをオススメします.
●インストールは適宜やってください
●STM8S
discoveryに、下記の写真のように、FT232RLを利用したUSBシリアル変換回路を取りつけておきます.参考回路はこちら
です.(ちょっと違うんだけどね)
写真の左側のUSBコネクタが、COMポート経由でホストPCと通信するところです.このコネクタを通じて、STM8SのFLASH焼きをするのが目標です.
(ちなみに、右側のUSBコネクタは、SWIM経由でFLASH焼きするところです)
また、後述する理由で、リセットのためのプッシュSWも取りつけてあります.(回路図に描いてありません)
STM32Fの基板につけたトグルSWは、SB1とSB2を切断するためのSWです.(回路図に描いてありません)
左側のUSBコネクタとホストPCをつないでください.
●Flash loader demonstrator
を起動します.
下記のように設定を選びます.
COMポートネームは、プルダウンメニューから、最も大きなナンバーのを選べばたぶん当たります.
ボーレートは、115200でなくても良く、ブートローダコードが4800〜115200まで自動追従してくれます.
Echo
Modeを選ぶところがver2.2.0のミソのようです.ここが、STMicro
UM0462の解説と異なるところで、UM0462ではDisabledにせよ、と書かれていますが、それは無視してください.
●いよいよ、STM8SのブートローダコードとホストPCを、UART経由で通信確立させます.
ここに、克服するにはかなりの工夫を要するコツがあります.それは、Flash
loader demonstrator と
STM8Sをほぼ同時に起動させなくてはいけない、ということです.こういう手順を踏まなければなければなりません.
STM8Sをリセットする
→ STM8Sのリセットを解除する → 0.5秒待って →
Flash loader demonstrator の Next ボタンを押す
なんで0.5秒なのか?
それは、ブートローダコードの仕様が、FLASH書き込みコマンドが来るかどうかを待つのがリセット解除後1秒間しか待たないという仕様だからです.
ですが、リセット解除後0.5秒でNextボタンを押すという動作は、とてもじゃないけど、USBコネクタを抜き差ししたのでは対応できません.そこで、わたしは、STM8SのNRST端子(pin1)にプッシュSWを取りつけました.それが、上記の写真のプッシュSWの存在理由です.
Flash
loader demonstrator の Next ボタンを押すと、次のwarningが出ますが、OKを押してください.
●下記の画面が現れます.STM8SのFLASHは32kBなので、TargetをSTM8_32Kにします.
●Nextボタンを押すと、どのメモリセグメントを読み書きしますか?を聞いてきます.とりあえず全部セレクトでOKしちゃいましょう.
●まずためしに、STM8SのFLASHを全部吸い出してみましょう.
Upload from
deviceをチェックし、ファイル名を指定します.
●Nextを押すと吸い出しが始まります.しかし、なぜか吸い出しはとても遅いです.
●8分14秒もかかって、ようやく33kBの吸い出しが終わりました.なんで遅いのかは不明です.
●吸い出した.hexファイルの例はこんなです.8000H番地付近.
:208000008200847F820098CE820098CE820098CE820098CE820098CE820098CE820098CE83
:20802000820098CE820098CE820098CE820098CE820098CE820098CE820098CE82008B0ECD
:20804000820098CE820098DD820098CE820098CE820098CE820098CE820098CE820098CED1
:20806000820098CE820098CE820098CE820098CE820098CE820098CE820098CE820098CEC0
●次に、吸い出した.hexファイルをもうちどSTM8Sに上書きしてみます.
こんどは、Download
to device をチェックし、ファイルを選択します.
時間がかかるのでVerify after
downloadにはチェックしませんでした.
●Nextを押すとFLASH焼きが始まりますが、焼くときはとても早く、たった18秒で終わりました.
Closeを押して終了します.
●STM8S
discoveryに取りつけたリセットボタンを押して離すと、いま焼いたユーザープログラムが走ります.
ちゃんと、UART経由でFLASHを焼けたことがわかりました.