Getting Started with CH32V003: Difference between revisions

From Embedded Workshop
Jump to navigation Jump to search
 
(22 intermediate revisions by 2 users not shown)
Line 2: Line 2:
https://www.youtube.com/watch?v=L9Wrv7nW-S8&ab_channel=EEVblog<br>
https://www.youtube.com/watch?v=L9Wrv7nW-S8&ab_channel=EEVblog<br>
I had to learn more about this chip.
I had to learn more about this chip.
==Dallas Makerspace Workshop, Wednesday, Sept 25th, 7-9PM==
For those who have signed up for the CH32V003 Workshop,  '''Welcome !'''
I have already heard from some of you, and I'm getting excited to see what I can learn as well.
Some of you have already installed the tools, and are programming your CH32V003 boards with
example code, installing command-line example, learning what happens when you attempt a 32-bit
read on an unaligned boundary, and making code comments. Thank you for the interaction! I love it!
'''If possible, please spend a little time downloading the tools and example code:'''
'''IDE:''' http://www.mounriver.com/
'''LinkE Software:''' https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html
'''Example Code:''' https://github.com/wuxx/nanoCH32V003
'''OR:''' https://github.com/openwch/ch32v003/tree/main/EVT/EXAM
I'll have some additional development boards and LinkE programmers.
I'll also have the software tools and examples on thumb drives.
I just finished testing five development boards that arrived from AliExpress.
I soldered the pins onto each and installed a "blinky" test program.
The development boards are working great!
Four LinkE units arrived as well.  After configuring them to use the "WCH-LinkRV Mode",
they worked great.
==The CH32V003 microcontroller==
32-bit RISC-V core - 48MHz operating frequency
2KB SRAM
16KB program FLASH
System power supply: 3.3V or 5V
Factory-trimmed 24MHz RC oscillator (HSI)
DMA, ADC (8 external, 2 internal signals), 2 Timers, USART,
I2C, SPI, up to 18 GPIOs
The 20-pin '''CH32V003F4U6''' is $0.15 in "onesie-twosie" quantities.
The 8-pin '''CH32V003J4M6''' is available for $0.10.
'''Data Sheet:''' https://github.com/wuxx/nanoCH32V003/blob/master/doc/CH32V003DS0_EN.PDF
'''Reference Manual:''' https://github.com/wuxx/nanoCH32V003/blob/master/doc/CH32V003RM_EN.PDF
'''Instruction Set:''' https://riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf


==Where to get a CH32V003 development board==
==Where to get a CH32V003 development board==
  I ordered this board: along with the programmer and cable for $7.50:
  I ordered five development kits (Nano Dev board, LinkE programmer, USB cable) for $53.18 in April, 2023, from aliexpress.com.
  https://www.aliexpress.us/item/3256805035436953.html
I obtained another four kits from a coworker.  Sorry, this kit is no longer available.
Amazon will sell these development boards and LinkE boards for $10 (or more) each.
aliexpress.com will sell these development boards for $1.  The WCH-LinkE boards run $5.45.
My favorite development board includes a CH340 USB-Serial chip on-board. (I REALLY like this feature!)
https://www.amazon.com/CH32V003-Development-Minimum-Interface-fepart303799/dp/B0CSJYQ94L/ref=sr_1_3
I don't like the price the seller is asking.  Search AliExpress for better pricing...
  https://www.aliexpress.us/item/3256805693233146.html
   
   
  Repository for board with documentation and example code: https://github.com/wuxx/nanoCH32V003
  Repository for board with documentation and example code: https://github.com/wuxx/nanoCH32V003
Line 19: Line 64:
  Inside the "doc" folder is the zipfile, CH32V003EVT.ZIP, with "EVT" folder inside.
  Inside the "doc" folder is the zipfile, CH32V003EVT.ZIP, with "EVT" folder inside.
  Unzip the EVT folder into "doc", so you have the example code available.
  Unzip the EVT folder into "doc", so you have the example code available.
This zip file was provided by WCH, providing examples for the CH32V003,
not specifically for the nanoCH32V003 board.
   
   
  CH32V003 website: http://www.wch-ic.com/products/CH32V003.html
  Github Examples: https://github.com/openwch/ch32v003/tree/main/EVT/EXAM
The device on the development board is: '''CH32V003F4U6''', with 18 GPIOs in a QFN20 package


==MounRiver Studio IDE==
==MounRiver Studio IDE==
Line 28: Line 74:


==More info concerning the board==
==More info concerning the board==
  According to the schematic, the LED is connected to PD6
According to the schematic, the LED is connected to PD6
'''If using the GPIO example project, need to change source code to use PD6, not PD0.'''


==WCH-LinkE v1.0==
==WCH-LinkE v1.0==
  After plugging in the WCH-Link USB-Serial programmer, the device should display in Window Device Manager
  After plugging in the WCH-LinkE USB-Serial programmer, the device should display in Window Device Manager
  [[File:WCH_Link_Device_Manager.jpg|right|300px]]
  [[File:WCH_Link_Device_Manager.jpg|right|300px]]
