「50円マイコン ch32v003 を使った簡単キット(AKBONE2024)を組み立てる」
https://qiita.com/nanbuwks/items/22680849ee7674d66a89
のキットのファームウェア開発のための環境はいくつかありますが、今回は「ch32v003fun」 を使い、Ubuntu Linux のPCを使ってビルド&書き込むところまで試してみます。
環境
- Ubuntu 22.04 LTS
ch32v003fun
以下のページのうち、
インストールは以下をもとにやっていきます。
下準備
WCH-LinkE を用意し、WindowsPC を用いてファームウェアの更新およびRISC-Vモードの設定を行います。
「WCH-LinkE を初期設定する」
https://qiita.com/nanbuwks/items/fd43cb92c6d381917f7e
その後、Ubuntu 上で WCH-LinkE のためのデバイス設定を以下のようにしておきます。
$ sudo usermod -aG $USER plugdev
$ sudo chmod a+r /etc/udev/rules.d/10-wch-linke.rules
cch32v003fun をインストール、ビルド
レポジトリをクローン。
$ git clone git@github.com:cnlohr/ch32v003fun.git
$ cd ch32v003fun
$ ls
LICENSE ch32v003fun examples_v20x extralibs package.json
README.md examples examples_v30x minichlink platformio.ini
build_scripts examples_v10x examples_x035 misc
Make 環境などは examples* などに入っているようだ。
$ cd examples/blink
ここで make でいいのかな。
$ make
riscv64-elf-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE= -DTARGET_MCU_LD=0 -DTARGET_MCU_MEMORY_SPLIT= ../../ch32v003fun/ch32v003fun.ld > ../../ch32v003fun/generated_ch32v003.ld
/bin/sh: 1: riscv64-elf-gcc: not found
make: *** [../../ch32v003fun/ch32v003fun.mk:225: ../../ch32v003fun/generated_ch32v003.ld] エラー 127
クロスコンパイル環境が入ってないのでここでエラーが出ます。
$ cd ../..
minichlink が書き込みツールかな?
$ cd ch32v003fun/minichlink/
必要なライブラリをインストールします。
$ sudo apt-get install build-essential libnewlib-dev gcc-riscv64-unknown-elf libusb-1.0-0-dev libudev-dev
先にエラーの出た、クロス開発環境も一緒に設定しました。
minichlink をビルドします。
$ make
gcc -o minichlink minichlink.c pgm-wch-linke.c pgm-esp32s2-ch32xx.c nhc-link042.c ardulink.c serial_dev.c pgm-b003fun.c minichgdb.c -lpthread -lusb-1.0 -ludev -O0 -g3 -Wall -DCH32V003 -I.
gcc -o minichlink.so minichlink.c pgm-wch-linke.c pgm-esp32s2-ch32xx.c nhc-link042.c ardulink.c serial_dev.c pgm-b003fun.c minichgdb.c -lpthread -lusb-1.0 -ludev -O0 -g3 -Wall -DCH32V003 -I. -shared -fPIC
$ ls -alh minichlink*
-rwxrwxr-x 1 nanbuwks nanbuwks 459K 9月 8 12:55 minichlink
-rw-rw-r-- 1 nanbuwks nanbuwks 61K 9月 7 16:38 minichlink.c
-rw-rw-r-- 1 nanbuwks nanbuwks 101K 9月 7 16:38 minichlink.exe
-rw-rw-r-- 1 nanbuwks nanbuwks 6.8K 9月 7 16:38 minichlink.h
-rwxrwxr-x 1 nanbuwks nanbuwks 480K 9月 8 12:55 minichlink.so
これで minichlink と minichlink.so が生成されました。 なお Windows 環境のためには minichlink.exe はバイナリがもともと用意されていたようです。
WCH-LinkE の認識
WCH-LinkE をつないでおきます。そのまま起動するとエラー。
$ ./minichlink
Error: couldn't open wch link device (libusb_open() = -3)
Error: Could not initialize any supported programmers
Error: Could not initialize any supported programmers
sudo すると認識しました。
$ sudo ./minichlink
WARNING: You are not in the plugdev group, the canned udev rules will not work on your system.
Found WCH Link
WCH Programmer is LinkE version 2.11
Already Connected
Full Chip Type Reply: [4] 81-55-01-01-11-00-00-00
Detected: CH32V10x
パスの通った場所にコピーしておきます。
$ sudo cp minichlink /usr/local/bin/
サンプルプログラムのビルド
$ make
riscv64-unknown-elf-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE= -DTARGET_MCU_LD=0 ../../ch32v003fun/ch32v003fun.ld > ../../ch32v003fun/generated_ch32v003.ld
riscv64-unknown-elf-gcc -o blink.elf ../../ch32v003fun/ch32v003fun.c blink.c -g -Os -flto -ffunction-sections -fdata-sections -fmessage-length=0 -msmall-data-limit=8 -march=rv32ec -mabi=ilp32e -DCH32V003=1 -static-libgcc -I/usr/include/newlib -I../../ch32v003fun/../extralibs -I../../ch32v003fun -nostdlib -I. -Wall -Wl,--print-memory-usage -L../../ch32v003fun/../misc -lgcc -T ../../ch32v003fun/generated_ch32v003.ld -Wl,--gc-sections
Memory region Used Size Region Size %age Used
FLASH: 560 B 16 KB 3.42%
RAM: 0 GB 2 KB 0.00%
riscv64-unknown-elf-objdump -S blink.elf > blink.lst
riscv64-unknown-elf-objdump -t blink.elf > blink.map
riscv64-unknown-elf-objcopy -O binary blink.elf blink.bin
riscv64-unknown-elf-objcopy -O ihex blink.elf blink.hex
make -C ../../ch32v003fun/../minichlink all
make[1]: ディレクトリ '/home/nanbuwks/Downloads/ch32v003fun/minichlink' に入ります
make[1]: 'all' に対して行うべき事はありません.
make[1]: ディレクトリ '/home/nanbuwks/Downloads/ch32v003fun/minichlink' から出ます
../../ch32v003fun/../minichlink/minichlink -w blink.bin flash -b
Error: Could not initialize any supported programmers
Error: Could not initialize any supported programmers
make: *** [../../ch32v003fun/ch32v003fun.mk:229: cv_flash] エラー 224
ビルドはうまくできているみたいです。
WCH-LINKE を接続してもう一度。
$ make
riscv64-unknown-elf-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE= -DTARGET_MCU_LD=0 ../../ch32v003fun/ch32v003fun.ld > ../../ch32v003fun/generated_ch32v003.ld
riscv64-unknown-elf-gcc -o blink.elf ../../ch32v003fun/ch32v003fun.c blink.c -g -Os -flto -ffunction-sections -fdata-sections -fmessage-length=0 -msmall-data-limit=8 -march=rv32ec -mabi=ilp32e -DCH32V003=1 -static-libgcc -I/usr/include/newlib -I../../ch32v003fun/../extralibs -I../../ch32v003fun -nostdlib -I. -Wall -Wl,--print-memory-usage -L../../ch32v003fun/../misc -lgcc -T ../../ch32v003fun/generated_ch32v003.ld -Wl,--gc-sections
Memory region Used Size Region Size %age Used
FLASH: 560 B 16 KB 3.42%
RAM: 0 GB 2 KB 0.00%
riscv64-unknown-elf-objdump -S blink.elf > blink.lst
riscv64-unknown-elf-objdump -t blink.elf > blink.map
riscv64-unknown-elf-objcopy -O binary blink.elf blink.bin
riscv64-unknown-elf-objcopy -O ihex blink.elf blink.hex
make -C ../../ch32v003fun/../minichlink all
make[1]: ディレクトリ '/home/nanbuwks/Downloads/ch32v003fun/minichlink' に入ります
make[1]: 'all' に対して行うべき事はありません.
make[1]: ディレクトリ '/home/nanbuwks/Downloads/ch32v003fun/minichlink' から出ます
../../ch32v003fun/../minichlink/minichlink -w blink.bin flash -b
Found WCH Link
WCH Programmer is LinkE version 2.14
Already Connected
Full Chip Type Reply: [4] 81-55-01-01-11-00-00-00
Detected: CH32V10x
^Cmake: *** [../../ch32v003fun/ch32v003fun.mk:229: cv_flash] 割り込み
WCH-LinkE は認識しているみたいです。
ではWCH-LinkEにターゲットボードを接続します。
ターゲットボードは今回ははんだづけせず、L字ピンをひっかけました。
$ make
riscv64-unknown-elf-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE= -DTARGET_MCU_LD=0 ../../ch32v003fun/ch32v003fun.ld > ../../ch32v003fun/generated_ch32v003.ld
riscv64-unknown-elf-gcc -o blink.elf ../../ch32v003fun/ch32v003fun.c blink.c -g -Os -flto -ffunction-sections -fdata-sections -fmessage-length=0 -msmall-data-limit=8 -march=rv32ec -mabi=ilp32e -DCH32V003=1 -static-libgcc -I/usr/include/newlib -I../../ch32v003fun/../extralibs -I../../ch32v003fun -nostdlib -I. -Wall -Wl,--print-memory-usage -L../../ch32v003fun/../misc -lgcc -T ../../ch32v003fun/generated_ch32v003.ld -Wl,--gc-sections
Memory region Used Size Region Size %age Used
FLASH: 560 B 16 KB 3.42%
RAM: 0 GB 2 KB 0.00%
riscv64-unknown-elf-objdump -S blink.elf > blink.lst
riscv64-unknown-elf-objdump -t blink.elf > blink.map
riscv64-unknown-elf-objcopy -O binary blink.elf blink.bin
riscv64-unknown-elf-objcopy -O ihex blink.elf blink.hex
make -C ../../ch32v003fun/../minichlink all
make[1]: ディレクトリ '/home/nanbuwks/Downloads/ch32v003fun/minichlink' に入ります
make[1]: 'all' に対して行うべき事はありません.
make[1]: ディレクトリ '/home/nanbuwks/Downloads/ch32v003fun/minichlink' から出ます
../../ch32v003fun/../minichlink/minichlink -w blink.bin flash -b
Found WCH Link
WCH Programmer is LinkE version 2.14
Full Chip Type Reply: [8] 82-0d-05-09-00-30-05-00
Detected: CH32V003
Setup success
Flash Storage: 16 kB
Part UUID : 53-a5-ab-cd-bb-73-bc-01
PFlags : ff-ff-ff-ff
Part Type (B): 07-13-bb-91
Read protection: disabled
Interface Setup
Image written.
うまく書けたようです。
blink の変更
AKBONE2024 は PD5 に LED
が接続されています。サンプルプログラムでは、PD0,PD4,PD6,PC0 を blink していますが、
それを書き換えて PD0,PD4,PD5,PC0 にしました。
右上のLEDが点滅し、無事プログラム変更が確認できました。