150원짜리 CH32V003 MCU를 아두이노처럼 외부 Programmer 없이 USB 꽂으면 셀프 플래싱이 가능하도록 해봄.

단, 처음에는 WCH-LinkE나 ardulink를 이용해 부트로더를 플래싱해줘야 하고, 3.3V로만 사용 가능함


1. 회로 설계 및 보드 디자인(CH32V003F4P6)

https://github.com/chaealarm/CH32V003EasyUSBBoard/tree/main

rv003usb( https://github.com/cnlohr/rv003usb )디자인에 맞춰 설계


2. (WCH-LinkE가 있다면 패스)ardulink 준비

 - 준비물 : Ardunio Uno, 점퍼선, 1k 저항

 a) ardulink 펌웨어를 빌드하고 아두이노에 플래싱

https://gitlab.com/BlueSyncLine/arduino-ch32v003-swio

 b) 3V3, GND, DIO(1.5k 저항) 연결


3. 부트로더 플래싱

https://github.com/cnlohr/rv003usb/tree/master/bootloader

 - 기본적으로 위 부트로더 코드는 전원투입후 USB 플래싱 5초 대기 후 원래 펌웨어로 부팅됨

 - 필요에 따라 GPIO Input(예시:특정 버튼을 누른채로 전원투입시)을 이용할 수도 있음. 단 부트로더 용량 문제로 위와 같이 몇초 대기하는 기능과 병행할 수 없음

 - WCH-LinkE 사용 시 Zagid로 Winusb 드라이버 설치후 플래싱(minichlink) 가능

 - ardulink 사용시 make_win.bat 8번째 줄(마지막줄)에 아래 예시와 같이 포트번호 추가 : -c (아두이노 연결된 COM포트) 

..\ch32v003fun\minichlink\minichlink.exe -a -w bootloader.bin bootloader -B -c COM6


4. 아두이노 Board Manager 추가

 a)아두이노 실행후 Preferences → Additional Board Manager URLs 아래 URL 추가 후 OK

https://github.com/chaealarm/arduino-wch32v003/releases/download/Package_Json/package_ch32v003_index.json

 b)Board Manager에서 wch 검색후 "WCH Boards by chaealarm" Install

 c)Install 완료 되면 아두이노처럼 사용가능

  - GPIO 핀은 PORTA, PORTC, PORTD에 따라 A1~A2, C0~C7, D0~D7 로 지정

    * 여기서 A1, A2 핀은 다른 아두이노 보드처럼 Analog 핀 번호를 뜻하는게 아니라, 각각 PORTA1, PORTA2 핀을 뜻함

  - 펌웨어 업로드 시 3에서 상기한 조건이 돼야 업로드 가능


깃허브 Repo들 잡탕해서 아두이노 보드 추가 손 좀 봤다

주요 수정 내용은 기존 Repo에서 ardulink, rv003usb 부트로더(셀프 플래싱) 가능하게 수정해서 포크함

https://github.com/chaealarm/arduino-wch32v003