write-program-to-ch32v203-using-embedded-bootloader

CH32V203 のブートローダーを使ってプログラムを書き込む

WCH-Link を用いたプログラム書き込みができないときに、ブートローダーを使うことで書き込めるようになる、というお話です。

通常、CH32V203 に WCH-Link(メーカー公式の書き込み器)を接続しておけば、特に何の操作も必要とせずにプログラムの書き換えが可能です。筆者は ch32v003fun を使って開発しているので、単に make と打てばプログラムを再ビルドして WCH-Link を自動検出してプログラムを書き込んでくれます。

しかし、スタンバイモードに入るようなプログラムを一回書き込んでしまうと、それ以降、書き込みできなくなります。make と打って書き込みの段階まで行くと、Detected: CH32V10x と表示され、正しくマイコンが判定されていないことが分かります。当然、書き込みは成功しません(多くの場合、ずっとそこで待ち状態に入ってしまいます)。

そのような場合でも、CH32V203 に内蔵されたブートローダーを起動させることでプログラムが書き込めるようになります。

CH32V203 の BOOT0/1 ピン

CH32V203 には BOOT0、BOOT1 というピンがあり、起動モードを選べます。電源投入時やシステム再起動のときにこの 2 ピンの状態が読み取られ、起動モードが決まる仕組みです。

BOOT0 BOOT1 起動モード
0 X プログラムフラッシュメモリ(ユーザプログラム)から起動
1 0 システムフラッシュメモリ(ブートローダー)から起動
1 1 SRAM から起動

CH32V203C8T6 が搭載された評価ボード CH32V203C8T6-EVT-R0 は BOOT0/1 ピンがピンヘッダとして取り出されています(下図)。ジャンパワイヤで 3.3V や GND に接続することで BOOT ピンを設定できます。

CH32V203EVT-R0ボードはBOOTピンがピンヘッダとして取り出してある

初期状態では BOOT0/1 ピンと GND が短絡されています。ユーザプログラムが起動する設定ですね。この設定では、MCU がスタンバイモードに入ってしまうと WCH-Link の接続を受け付けません。

ブートローダーの起動

ブートローダーを使用するために BOOT0=1 かつ BOOT1=0 に設定します。下図のように BOOT0 を 3.3V に接続します。

CH32V203EVT-R0ボードのBOOT0ピンと3.3Vピンを接続した

この状態で電源を投入するかスイッチ S1 を押すことでブートローダーが起動します。S1 は CH32V203 の NRST ピンに接続されていて、S1 を押すとリセットがかかります。

ブートローダーが起動した状態では、WCH-Link によってプログラムを書き込めるようになります。プログラムが書き込めたら、BOOT0 を GND に接続しなおし S1 を押します。すると、今書き込んだプログラムが起動します。



この記事を参照しているブログ内記事はありません。

作成:2024-07-26 10:48:23

最終更新:2024-07-26 10:48:23