CH552P
8bitUSBマイコン
って何??と思い、昨年末に入手した WCH社製 CH552P について、備忘録的に書き留めておく。
入手先
例によって、秋月電子通商さんから購入。秋月さんオリジナルのDIP化基板。
税込180円と格安のマイコン。
![IMG_2823.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F283293%2F81bd8bb0-b103-3b3c-5bac-7da87f997da6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f358fa1b366970eb012053fd5c39097a)
マイコンチップは実装済み、ピンヘッダをハンダ付けするだけ。
書き込み回路
↓こちらのブログを参考に、ミニブレッドボードに組みました。
![IMG_2833.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F283293%2F8bb56465-1ef5-177c-ce2f-5e7f6a10a52e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f92c7094aef31f9a674ddd30e567e2d0)
左上のUSB-Cが、プログラム書き込み用。左下の赤いスイッチを押しながらUSBポートに接続すると、ダウンロード用のブートローダが走る。その間に、ArduinoIDEからプログラムをアップロードする。
ISPを使っても書き込めるが、USBマイコン
と称する通りネイティブにUSBに接続できるマイコンだ。
シリアル接続
前項の写真の上部から来ている4本のケーブル(5V, GND, TXD, RXD)が、シリアル通信用。
このマイコンは3.3Vでも起動するが、5Vを供給しないとシリアル通信できない。最初、3.3VのUSBシリアル変換器を使っていて全然通信できず、原因が分からず何時間もハマった。
リセットスイッチ
右下の黒いスイッチがリセットボタン。RSTピン(7番ピン)は、マイコン内でプルダウンされているから普通はオープンでよい。外部からリセットするときは、RSTピンをHIGHにする。上の写真では、黒ボタンスイッチを押すと5番ピンに短絡するが、GPIOピンは、デフォルトでプルアップされているので、特別な配線不要でリセットボタンとなる。
ブート用の赤ボタンを押しながらリセットボタンを押しても、ダウンロードモードにはならない。ダウンロードモードに移行するには赤ボタンを押しながら、USB電源を入れ直す必要がある(USBケーブルの差し直し)。
写真では、シリアル通信のケーブルの下で見えにくいが、左上のUSB-Cの右側にスライドスイッチを取り付けてある。これをOFFすると、USBのVBUSが遮断されるので、ケーブルを抜き差しぜず、スイッチのOFF-ONと赤ボタン押下でダウンロードモードに移行できる。
ArduinoIDEで”ch55xduino”
既出のブログの解説に従って、ch55xduino
ボードを追加するだけ。
![usb1.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F283293%2Fecae4687-62da-06c7-2b33-bf227575beac.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7836e9e7ef8964e6b21ba87d9faedcd9)
BASIC52の導入
既出のブログでは、WCHISPTool
を使ってHEXファイルを書き込んでいるが、Macでは使えない。そこで、ArduinoIDEがch55xduino
ボードの書き込みで使っているコマンドを流用。
$ ~/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のプロンプトが表示されます
しかし、配線を何度も見直し、何度やってもうまくいかない。試しに、シリアルを9番10番ピンのTXD、RXDに接続したところ、あっさり動いた。 (使用したターミナルアプリは、開発デバッグ中の自作もの)
ASCIIART(マンデルブロ集合)もご覧のとおり動く。
(RUN送信から実行終了のREADY受信までの時間をターミナルアプリで計測、24秒は早いのか??)
さらに、1980年代の懐かしいゲームで遊ぼうかとコードを入力していたが、全体60行弱のコードの22行目でメモリエラー。
RAMが1KBと極小のためだろう。残念。
RAMが6KBの上位チップ CH559 でリベンジしようか思案中。
以上
Pinout
2024.5.13追加