自前でビルドしてまでやる気はないのだけど、ボードの開発元の提供するArduinoIDE用のボード定義ファイルを読み込んでいるので、これをopenwchの公式JSONに差し替えてみることはできる。
一応、UIAPの定義は削除する。ArduinoIDEの設定からJSONを削除して、ArduinoIDEを終了してボード定義を削除。
% rm -rf ~/Library/Arduino15/packages/UIAP
openwchの公式はここ。
GitHub - openwch/arduino_core_ch32: Core library for CH32duino · GitHub
https://github.com/openwch/arduino_core_ch32
指定すべき公式のJSONはこれ。
https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json
Githubにあるように、wchを検索したけど、出てこないな...

たぶん、これかな。


ArduinoIDEで見ると、WCH公式版にはopenocdは入っているがminichlinkは入っていないのね。
% find ~/Library/Arduino15/packages/WCH/tools/ | grep minichlink
% file ~/Library/Arduino15/packages/WCH/tools/openocd/1.0.0/bin/openocd
/Users/kinneko/Library/Arduino15/packages/WCH/tools/openocd/1.0.0/bin/openocd: Mach-O 64-bit executable x86_64
この構成では、書き込みにWCH-LinkEが必要になる感じ。
Aliexpressでは普通に売っているけど、USB Type-Cではないし、なんか5ピンの端子がいるっぽい。300円基板のUSBと反対側にある4つのパッドがそれっぽい。標準品ではない、専用のジグがいりそうな気配。んで、こっちはたぶん、シリアル接続。

WCH-LinkEとの組み合わせでも、macOSで動く実績はあるっぽい。
GitHub - patryk4815/ch32v-nix: GDB debugger openocd WCH-LinkE ch32v CH32V003 blackmagic macos apple · GitHub
https://github.com/patryk4815/ch32v-nix
一応、ArduinoIDEでの書き込みツールの表示も確認してみる。こんな感じ。


