# wchisp - WCH ISP Tool in Rust ![crates.io](https://img.shields.io/crates/v/wchisp.svg) Command-line implementation of the WCHISPTool in Rust, by the ch32-rs team. This tool is a work in progress. - **NOTE**: CH32V003 does not have a USB ISP interface, use WCH-Link to program - **NOTE**: This tool is for USB ISP, not using with WCH-Link - Currently I'm working on a WCH-Link implementation ## TODOs - [x] chip detection, identification - `wchisp probe` - `wchisp info` - [x] flash and verify code - [x] ELF parsing - [x] hex, bin, ihex support - [x] skip erasing, verifying, resetting - [x] chip config register dump - `wchisp config` - works for most chips, but not all. Issues and PRs are welcomed - [ ] write config registers - [x] reset config registers to default(unprotected, debug-enabled state) - [ ] write config with friendly register names? like `wchisp config set SRAM_CODE_MODE=1 ...` - [x] EEPROM dump - [x] EEPROM erase - [x] EEPROM write - [x] select from multiple chips(using `-d` to select index) `wchisp -d 0 info` - [ ] ISP via UART or Net ## Usage ```console > cargo install wchisp --git https://github.com/ch32-rs/wchisp > wchisp info 14:51:24 [INFO] Chip: CH32V307VCT6[0x7017] (Code Flash: 256KiB) 14:51:24 [INFO] Chip UID: 30-78-3e-26-3b-38-a9-d6 14:51:24 [INFO] BTVER(bootloader ver): 02.60 14:51:24 [INFO] Code Flash protected: false RDPR_USER: 0x9F605AA5 [7:0] RDPR 0b10100101 (0xA5) `- Unprotected [16:16] IWDG_SW 0b0 (0x0) `- IWDG enabled by the software [17:17] STOP_RST 0b0 (0x0) `- Enable [18:18] STANDBY_RST 0b0 (0x0) `- Enable [23:21] SRAM_CODE_MODE 0b11 (0x3) `- CODE-228KB + RAM-32KB DATA: 0x00FF00FF [7:0] DATA0 0b11111111 (0xFF) [23:16] DATA1 0b11111111 (0xFF) WRP: 0xFFFFFFFF `- Unprotected > wchisp flash ./path/to/firmware.{bin,hex,elf} > wchisp config info > wchisp config reset ``` ## Tested On This tool should work on most WCH MCU chips. But I haven't tested it on any other chips. - [x] CH32V307 - VCT6 - RCT6 #8 - [x] CH32V103 - [x] CH32F103 - [x] CH552 - Works but might be buggy #10 #14 - [x] CH582 - CH58xM-EVT - [x] CH573 - [WeActStudio.WCH-BLE-Core](https://github.com/WeActStudio/WeActStudio.WCH-BLE-Core) - [x] CH579 - BTVER: 02.90 #18 - [x] CH559 - CH559TL_MINIEVT_V20 by wch.cn - [x] CH32V203 - [CH32V203G6 FlappyBoard](https://github.com/metro94/FlappyBoard) - [nanoCH32V203](https://github.com/wuxx/nanoCH32V203) - ... (feel free to open an issue whether it works on your chip or not) ## Related Works (Many Thanks!) - - by [@Pe3ucTop](https://github.com/Pe3ucTop/ch552tool/tree/global_rework) - - - - ### Contribution This project is under active development. If you have any suggestions or bug reports, please open an issue. If it works for your devices, please open a pull request to modify this README page. It it doesn't, please open an issue. Better provide the following information: - chip type (with variant surfix) - debug print of usb packets - correct usb packets to negotiate with the chip (via USBPcap or other tools)