RISC-Vマイコンの CH32V003をピッチ変換基板に実装して使ってみます。
Arduino環境で使用するための準備と、簡単な使い方を書きます。
紹介するもの
CH32V003
特徴
マイコンチップは\20~\50、基板は\20~\30円の破格。
CH32V003J4M6 | CH32V003A4M6 | |
---|---|---|
接続 | WCH-LINKEを使用して書き込む | WCH-LINKEを使用して書き込む |
CPU Clock | 48MHz | 48MHz |
メモリ | フラッシュ 16KByte SRAM 2KByte | フラッシュ 16KByte SRAM 2KByte |
ロジックレベル | 3.3V | 3.3V |
GPIO | 5 | 14 |
ADC | 10bit 0 ~ 1023, 3.3V | 10bit 0 ~ 1023, 3.3V |
USART | 1 | 1 |
I2C | 1 | 1 |
SPI | 0 | 0 |
引用元 WCH 南京沁恒微电子股份
ピン配置
SOP変換基板を使用したピン配置表です。
CH32V003J4M6のSWIOは、複数のピン番号が割り当てられています。
これらのピンに機能を設定すると次回書き込みができなくなります。
CH32V003J4M6
CH32V003A4M6
外観
基板実装した状態です。
CH32V003J4M6
CH32V003A4M6
使ってみた
今回はマイコンチップをSOPピッチ変換基板に実装しています。
\100未満でそこそこ性能のマイコン基板になってしまう破格はとても魅力的です。
このマイコンチップを使うためにはいくつかの乗り越えなければならない試練があります。
SOP(1.27mm)なので、にわか仕込みの半田技量では実装できるギリギリのピッチです。
ライブラリがまだ成熟していないので、Arduino, RaspberryPi Pico, ESP32基板のように手軽にスケッチを作成することはできません。
現在のところほとんどのモジュールライブラリが未対応なので、軽く使用する場合は単純なI/Oや通信程度になってしまいます。
書き込みを行うためにはWCH-LINKEを配線する必要があります。
3線なのでそれほどでもありませんが、これまで紹介してきたようUSBケーブルを挿すだけで書き込めないわずらわしさがあります。
WCH-LINKEのセットアップ作業があります。
海外サイトからDLしたアプリケーションを実行するたびにWindowsSecurityの警告が表示されます。
一度これらを乗り越えてしまえば、激安マイコンを新しく使えるのです。
このマイコンが普及することで、各種モジュールライブラリが追加対応してもらえれば安くて気軽に使える良いマイコンになると思います。
注意点としてGPIOのPD1に機能を設定するとその後のスケッチの書き込みができなくなります。
復旧方法がわかれば追記することにします。
CH32V003マイコンを手軽に使う開発基板
準備
マイコンチップの基板実装
始めにピッチ変換基板とマイコンチップを半田します。
ピッチ変換基板の多くは表と裏に1.27mmと0.65mmのピッチのどちらでも使うことができます。
今回1.27mmピッチを使用します。
主に気を付ける点は、方向と位置です。
赤○が1pinなので、基板の1pinマークと同じ位置になる方向で実装します。
取り付け方向は半田前のテープによる仮止めの段階で十分確認します。
仮止めの半田が終わった時点で斜めになっていないか4つ角のピンを確認します。
作業途中半田ブリッジが発生しても無視して進めます。
後ではんだ吸い取り線(ソルダーウィック)で吸い取ります。
半田作業が終わったら外観チェックをします。
半田浮き、ショートが無いかを拡大鏡などを使ってチェックします。
テスターで通電チェックと、ショートチェックを行います。
書き込み装置(WCH-LINKE)
nanoCH32V003へのスケッチの書き込みには、WCH-LINKEを使用します。
注意 : [WCH-LINKE]です。[WCH-LINK エミュレータ]では使用できません。
似た品名ですが違うので、品名をよく確認してください。
Ali Expressで送料込み \700強から\1,000で購入できます。
国内でも秋月さんから購入できます。
設定アプリケーション
①ここからWCH-LinkUtilityをダウンロードします。(中国WCHサイト)
②ダウンロードしたZipファイルを解凍します。
回答したフォルダからWCH-LinkUtility.exeを実行します。
※セキュリティに関するメッセージが表示されるので、「実行」を選択します。
自己責任で実行してください。
③アプリケーションを以下画像の手順で設定します。
ここまでの手順で、Arduino環境から書き込むための装置の準備ができました。
ケーブルの接続
WCH-LINKEとCH32V003をジャンパワイヤで接続します。
CH32V003J4M4も CH32V003A4M4も使用するピンはPD1で同じですが、位置が違うのでよく確認して配線してください。
CH32V003J4M4とWCH-LINKEとの配線
CH32V003A4M4とWCH-LINKEとの配線
基板の後方に書き込みに必要な端子が集中していますが、以下の配線での書き込みもできます。
こちらは5Vを印加していますが、この方法では3.3Vが使用できます。
また、スケッチの書き込みはPD1から行うこともできます。
nanoCH32V003 | 配線 | WCH-LINKE |
---|---|---|
5V | 赤 | 5V |
GND | 黒 | GND |
PD1 | 白 | SWDIO/TMS |
WCH-LINKEとパソコンをUSBケーブルで接続します。
ライブラリ
ボードライブラリ
Arduino IDEのボードマネージャからのライブラリのインストールとボードの選択をします。
ボードマネージャのURL | https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json |
検索 | WCH |
ボードライブラリ | CH32 MCU EVT Boards by WCH x.x.x※ |
選択するボード | ツール > ボード > CH32 MCU EVT Boards > CH32V00x |
スケッチの書き込み
書き込み前の注意 : GPIOのPD1に機能を設定すると次回からスケッチの書き込みができなくなります。
COMポートの選択では、WCH-LINKEのポート番号が表示されます。
WCH-LINKE経由でスケッチの書き込みを行うので、WCH-LINKEのポート番号を選択し、スケッチの書き込みボタンを押下することで書き込みできます。
基本スケッチ
LEDチカ
説明
CH32V003J4M6をつかって、LEDを点滅させます。
配線
GPIO(PD6) -> 保護抵抗(200Ω) -> LED -> GND
スケッチ
void setup()
{
pinMode(PD6, OUTPUT);
while(1)
{
digitalWrite(PD6, HIGH);
delay(500);
digitalWrite(PD6, LOW);
delay(500);
}
}
void loop() {}
結果
LEDが点滅を始めました。
コメント
「注意点としてGPIOのPD1に機能を設定するとその後のスケッチの書き込みができなくなります。」と強調して記載されていますが、本当ですか。
CH32V003のリファレンスのリマップレジスタ1(AFIO_PCFR1)の説明では、「SWD(SWI)はシステムリセット後は常にSWDポートとして使われる」と書かれています。特に対処しなくても、リセットすれば書き込み可能です。当方ではそのように動作しています。
その後、実機で動作確認しましたら、ブログ記事の通り「GPIOのPD1に機能を設定するとその後のスケッチの書き込みができなくなり」ました。
当方のプログラムのバグでSWIOのPD1へのリマップが解除されていたことが判明しました。懺悔してお詫び申し上げます。
RMではシステムリセットによりSWIO機能に戻る旨が記述されていますが、これがおかしいですね。或いは、別の条件があるのでしょうか。
度々、お邪魔します。
解決策が判りました。
システムリセットでSWIOピンは元のSWIO機能に戻っていました。しかし、ダウンロードが開始される前にファームウェアが走って、SWIOピンがPD1の機能に設定されるため、ダウンロードが失敗していました。
解決策は、システムリセット後SWIOピンをPD1機能に設定する前に1秒程度の待ちを入れておくことです。その待ち時間の間にダウンロードが開始され、成功するようになりました。
http://tutujith.blog.fc2.com/blog-entry-688.html
返答が遅れてすみません。
ご連絡、解決方法のご教授ありがとうございます。
今回のことでRMをじっくり見直す機会となりました。感謝しています。
解決策、参考にさせていただきます。
ありがとうございました。