I have been using Ubuntu 20.04 to test the OpenOCD and the toolchain for the CH32V series RISC-V MCUs. It worked as expected for me, and I was also interested in whether I could do the same thing on my Mac.
To start investigating the development environment of the CH32V series MCUs on Mac, I tried to build the OpenOCD using the source codes from the same GitHub repository that I used before.
At first, I installed Homebrew according to the instruction on the top of the Homebrew page. I used MacBook Pro (intel, 13inch, 2020), and the OS version was macOS Monterey (Version 12.3.1).
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
After installing Homebrew, I added the following packages using the brew command.
brew install libtool automake pkg-config libusb hidapi
I cloned the OpenOCD repository in the same way as before.
git clone https://github.com/kprasadvnsi/riscv-openocd-wch/<br>cd riscv-openocd-wch
I applied one modification to the file src/jtag/drivers/wlink.c
as follows.
sed -i '' -e '103s/^/void wlink_ramcodewrite(uint8_t *buffer, int size);\n/' src/jtag/drivers/wlink.c
This modification adds the function prototype of wlink_ramcodewrite() before the program calls the function for the first time in the wlink.c
.
As I wrote in my old post, the compiler only outputted the warnings when I built the same source codes without the modification under the Ubuntu 20.04 environment. However, the compiler outputted errors without the above modification with the macOS environment. I could not figure out how to make the error into the warnings just by specifying additional compiler options. Thus I have decided to apply the patch directly to the source.
After applying the modification, I built the OpenOCD as follows.
./bootstrap<br>./configure CFLAGS="-Wno-error" --enable-wlink<br>make
I downloaded the same MRS_Toolchain_Linux_x64_V1.40.tar.xz
from MounRiver’s download page as before and extracted the tar.xz
file.
cd ~/Downloads<br>tar Jxvf MRS_Toolchain_Linux_x64_V1.40.tar.xz
I went back to the riscv-openocd-wch/src
directory where I built the OpenOCD binary again. I copied the wch-riscv.cfg
file to this directory from the extracted MRS_Toolchain_Linux_x64_V1.40
directory.
cp ~/Downloads/MRS_Toolchain_Linux_x64_V1.40/OpenOCD/bin/wch-riscv.cfg .
I tested my OpenOCD binary with WCH’s CH32V307RCT6 evaluation board (CH32V307V-EVT-R1). Erasing, programming and verifying operations were all worked.
Program
./openocd -f wch-riscv.cfg -c init -c halt -c "program CH32V307RCT6.hex" -c exit
Erase
./openocd -f wch-riscv.cfg -c init -c halt -c "flash erase_sector wch_riscv 0 last" -c exit
Verify
./openocd -f wch-riscv.cfg -c init -c halt -c "verify_image CH32V307RCT6.hex" -c exit
Reset
./openocd -f wch-riscv.cfg -c init -c halt -c wlink_reset_resume -c exit
I checked with the same CH32V307RCT6.hex file as before. I used the screen
command to see the UART output from the CH32V307.
screen /dev/tty.usbmodem0001A00000012 115200
Note
The device name /dev/tty.usbmodem0001A00000012
might vary depending on the environment. The actual device name should be able to be obtained by the ls
command.
ls /dev/tty.usbmodem*
To quit from the screen
command, you need to press control + a
and k
first. Then you will see the prompt Really kill this window [y/n]
and press y
to finish using the screen
command.