[[File:WCH-LinkE front.jpg|200px]]
[[File:WCH-LinkE back.jpg|200px]]
  The programmer comes with a 4-conductor cable, wire colors: brown (1), red (2), orange (3), yellow (4)
  The programmer comes with a 4-conductor cable, wire colors: brown (1), red (2), orange (3), yellow (4)
   
  I connected the LinkE programmer to the nanoCH32V003 target board as follows:
'''Target        LinkE'''
GND  - brown  - GND
DIO  - yellow - SWDIO
3V3  -  red  - 3V3
 
==WCH-Link Utility==
==WCH-Link Utility==
  This software tool connects with the WCH-LinkE programmer, and allows the user to read, write, examine
  This software tool connects with the WCH-LinkE programmer, and allows the user to read, write, examine
Line 49: Line 103:
  https://github.com/AlexanderMandera/arduino-wch32v003
  https://github.com/AlexanderMandera/arduino-wch32v003
  https://www.tindie.com/products/adz1122/ch32v003-risc-v-mcu-development-board/
  https://www.tindie.com/products/adz1122/ch32v003-risc-v-mcu-development-board/
Example code provided by the processor manufacturer: http://www.wch.cn/downloads/CH32V003EVT_ZIP.html
https://www.wch.cn/downloads/file/409.html
guide: https://pallavaggarwal.in/2023/09/20/ch32v003-programming-guide/
guide: https://community.element14.com/technologies/embedded/b/blog/posts/low-cost-microcontrollers-using-a-ch32v003-risc-v-device
I2C Assembly Example: https://github.com/IanWraith/CH32V003-RISC-V-Assembly-Examples/blob/main/i2c.s
   
   
  I'm trying to find a port of FreeRTOS for CH32V003 - Links:
  I2C Example using AT24C256 EEPROM - Link:
  https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
  https://pallavaggarwal.in/2023/10/05/ch32v003-programming-i2c-eeprom/


==Current Project Status==
==My CH32V003 Projects==
  Today, 4/15/23, I started to work with this nanoCH32V003 development board.
  Currently storing my CH32V003 projects on github:
I soldered on the header pins.  I then connected GND, DIO, and 3V3 signals
  1us Timer : https://github.com/JimMerkle/CH32V003_Timer_1us
  from the 3-wire programmer interface to the WCH-LinkE board.
  command_line: https://github.com/JimMerkle/CH32V003_command_line
  '''My Wiring'''
  I2C Read/Write w DS3231: https://github.com/JimMerkle/CH32V003_I2C_7bit
