0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CH32X035で充電器をPD制御する

Posted at

経緯

 充電器を購入しようとしたら、PDとかPPSという言葉が目に付いた。
 最近の充電器は5V以外の電圧を出せる様だ。今更気が付いた。
 トリガー基板なるものを物色していたら、ワンチップマイコンでも出来るじゃないか。
 ◆◆◆ よし、試してみなければ ◆◆◆
 しかしCH32X035チップの小さい事、単価も安いけど。

必要なハード

 ◇CH32X035のチップが乗った基板
  CH32X035F8U6 Mini Core Board。
  アリエクで1200円/5個程度で販売していた。
  日本のアマゾ〇では売ってないようだ。
board.jpg

 ◇開発装置
  WCH-LinkE
  同様に500-1000円程度で販売している。
wch-linke.jpg

接続

 下記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の何れか、充電器によつて出ない電圧も有る。
       リセット後に一旦、充電器との切断接続が必要。
pd12.jpg

pd_out15.jpg

 ◇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を真面に使った事無いので、間違った記述をしているかも。

 起動したら、止めたい行の左をダブルクリックで赤〇表示。
  ※デバック中に追加変更もご自由に。
start.jpg

 次にデバッグ(虫のマーク)をクリック。
 多分、何かダイヤログが出るので、OKとかDebugとかを選択すれば、デバッグ画面に移行できる。
debugstart.jpg

 run(7つ目の三角)を押せば、動作後設定した所で止まり、赤〇に黄色三角が表示される。
ステップ実行(右左折の様なマーク)で一行毎の動作確認も可能。※アセンブラレベルも可能と思う。
break.jpg

 止まる事により、CPUがこの部分を走行する事が確認できる。
 画面上の変数に触れると、値が表示される。
pin.jpg

  ※但し、Break;にブレークを掛けたら、無視された。
   念のために止まるかどうかを、先に確認すべきだな。

 あまり使わなかったが、考え違い等でドツボに嵌まった時などは極めて有効なツール。
 ソフト開発の最終兵器として素晴らしい。
 GDBはArduinoでも利用可能だが、それ用のハードと別途設定が必要。敷居は高い。

感想

 CH32X035の単価は50円程度だろう。基板に実装しても250円前後。
 この程度の値段で、FLASH 62KB, RAM 20KBのチップが買え、GDBも使える。
 (輸入の手間とかあるから、日本国内ではこの値段で買えないが)
 従来のチップでは勝負出来ないであろう。後はソフト勝負だが果たして勝負できるだろうか。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?