うーん、openocdにminichlinkのパッチを当てて同等品を作るのは先が長そうね。
しょうがない、minichlinkのビルドしてみるかな...
macOSでのARM64対応できてはいるみたい。
how do I compile minichlink on a mac? · Issue #252 · cnlohr/ch32fun
https://github.com/cnlohr/ch32fun/issues/252?utm_source=chatgpt.com
やるか。
libusbは入っている。なければ、「brew install libusb」する。
% brew list libusb
✔︎ JSON API formula_tap_migrations.jws.json Downloaded 1.9KB/ 1.9KB
✔︎ JSON API cask_tap_migrations.jws.json Downloaded 2.4KB/ 2.4KB
✔︎ JSON API cask.jws.json Downloaded 15.4MB/ 15.4MB
✔︎ JSON API formula.jws.json Downloaded 31.9MB/ 31.9MB
/opt/homebrew/Cellar/libusb/1.0.29/include/libusb-1.0/libusb.h
/opt/homebrew/Cellar/libusb/1.0.29/lib/libusb-1.0.0.dylib
/opt/homebrew/Cellar/libusb/1.0.29/lib/pkgconfig/libusb-1.0.pc
/opt/homebrew/Cellar/libusb/1.0.29/lib/ (2 other files)
/opt/homebrew/Cellar/libusb/1.0.29/sbom.spdx.json
/opt/homebrew/Cellar/libusb/1.0.29/share/libusb/ (9 files)
ソースコードをダウンロードする。
% cd Downloads
% git clone https://github.com/cnlohr/ch32fun.git
Cloning into 'ch32fun'...
remote: Enumerating objects: 12177, done.
remote: Counting objects: 100% (929/929), done.
remote: Compressing objects: 100% (348/348), done.
remote: Total 12177 (delta 740), reused 586 (delta 581), pack-reused 11248 (from 5)
Receiving objects: 100% (12177/12177), 12.13 MiB | 10.15 MiB/s, done.
Resolving deltas: 100% (7540/7540), done.
minichlinkだけをビルドする。
% cd ch32fun/minichlink
% make
gcc -o minichlink minichlink.c pgm-wch-linke.c pgm-wch-isp.c pgm-esp32s2-ch32xx.c nhc-link042.c ardulink.c serial_dev.c pgm-b003fun.c minichgdb.c chips.c ch5xx.c -lpthread -framework CoreFoundation -framework IOKit -framework Security -L/opt/homebrew/Cellar/libusb/1.0.29/lib -lusb-1.0 -O0 -Wall -Wno-asm-operand-widths -Wno-deprecated-declarations -Wno-deprecated-non-prototype -D__MACOSX__ -DMINICHLINK -DCH32V003 -I. -I/opt/homebrew/Cellar/libusb/1.0.29/include/libusb-1.0
gcc -o minichlink.so minichlink.c pgm-wch-linke.c pgm-wch-isp.c pgm-esp32s2-ch32xx.c nhc-link042.c ardulink.c serial_dev.c pgm-b003fun.c minichgdb.c chips.c ch5xx.c -lpthread -framework CoreFoundation -framework IOKit -framework Security -L/opt/homebrew/Cellar/libusb/1.0.29/lib -lusb-1.0 -O0 -Wall -Wno-asm-operand-widths -Wno-deprecated-declarations -Wno-deprecated-non-prototype -D__MACOSX__ -DMINICHLINK -DCH32V003 -I. -I/opt/homebrew/Cellar/libusb/1.0.29/include/libusb-1.0 -shared -fPIC
できた。ちゃんとarm64バイナリになっている。
% file ./minichlink
./minichlink: Mach-O 64-bit executable arm64
ArduinoIDEを終了して、openwchを削除。
% rm -rf ~/Library/Arduino15/packages/WCH/
前にやったように、ArduinoIDEを起動して、UIAPのJSONを追記して、ボードを追加。platform.txtを修正。
% mv ~/Library/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink ~/Library/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink.x86
ビルドしたminichlinkをコピーして直接差し替える。
% cp minichlink ~/Library/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/
ArduinoIDEを再起動して、ビルドと書き込み。
またエラー。
スケッチの書き込み中にエラーが発生しました
VID:0x1209, PID:0xb003
Error: Could not initialize any supported programmers
minichlinkが相手のUSBデバイスを「対応プログラマ」として掴めていない。
この300円ボードではopenwch標準と違って、USB PIDが変更されているということかな?
単体実行でも同じエラーがおきるね。オプションでUSB IDを渡す方法もない感じ。
% ./minichlink
VID:0x1209, PID:0xb003
Error: Could not initialize any supported programmers
minichlink.c内の0x1209b003を0x1209b803に変えればよさそう。
% grep 0x1209b003 ./*
Binary file ./minichlink matches
./minichlink.c: dev = TryInit_B003Fun(SimpleReadNumberInt(init_hints->serial_port, 0x1209b003));
./minichlink.c: else if ((dev = TryInit_B003Fun(SimpleReadNumberInt(init_hints->serial_port, 0x1209b003))))
./minichlink.c: fprintf( stderr, " -c [serial port for Ardulink, try /dev/ttyACM0 or COM11 etc] or [VID+PID of USB for b003boot, try 0x1209b003]\n" );
Binary file ./minichlink.exe matches
Binary file ./minichlink.so matches
書き換えて、お掃除、ビルド。
% make clean
rm -rf minichlink minichlink.so minichlink.exe
% make
実行してみる。
認識して動いているみたいだ。
% ./minichlink
VID:0x1209, PID:0xb803
Found B003Fun Bootloader
Halting Boot Countdown
Detected CH32V003
Flash Storage: 16 kB
Part UUID: f8-3e-ab-cd-60-13-bc-08
Read protection: disabled
Interface Setup
Arduinoの実行環境にコピーして書き込みしてみる。
% cp minichlink ~/Library/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/

リセットすると、USB側のLEDが8回点滅して消えた。真ん中のLEDはずっと点滅している。これでいいのかな?
USB側の小さいLEDは、USB通信のモニタをしているものらしい。たしかに、プログラムの書き込み時にはずっと点灯している。
なんか、おんなじプロセスをもうやっている人がいたよw
UIAPduino Pro Micro CH32V003 V1.4 に M1 MacのArduinoIDEで書き込む #M1Mac - Qiita
https://qiita.com/tomorrow56/items/6cae8ddc7470cb64ad7d
誰かと思えばtomorrow56さんか。なら普通にできるよねw
しかし、本家にmacOSでは煩雑とか書かれるのはイヤだな。そんなに煩雑な感じではないのだけど。
というわけで、minichlinkのバイナリのアーカイブをGithubにおいて、それを引っ張ってくるJSONを書こうと思ったのだけど... なんかいろいろ煩雑なのでやめた。
UIAPduinoのriskv-gccの指定がだいぶopenocdと違っていたり、UIAPduinoのarduino-coreのパッチが結構多くて、フォローがめんどそうだったから。
オリジナル投稿:
話題の300円基板使ってみる -3-|kinneko|pixivFANBOX
https://kinneko.fanbox.cc/posts/11578526



