経緯
充電器を購入しようとしたら、PDとかPPSという言葉が目に付いた。
最近の充電器は5V以外の電圧を出せる様だ。今更気が付いた。
トリガー基板なるものを物色していたら、ワンチップマイコンでも出来るじゃないか。
◆◆◆ よし、試してみなければ ◆◆◆
しかしCH32X035チップの小さい事、単価も安いけど。
必要なハード
◇CH32X035のチップが乗った基板
CH32X035F8U6 Mini Core Board。
アリエクで1200円/5個程度で販売していた。
日本のアマゾ〇では売ってないようだ。
◇開発装置
WCH-LinkE
同様に500-1000円程度で販売している。
接続
下記6本を、基板とWCH-LinkE間で接続。下記2本はプログラム内で使用。
基板 WCH-LinkE
3V3 3V3 電源
GND GND グランド
DCK SWCLK デバッククロック
DIO SWDIO デバック信号
A2 RX シリアル送信
A3 TX シリアル受信
必要なソフト
◇コンパイラ
MounRiverStudio Eclipseをベースにした、由緒正しき開発環境。
オールインワン、これ一つで小難しいツールチェーンも入れてくれる。
※但し、かゆい所には手が届かず、ロードモジュールがちと大きいという噂も。
「MounRiver社」を開き、Downloadをクリック。
MounRiver_Studio_Setup_V192.zipをダウンロード
※当方の環境ではV210.zipでは、WCH-LinkEと繋がらなかった。
◇ダウンローダー
WCH-LinkUtility
「WCH社」より、WCH-LinkUtility.ZIPを落す。
環境構築
◇WCH-LinkE
必要ならドライバーを入れる。必要ならデバイスマネージャーで確認する。
※Interface-WCHLinkEと、WCH-Link SERIAL(COMx)が追加されている。
WCH-LinkUtility.ZIPを適当なディレクトリに解凍。WCH-LinkUtility.exeを起動。
画面のCore:をRISC-Vに、Series:をCH32X035/34/33に変更。
基板とWCH-LinkEを接続し、USBに刺す。
Active WCH-Link Mode : (画面下の方)をWCH-LinkRVに変更し、「Get」「Set」を順に押す。
Query Chip Info(画面上3個目のアイコン)を実行して、MCU ID等が読み込まれれば接続は正常。
動作確認出来れば後は放置、閉じておいても構わない。
※MounRiverStudioからは自動操作される。
◇MounRiverStudio
解凍してインストール。
適当なディレクトリにサンプルプロジェクトを格納しておき、xxxx.wvprojをダブルクリック。
MounRiverStudioが立ち上がる。
ビルド(画面の6番目)を実行。0 errorsが表示されれば成功。
ダウンロード(画面の9番目)を実行。Verify Successと出れば成功。
※下記プロジェクトで有ればWCH-LinkEのシリアル出力にTINY BASICが表示される。
※出なかった場合は、配線を見直すか、もっとまともなサンプルを使う事。
サンプルソフト(CH32X035_bas)の説明
「ソフトの格納場所(Github) 」のCH32X035_basディレクトリに有る。
本ソフトはCH32X035の動作確認を目的としている。
チップと基板の動作確認コマンドを、BASICコマンドとして発行する。
動作確認の為にTINY BASICに下記を追加している。
◇PD 「PD xx」で、指定電圧xxに充電器電圧が変更される。※電圧が不一致だった。
※xxは、「5, 9, 12, 15, 20」Vの何れか、充電器によつて出ない電圧も有る。
リセット後に一旦、充電器との切断接続が必要。
◇LED 「LED x」(xは1又は0)で、基板上のLEDが明滅。
◇SAVE/LOAD(別途説明)
◇MON(別途説明)
SAVE/LOAD
FLASHエリア(08000000-0800FFFF)にプログラムが使わない08008000以降に格納する。
◇SAVE
「SAVE xx y」で書込む。xxは格納位置の指定。yは1で自動起動の指定。
yを1にしてSAVEした場合、LOAD時に自動起動する。
格納位置は08008000番地から1KB毎に割り振って居る。
※BASIC入力可能エリアは約8KB有るので、フルサイズを格納した場合0-7が格納済みとなる。
プログラムの重ね書きに注意。
※既にプログラムは32KBに近づいており、追加する場合は格納開始位置の変更が必要だろう。
◇LOAD
「LOAD xx」で。xxは読出し位置の指定。
◇自動起動
リセットスタート時に自動起動(0番目のプログラム)を毎回確認している。
「SAVE 0 1」で格納した場合、電源オンで格納プログラムが起動する。
MON
BASIC上で「MON」の入力でモニターが起動する。
※CH32X035のハードチェックの為なので、機能は一寸ショボい。
◇DUMP
「Dxxxxxxxx」でxxxxxxxx番地からの128バイトを表示。
「Dxxxxxxxx yyyy」で、xxxxxxxx番地からのyyyyバイトを表示。
◇メモリ操作
「Mxxxxxxxx」で、xxxxxxxx:yyと表示される。
zzと追加入力すると書き込みを行い、次の番地へ移動。
「.」で終了。
◇メモリフィル
「Fxxxxxxxx yyyy zz」の入力で、xxxxxxxx番地からのyyyyバイトにzzが書き込まれる。
BASICについて
豊四季タイニーBASIC のLinuxエディションを使用。
※お手軽で便利なソフト公開有難うございます。
get,put,randを差し替えれば、汎用的に使える。
※今回RANDは不動作。
コマンド名、シンボルを設定し、caseを追加すれば機能拡張が可能。
※勿論、実行する処理本体が必要ですが。
デバッグについて
この程度のチップは専用のデバッグ装置など無く、printf攻撃に頼るのが通常だと思うが、
由緒正しきEclipseの末裔(かな)なので、追加インストール無しでグラフィカルにGDBが使える。
一寸嬉しかったので、多少説明を加える。
※書いてる本人はGDBを真面に使った事無いので、間違った記述をしているかも。
起動したら、止めたい行の左をダブルクリックで赤〇表示。
※デバック中に追加変更もご自由に。
次にデバッグ(虫のマーク)をクリック。
多分、何かダイヤログが出るので、OKとかDebugとかを選択すれば、デバッグ画面に移行できる。
run(7つ目の三角)を押せば、動作後設定した所で止まり、赤〇に黄色三角が表示される。
ステップ実行(右左折の様なマーク)で一行毎の動作確認も可能。※アセンブラレベルも可能と思う。
止まる事により、CPUがこの部分を走行する事が確認できる。
画面上の変数に触れると、値が表示される。
※但し、Break;にブレークを掛けたら、無視された。
念のために止まるかどうかを、先に確認すべきだな。
あまり使わなかったが、考え違い等でドツボに嵌まった時などは極めて有効なツール。
ソフト開発の最終兵器として素晴らしい。
GDBはArduinoでも利用可能だが、それ用のハードと別途設定が必要。敷居は高い。
感想
CH32X035の単価は50円程度だろう。基板に実装しても250円前後。
この程度の値段で、FLASH 62KB, RAM 20KBのチップが買え、GDBも使える。
(輸入の手間とかあるから、日本国内ではこの値段で買えないが)
従来のチップでは勝負出来ないであろう。後はソフト勝負だが果たして勝負できるだろうか。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。