arduino_core_ch32_sz を使って BluePill+ を L チカする

「CH32V203 ボード BluePill+ を試す(途中)」
https://qiita.com/nanbuwks/items/90863c599e90fe8d877c

では、開発環境として MounRiver を試してみましたが、聞くところによると USB 昨日はまだまだ発展途上な感じ。

CH32V203 は様々な開発環境がありますが、Arduinoベースのものとして 三峰スズ ( @suzu3tsu ) さんの作っている  Suzuno32RV / Suzuduino UNO 用のものが良いらしいです。
「開発環境 - Suzuno32RV / Suzuduino UNO ドキュメント」
https://verylowfreq.github.io/suzunodoc/devenvs.html

今回はこれを元に設定していっています。

# 環境

- Ubuntu 22.04 LTS
- Arduino 開発環境 1.8.19
-- ポータブル化設定済


# 書き込み方法

他のマイコンでよくあるような、 USB Flash 可能な Bootloader を 最初に WCH-LinkE 使って書き込んでおかないといけないかと思っていたのですが、`verylowfreq/arduino_core_ch32_sz` の場合は USB 接続だけで書き込みができました。

CH32V203 であれば、USB Flash はチップに搭載されているので、WcH-LinkE 全然必要なくできたのですね。 

# ボードマネージャで設定

Arduino IDE から ボード定義を設定した後、ボードマネジャで `CH32V Boards by M.S.` をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/26a5bab0-8130-f594-4256-1f676ea0a00a.png)

# 動作テスト

まだ マイコンボードを接続せずに
書き込み処理をしてみます。

```
/home/nanbuwks/Downloads/ardublock/arduino-1.8.19-Suzuno32RV/portable/packages/WCH/tools/wchisp/0.2.3+sz1/wchisp flash /tmp/arduino_build_10010/test.ino.elf 
00:29:26 [ERROR] Failed to open USB device: Bus 001 Device 052: ID 4348:55e0
Error: Failed to open USB device on Linux due to no enough permission
00:29:26 [WARN] It's likely the udev rules is not installed properly. Please refer to README.md for more details.
シリアルポート「00:29:26 [WARN] It's likely the udev rules is not installed properly. Please refer to README.md for more details.
」が選択されていますが、そのポートは存在しないか、ボードが接続されていません。


```
エラーは出ますが、書き込み用のビルド済みバイナリが入っているようだ。

# udev の設定
https://github.com/ch32-rs/wchisp
にあるように、udev の設定をします。
```
$ sudo vim /etc/udev/rules.d/50-wchisp.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="4348", ATTRS{idProduct}=="55e0", MODE="0666"
```
```
$ sudo udevadm control --reload-rules

```
としたけれどもうまく反映できていなかったようなので再起動してもう一度。
# 書き込み

```
最大65536バイトのフラッシュメモリのうち、スケッチが8624バイト（13%）を使っています。
最大20480バイトのRAMのうち、グローバル変数が628バイト（3%）を使っていて、ローカル変数で19852バイト使うことができます。
/home/nanbuwks/Downloads/ardublock/arduino-1.8.19-Suzuno32RV/portable/packages/WCH/tools/wchisp/0.2.3+sz1/wchisp flash /tmp/arduino_build_10010/test.ino.elf 
Error: No WCH ISP USB device found(4348:55e0 or 1a86:55e0 device not found at index #0)
Error: No WCH ISP USB device found(4348:55e0 or 1a86:55e0 device not found at index #0)
```

エラーが出てますが、elf はできているらしい。

ここで BluePill+ を USB 接続。

dmesg を見てみましたが、つないでもなんにも出てこない。
けれどもBOOTを押しながらResetしたら出てきた。

```
[214674.124055] usb 1-1: new full-speed USB device number 52 using xhci_hcd
[214674.250164] usb 1-1: New USB device found, idVendor=4348, idProduct=55e0, bcdDevice=27.00
[214674.250170] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
```
この状態で書いてみる。


```
最大65536バイトのフラッシュメモリのうち、スケッチが8624バイト（13%）を使っています。
最大20480バイトのRAMのうち、グローバル変数が628バイト（3%）を使っていて、ローカル変数で19852バイト使うことができます。
/home/nanbuwks/Downloads/ardublock/arduino-1.8.19-Suzuno32RV/portable/packages/WCH/tools/wchisp/0.2.3+sz1/wchisp flash /tmp/arduino_build_981135/test.ino.elf 
00:51:57 [INFO] Chip: CH32V203C8T6[0x3119] (Code Flash: 64KiB)
00:51:57 [INFO] Chip UID: CD-AB-11-61-0E-BC-EC-C8
00:51:57 [INFO] BTVER(bootloader ver): 02.70
00:51:57 [INFO] Code Flash protected: true
00:51:57 [INFO] Current config registers: ff003fc000ff00ffffffffff00020700cdab11610ebcecc8
RDPR_USER: 0xC03F00FF
  [7:0]   RDPR 0xFF (0b11111111)
    `- Protected
  [16:16] IWDG_SW 0x1 (0b1)
    `- IWDG enabled by the software, and disabled by hardware
  [17:17] STOP_RST 0x1 (0b1)
    `- Disable
  [18:18] STANDBY_RST 0x1 (0b1)
    `- Disable, entering standby-mode without RST
  [23:22] SRAM_CODE_MODE 0x0 (0b0)
    `- CODE-192KB + RAM-128KB / CODE-128KB + RAM-64KB depending on the chip
DATA: 0xFF00FF00
  [7:0]   DATA0 0x0 (0b0)
  [23:16] DATA1 0x0 (0b0)
WRP: 0xFFFFFFFF
  `- Unprotected
00:51:57 [INFO] Read /tmp/arduino_build_981135/test.ino.elf as ELF format
00:51:57 [INFO] Found loadable segment, physical address: 0x00000000, virtual address: 0x00000000, flags: 0x7
00:51:57 [INFO] Section names: [".init", ".vector", ".text", ".init_array"]
00:51:57 [INFO] Found loadable segment, physical address: 0x000021b0, virtual address: 0x20000000, flags: 0x6
00:51:57 [INFO] Section names: [".data"]
00:51:57 [INFO] Firmware size: 9216
00:51:57 [INFO] Erasing...
00:51:57 [INFO] Erased 10 code flash sectors
00:51:58 [INFO] Erase done
00:51:58 [INFO] Writing to code flash...
00:51:58 [INFO] Code flash 9216 bytes written
00:51:59 [INFO] Verifying...
スケッチの書き込み中にエラーが発生しました
Error: Verify failed, mismatch

```


書き込めました。


# Lチカする


回路図はこれかな。
https://github.com/WeActStudio/WeActStudio.BluePill-Plus-CH32/blob/master/HDK/BluePillPlus_V11_SchDoc.pdf

ソースを上記を元に、以下のようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d14adf5d-7497-83a9-7331-947df07b26bc.png)

```
#define PIN_LED PB2

void setup() {
    pinMode(PIN_LED, OUTPUT);
}

void loop() {
    digitalWrite(PIN_LED, HIGH);
    delay(500);
    digitalWrite(PIN_LED, LOW);
    delay(500);
}
```

うまくできました。


![IMG_20241115_103249.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/9b9784ed-856b-e91c-fe77-aaaca21f2db1.jpeg)