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?

CH32V003でBASICを動かす。

Last updated at Posted at 2025-04-03

経緯

 CH32V003と言う安価なチップに今頃気が付いた。
 ブームは一年以上前だったよう。お陰で資料は豊富だが。
 USB端子付きで100円以下なんて値札の所も存在する。
  ※配送料が加算されるので、その値段では入手できないが。
  ※USB端子を持って居ても、其の儘ではUSB通信は出来ない。
 ◆◆◆ まあBASICでも動かして見るか ◆◆◆
 缶コーヒー一杯程度の値段で、マイコン開発環境を構築できるとは。
 世の中どうなってんの。

チップが安価な理由(憶測)

 チップが安価に提供できる理由として、
 ◇製造設備が安価
  製造技術は20n-30n、枯れた技術で有り歩留まりは良いのだろう
  製造設備も枯れた物が使用出来るのだろう
 ◇RISC-V
  従来はARM(要技術料)だったが、RISC-Vはパテントフリーで使用可
 ◇周辺チップ
  勿論周辺回路はチップ内だが、著名チップに構成が類似
  CH32の内蔵IOはSTM社の物に類似して居ると言われている。
  パテントを買い取ったのか真似っ子なのか、少なくとも何か関係は有りそう。

チップの簡略素性

 ◇プロセッサ:32ビットRISC(最大48MHz)
 ◇クロック内蔵
 ◇メモリ  :16KBフラッシュ、2KBSRAM
 ◇インターフェース: USART I2C SPI
  ※USB機能は持って居ない。

開発環境(ハード)

 ◇CH32V003の乗ったミニボード。
  ※チップ単体でも試験は可能。はんだ付けが必要だが。
  ※下記に当方が使った基板(CH32V003F4P6搭載)を示すが、推奨はしない。
   LEDは付いてるが、点滅させると書き込みが出来なくなる(解除可能)。
   USB端子とポートの接続が疑問。そのままは使えない。
 ◇WCH-LinkE
  ※書き込み装置が必要、秋〇でも千円以内で入手可能。
  ※単線双方向通信となり、末尾に"E"が付くやつが必要。
v003_link.jpg

接続

 下記を、基板とWCH-LinkE間で接続。
 ※TX・RXはプログラム内通信で使う。WCH-LinkEはUSBシリアルとして動作する。
   V003では入出力のピン配置を部分的に変更可能。とある目的でこの位置(PC0,PC1)に設定。
  基板   WCH-LinkE
  V    3V3   電源
  G    GND   グランド
  PD1  SWDIO 書き込み信号
  PC0  RX    シリアル送信
  PC1  TX    シリアル受信

開発環境(ソフト)

 開発環境としてはWindows環境で動作する、ArduinoやMounRiverStudioも存在するが、
 今回はLinux環境での開発とした。
  ※Arduino等では、基本ライブラリがFLASHの2/3近くを占め、拡張性が減る。
  開発環境を整えるのが、多少手間かも知れないが。

 ◇コンパイラ
  例示のコンパイルには、LINUX環境が必要でありこの準備をする。
  と言っても、当方はWindows環境なので「WSL」を使用。
   ※WSL: Windows Subsystem for Linux WindowsのサブシステムとしてLINUXが動作。
  「マイクロソフトのサイト」に詳しく書かれてている。
   ※ディフォルトではubuntuがインストールされる。
    当方の環境ではubuntuでは環境が構築できず、追加でDebianを導入した。
  次はツールチェーンを導入するのでLINUXを起動し、コンソール画面で下記コマンドを入力。
   sudo apt-get install gcc-multilib gcc-riscv64-unknown-elf
  下記コマンドで導入の確認が出来と思う。
   /usr/bin/riscv64-unknown-elf-gcc --version
  下記の様な表示が出れば導入成功。
   riscv64-unknown-elf-gcc (12.2.0-14+11+b1) 12.2.0
   Copyright (C) 2022 Free Software Foundation, Inc.
    ※LINUXには詳しく無いので、同じやり方で上手く行くとも限らない。
     ダメな場合は、自分で探してバンバンしてくれ。
 ◇ダウンローダー
  WCH-LinkUtility
  「WCH社」より、WCH-LinkUtility.ZIPを落す。

  必要ならドライバーを入れ、デバイスマネージャーで確認する。
   ※Interface-WCHLinkEと、WCH-Link SERIAL(COMx)が追加されている。
  WCH-LinkUtility.ZIPを適当なディレクトリに解凍。WCH-LinkUtility.exeを起動。
  画面のCore:をRISC-Vに、Series:をCH32V003に変更。
  基板とWCH-LinkEを接続し、USBに刺す。
  Active WCH-Link Mode : (画面下の方)をWCH-LinkRVに変更し、「Get」「Set」を順に押す。
  Query Chip Info(画面上3個目のアイコン)を実行して、MCU ID等が読み込まれれば接続は正常。
  次にWSLにWCH-LinkEを認識させる方法だが。
   Windows上でターミナル(又はCMD)を起動、usbipd list とコマンドを発行。
   "11-4 1a86:8010 WCH-LinkRV"などとリスト表示される。
   STATEが"Not shared"になっていたら、usbipd bind --busid 11-4 を発行。
   次に、usbipd attach --wsl --busid 11-4 を発行する。
   再度、usbipd list を発行し、STATEが"Shared"に変われば成功。
   ※11-4はこの環境下のUSB接続番号、各自の環境で読み替え。
  上記が終われば、make でコンパイルからフラッシュ迄一気通貫。
   ※当方の環境では、sudo make が必要だった。
   ※之は起動時に毎回接続が必要であり、HEXが出来たらWCHLinkEの釦を使って書込む方が早いかも。

サンプルソフト(CH32V003_BASIC)の説明

 「ソフトの格納場所(Github) 」に有る。
  ※makefileに "CH32V003FUN=../../ch32v003fun" と指定されており、
   basic格納フォルダの二つ上に 「CH32V003FUN」 のダウンロードと格納が必要。

 本ソフトはCH32V003の動作確認を主な目的としている。
 動作確認の為にTINY BASICに下記コマンドを追加している。
  ※なおBASICの事例は既に存在するが、コンパイルすると容量超過で動けないよ。
v003_bas.jpg
 ◇OUT 39 1
  ポート"39"(PC7)に"1"を出力。ボート及び出力指定に変数名も可。
   ※ポートはPA/PB/PC/PDを各々16bitと想定して連番。PC7=16*2+7。
 ◇IN 39 A
  ポート"39"(PC7)の状態を変数"A"に取り込む。
 ◇SAVE 0 1
  現在のプログラムをFLASHの"0"番目に、"1"(自動runモード)で格納する。
  save時に"1"を指定すると、リセット時に自動load/runする。
   ※ブロックは64byteを1ブロックとして80003FC0を先頭に逆順に数えている。
    プログラムの格納位置は4ブロック毎に数える。
    格納位置が重複した場合、前のは上書きされる。
 ◇load 0
  FLASHの"0"番目からロードする。
 ◇MON
  DxxxxxxxxやMxxxxxxxxのコマンドが有り、メモリーの参照・変更が可能。

感想

 ショボい事例だが、Lチカの次のステップとでも思って頂ければ幸い。
 次のステップは、何か役に立つものだろうが敷居は高いな。
 毎回思う事だが、この程度のチップを何故日本で製造出来なかったのか。
 2nの最先端チップも必要、売り先の確保が必要だが。
 自動車を動かすチップを作るのに、TSMCの下請けをする事も必要だろう。
 でも、今ではオモチャの様なチップもオモチャの頭脳には必要だろうに。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

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?