'''Target        LinkE'''
GND  - brown  - GND
DIO  - yellow - SWDIO
3V3  -  red  - 3V3
When I attempted to use the WCH-Link Utility with the WCH-LinkE, the tool indicated
I needed to update the firmware.  After a few attempts, this process completed successfully.
  Now, using WCH-Link Utility, I'm able to read the flash program from the target and save it to a file.  '''(Good first step)'''
I built the sample GPIO project, "GPIO_Toggle", downloaded the resulting GPIO_Toggle.bin file to the target board.
'''NOTHING!  No Blinky!'''
I'm able to reprogram the board using the saved flash data.  - That works!  LED: 500ms high, 500ms low.
With a scope in hand, I see PD0 is toggling nicely.
Seems the example software was developed for a different board or something.
Changed the software to use PD6, that connects to the on-board LED.  The LED is now blinking as expected!
The GPIO example, GPIO_Toggle project, also enables serial debug output on D6 (UTX).
After attaching an FTDI USB-Serial board to GND and D6, I'm receiving serial debug on my Tera Term terminal.
{{Highlight|SystemClk:48000000}}
{{Highlight|GPIO Toggle TEST}}

Latest revision as of 16:55, 21 September 2024

After watching David Jones's YouTube "EEVblog 1524 - The 10 CENT RISC V Processor! CH32V003",
https://www.youtube.com/watch?v=L9Wrv7nW-S8&ab_channel=EEVblog
I had to learn more about this chip.

Dallas Makerspace Workshop, Wednesday, Sept 25th, 7-9PM

For those who have signed up for the CH32V003 Workshop,  Welcome !
I have already heard from some of you, and I'm getting excited to see what I can learn as well.
Some of you have already installed the tools, and are programming your CH32V003 boards with
example code, installing command-line example, learning what happens when you attempt a 32-bit
read on an unaligned boundary, and making code comments. Thank you for the interaction! I love it!

If possible, please spend a little time downloading the tools and example code:
IDE: http://www.mounriver.com/
LinkE Software: https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html

Example Code: https://github.com/wuxx/nanoCH32V003
OR: https://github.com/openwch/ch32v003/tree/main/EVT/EXAM

I'll have some additional development boards and LinkE programmers.
I'll also have the software tools and examples on thumb drives.

I just finished testing five development boards that arrived from AliExpress.
I soldered the pins onto each and installed a "blinky" test program.
The development boards are working great!
Four LinkE units arrived as well.  After configuring them to use the "WCH-LinkRV Mode",
they worked great.

The CH32V003 microcontroller

32-bit RISC-V core - 48MHz operating frequency
2KB SRAM
16KB program FLASH
System power supply: 3.3V or 5V
Factory-trimmed 24MHz RC oscillator (HSI)
DMA, ADC (8 external, 2 internal signals), 2 Timers, USART,
I2C, SPI, up to 18 GPIOs
The 20-pin CH32V003F4U6 is $0.15 in "onesie-twosie" quantities.
The 8-pin CH32V003J4M6 is available for $0.10.

Data Sheet: https://github.com/wuxx/nanoCH32V003/blob/master/doc/CH32V003DS0_EN.PDF
Reference Manual: https://github.com/wuxx/nanoCH32V003/blob/master/doc/CH32V003RM_EN.PDF
Instruction Set: https://riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf

Where to get a CH32V003 development board

I ordered five development kits (Nano Dev board, LinkE programmer, USB cable) for $53.18 in April, 2023, from aliexpress.com.
I obtained another four kits from a coworker.  Sorry, this kit is no longer available.
Amazon will sell these development boards and LinkE boards for $10 (or more) each.
aliexpress.com will sell these development boards for $1.  The WCH-LinkE boards run $5.45.

My favorite development board includes a CH340 USB-Serial chip on-board. (I REALLY like this feature!)
https://www.amazon.com/CH32V003-Development-Minimum-Interface-fepart303799/dp/B0CSJYQ94L/ref=sr_1_3
I don't like the price the seller is asking.  Search AliExpress for better pricing...
https://www.aliexpress.us/item/3256805693233146.html

Repository for board with documentation and example code: https://github.com/wuxx/nanoCH32V003
The github repo's README.md file: https://github.com/wuxx/nanoCH32V003#readme
                  Schematic: https://github.com/wuxx/nanoCH32V003/blob/master/hardware/nanoCH32V003.pdf

I created a RISC-V folder under Documents like so:
C:\Users\Jim\Documents\RISC-V

While inside the RISC-V folder, I cloned the repository like so:
 git clone https://github.com/wuxx/nanoCH32V003.git

Inside the "doc" folder is the zipfile, CH32V003EVT.ZIP, with "EVT" folder inside.
Unzip the EVT folder into "doc", so you have the example code available.
This zip file was provided by WCH, providing examples for the CH32V003,
not specifically for the nanoCH32V003 board.

Github Examples: https://github.com/openwch/ch32v003/tree/main/EVT/EXAM

MounRiver Studio IDE

Download the latest version of MounRiver Studio IDE from the official website:
http://www.mounriver.com/  and install it.

More info concerning the board

According to the schematic, the LED is connected to PD6
If using the GPIO example project, need to change source code to use PD6, not PD0.

WCH-LinkE v1.0

After plugging in the WCH-LinkE USB-Serial programmer, the device should display in Window Device Manager


The programmer comes with a 4-conductor cable, wire colors: brown (1), red (2), orange (3), yellow (4)
I connected the LinkE programmer to the nanoCH32V003 target board as follows:
Target         LinkE
GND  - brown  - GND
DIO  - yellow - SWDIO
3V3  -  red   - 3V3

WCH-Link Utility

This software tool connects with the WCH-LinkE programmer, and allows the user to read, write, examine
program data written to the RISC-V device.
https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html

Notes & References

As noted in the YouTube EEVblog, the TSSOP20 package for this part appears to be pin
compatible with the STM8S003F3, https://www.st.com/resource/en/datasheet/stm8s003f3.pdf, at 1/3rd the price.
The UFQFPN20 package doesn't appear to be pin compatible.
Other websites for the CH32V003:
https://www.cnx-software.com/2023/02/22/ch32v003-risc-v-mcu-gets-1-5-development-board-open-source-gcc-toolchain-and-flasher-utility/
https://hackaday.com/2023/03/02/a-ch32v003-toolchain-if-you-can-get-one-to-try-it-on/
https://github.com/AlexanderMandera/arduino-wch32v003
https://www.tindie.com/products/adz1122/ch32v003-risc-v-mcu-development-board/
Example code provided by the processor manufacturer: http://www.wch.cn/downloads/CH32V003EVT_ZIP.html
https://www.wch.cn/downloads/file/409.html
guide: https://pallavaggarwal.in/2023/09/20/ch32v003-programming-guide/
guide: https://community.element14.com/technologies/embedded/b/blog/posts/low-cost-microcontrollers-using-a-ch32v003-risc-v-device
I2C Assembly Example: https://github.com/IanWraith/CH32V003-RISC-V-Assembly-Examples/blob/main/i2c.s

I2C Example using AT24C256 EEPROM - Link:
https://pallavaggarwal.in/2023/10/05/ch32v003-programming-i2c-eeprom/

My CH32V003 Projects

Currently storing my CH32V003 projects on github:
1us Timer : https://github.com/JimMerkle/CH32V003_Timer_1us
command_line: https://github.com/JimMerkle/CH32V003_command_line
I2C Read/Write w DS3231: https://github.com/JimMerkle/CH32V003_I2C_7bit