話題の300円基板使ってみる -3-

 自前でビルドしてまでやる気はないのだけど、ボードの開発元の提供する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