8bitUSBマイコン CH552P あれこれ

# CH552P

`8bitUSBマイコン`って何？？と思い、昨年末に入手した WCH社製 [**CH552P**](https://www.wch-ic.com/products/CH552.html) について、備忘録的に書き留めておく。

# 入手先

例によって、秋月電子通商さんから購入。秋月さんオリジナルのDIP化基板。

https://akizukidenshi.com/catalog/g/gK-18131/

税込180円と格安のマイコン。

<img width="200" alt="IMG_2823.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/81bd8bb0-b103-3b3c-5bac-7da87f997da6.png" />

マイコンチップは実装済み、ピンヘッダをハンダ付けするだけ。

# 書き込み回路

↓こちらのブログを参考に、ミニブレッドボードに組みました。

https://kuninet.org/2023/12/03/ch552p-dip化キットで、ledチカチカとbasic-52/

<img width="300" alt="IMG_2833.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/8bb56465-1ef5-177c-ce2f-5e7f6a10a52e.png" />

左上のUSB-Cが、プログラム書き込み用。左下の赤いスイッチを押しながらUSBポートに接続すると、ダウンロード用のブートローダが走る。その間に、ArduinoIDEからプログラムをアップロードする。
ISPを使っても書き込めるが、`USBマイコン`と称する通りネイティブにUSBに接続できるマイコンだ。

# シリアル接続

前項の写真の上部から来ている4本のケーブル（5V, GND, TXD, RXD）が、シリアル通信用。
このマイコンは3.3Vでも起動するが、<ins>5Vを供給しないとシリアル通信できない</ins>。最初、3.3VのUSBシリアル変換器を使っていて全然通信できず、原因が分からず何時間もハマった。

# リセットスイッチ

右下の黒いスイッチがリセットボタン。RSTピン（7番ピン）は、マイコン内でプルダウンされているから普通はオープンでよい。外部からリセットするときは、RSTピンをHIGHにする。上の写真では、黒ボタンスイッチを押すと5番ピンに短絡するが、GPIOピンは、デフォルトでプルアップされているので、特別な配線不要でリセットボタンとなる。

ブート用の赤ボタンを押しながらリセットボタンを押しても、ダウンロードモードにはならない。ダウンロードモードに移行するには赤ボタンを押しながら、USB電源を入れ直す必要がある（USBケーブルの差し直し）。

写真では、シリアル通信のケーブルの下で見えにくいが、左上のUSB-Cの右側にスライドスイッチを取り付けてある。これをOFFすると、USBのVBUSが遮断されるので、ケーブルを抜き差しぜず、<ins>スイッチのOFF-ONと赤ボタン押下でダウンロードモードに移行できる</ins>。



# ArduinoIDEで”ch55xduino”

既出のブログの解説に従って、`ch55xduino`ボードを追加するだけ。

<img width="460" alt="usb1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/ecae4687-62da-06c7-2b33-bf227575beac.png" />

# BASIC52の導入

既出のブログでは、`WCHISPTool`を使ってHEXファイルを書き込んでいるが、Macでは使えない。そこで、ArduinoIDEが`ch55xduino`ボードの書き込みで使っているコマンドを流用。

```console
$ ~/Library/Arduino15/packages/CH55xDuino/tools/MCS51Tools/2023.10.10/macosx/vnproch55x -r 2 -t CH552 -c 3 basic52q.hex
CH55x Programmer by Deqing
Updated on: 2023/10/10
------------------------------------------------------------------
usbRertySeconds 2
target: CH552
config bytes: 3
Load file as hex
   Loaded 8131 bytes between: 0000 to 1FFF
DeviceVersion of CH55x: 2.50 
MCU ID: 52 11
Found Device CH552
Bootloader: 2.5.0
ID: 91 31 C5 BC
XOR Mask: 43 43 43 43 43 43 43 95 
Write 8192 bytes from bin file.
..................................................
Write complete!!!
Verify chip
..................................................
Verify complete!!!
------------------------------------------------------------------
Reset OK
```

# BASICのシリアルコンソール

既出のブログでは↓こう書かれている。

> BASICのHEXファイル書き込みが成功した状態で、シリアル-2 (TxD1,RxD1) にTeraTERMを動かしたPCを接続するとBASICのプロンプトが表示されます

しかし、配線を何度も見直し、何度やってもうまくいかない。試しに、<ins>シリアルを9番10番ピンのTXD、RXDに接続</ins>したところ、あっさり動いた。 （使用したターミナルアプリは、開発デバッグ中の自作もの）

![basic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/9e9e5e2c-40e3-8e85-91a1-c4cbcfd7a153.png)


[ASCIIART(マンデルブロ集合)](https://vintagechips.wordpress.com/2021/08/07/basic-52_is_running/)もご覧のとおり動く。
（RUN送信から実行終了のREADY受信までの時間をターミナルアプリで計測、24秒は早いのか？？）

![art.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/2663a594-1741-1a65-e6f8-0d0b174526e7.png)

さらに、1980年代の懐かしいゲームで遊ぼうかとコードを入力していたが、全体60行弱のコードの22行目でメモリエラー。

![term.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/5fcc6a19-0778-73ee-b0f8-2a9d9933f145.png)

RAMが1KBと極小のためだろう。残念。

RAMが6KBの上位チップ [CH559](https://www.wch-ic.com/products/categories/71.html?pid=5) でリベンジしようか思案中。

https://akizukidenshi.com/catalog/g/gI-16307/

以上

# Pinout

2024.5.13追加

![ch552p_pinout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/795f3758-4431-cd2c-092f-525f76d899b2.png)