uchanのアイコン画像
uchan 2024年07月28日作成
セットアップや使用方法 セットアップや使用方法 閲覧数 373
uchan 2024年07月28日作成 セットアップや使用方法 セットアップや使用方法 閲覧数 373

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

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 を押します。すると、今書き込んだプログラムが起動します。

uchanのアイコン画像
本業はプログラマですが、昔から電子工作は趣味でやってます。初めてのプログラミング言語はPICアセンブラです。 モジュールを買ってきて組み合わせるだけでなく、部品の動作原理をきちんと理解して回路を設計することに楽しさを感じます。 2021年より「uchanの電子工作ラボ」という施設を運営しています。はんだごてや測定器が使えます。 https://uchan.net/lab/ 2021年3月22日に「ゼロからのOS自作入門」を出版しました。Amazon→ https://amzn.to/2NP3FUj
  • uchan さんが 2024/07/28 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する