@@ -38,15 +38,10 @@ You can just try out the debugprintf project, or call SetupDebugPrintf(); and pr
Via gdbserver built into minichlink! It works with `gdb-multiarch` as well as in Visual Studio Code
### TODO
## System Prep
For installation instructions, see the [wiki page here](https://github.com/cnlohr/ch32v003fun/wiki/Installation)
You can use the pre-compiled minichlink or go to minichlink dir and `make` it.
## Building and Flashing
```
...
...
@@ -54,87 +49,14 @@ cd examples/blink
make
```
In Linux this will "just work"(TM) using `minichlink`.
In Windows, if you want to use minichlink, you will need to use Zadig to install WinUSB to the WCH-Link interface 0.
The generated .hex file is compatible with the official WCH flash tool.
text = code, data = constants and initialization values, bss = uninitialized values.
dec is the sum of the 3 and reflects the number of bytes in flash that will get taken up by the program.
The generated .bin is used by minichlink and the .hex file is compatible with the official WCH flash tool.
## ESP32S2 Programming
## WCH-Link (E)
It enumerates as 2 interfaces.
0. the programming interface. I can't get anything except the propreitary interface to work.
1. the built-in usb serial port. You can hook up UART D5=TX to RX and D6=RX to TX of the CH32V003 for printf/debugging, default speed is 115200. Both are optional, connect what you need.
If you want to mess with the programming code in Windows, you will have to install WinUSB to the interface 0. Then you can uninstall it in Device Manager under USB Devices.
On linux you find the serial port with `ls -l /dev/ttyUSB* /dev/ttyACM*` and connect to it with `screen /dev/ttyACM0 115200`
Disconnect with `CTRL+a``:quit`.
Adding your user to these groups will remove the need to `sudo` for access to the serial port:
debian-based
`sudo usermod -a -G dialout $USER`
arch-based
`sudo usermod -a -G uucp $USER`
You'll need to log out and in to see the change.
## WCH-Link Hardware access in WSL
To use the WCH-Link in WSL, it is required to "attach" the USB hardware on the Windows side to WSL. This is achieved using a tool called usbipd.
1. On windows side, install the following MSI https://github.com/dorssel/usbipd-win/releases
4. Run Powershell as admin and use the `usbipd list` command to list all connected devices
5. Find the this device: `1a86:8010 WCH-Link (Interface 0)` and note the busid it is attached to
6. In powershell, use the command `usbipd wsl attach --busid=<BUSID>` to attach the device at the busid from previous step
7. You will hear the windows sound for the USB device being removed (and silently attached to WSL instead)
8. In WSL, you will now be able to run `lsusb` and see that the SCH-Link is attached
9. For unknown reasons, you must run make under root access in order to connect to the programmer with minichlink. Recommend running `sudo make` when building and programming projects using WSL. This may work too (to be confirmed):
## VSCode +/- PlatformIO
### non-root access on linux
Unlike serial interfaces, by default, the USB device is owned by root, has group set to root and everyone else may only read by default.
The way to allow non-root users/groups to be able to access devices is via udev rules.
minichlink provides a list of udev rules that allows any user in the plugdev group to be able to interact with the programmers it supports.
You can install and load the required udev rules for minichlink by executing the following commands in the root of this Git repository:
sudo udevadm control --reload-rules && sudo udevadm trigger
```
If you add support for another programmer in minichlink, you will need to add more rules here.
**Note:** This readme used to recommend manually making these rules under `80-USB_WCH-Link.rules`. If you wish to use the new rules file shipped in this repo, you may want to remove the old rules file.
## minichlink
I wrote some libusb copies of some of the basic functionality from WCH-Link, so you can use the little programmer dongle they give you to program the ch32v003.
Currently, it ignores all the respone codes, except when querying the chip. But it's rather surprising how featured I could get in about 5 hours.
Anyone who wants to write a good/nice utility should probably look at the code in this folder.
## VSCode + PlatformIO
Note: This is genearlly used for CI on this repo. However, note that this is **not** the path that allows for debugging on Windows.
Note: With PlatformIO is genearlly used for CI on this repo. However, note that this is **not** the path that allows for debugging on Windows.
This project can also be built, uploaded and debugged with VSCode and the PlatformIO extension. Simply clone and open this project in VSCode and have the PlatformIO extension installed.
...
...
@@ -151,6 +73,11 @@ If the C/C++ language server clangd is unable to find `ch32v003fun.h`, the examp
* Optional (not needed, can be configured as output if fuse set): `NRST` is on `PD7`