はじめに
先人達のタユまぬ努力のおかげで「arduino as ISPでAVRを焼く」というメソッドがスタンダート(個人的感想)になって久しい。V-USBといった美技というかチカラ技(伝統芸?)というか、そんな(元気があれば何でもできる=速度があれば何でもエミュレーションでどうにかできる)のも存在する令和の世の中となった訳だけど「鶏卵問題」回避のためUSBブリッジCHIPなりUSB搭載マイコンなりを選ぶというのがナチュラル志向なのではとフっと思い立った訳です。そういった用途にFT232R/HのbitbangがあるわけですけどCPUより高いUSB-UART(SPI?)ブリッジって本末転倒な感があります。秋月で生石や板付きの値段をググるとCH340の生石値段はそれなりだけどDIP板だと高価。USBでブリッジできそうな石をソートしたらCH552Pが一番安価だしUSBasp互換ファームもあるんで買ってきた。ってゆうか例の引き出しを見てたら目が合っちゃったので保護してきました。
用意するもの
- CH552x(僕は秋月でAE-QFN16-DIP-CH552Pを買ってきた)
- 配線用の基板と部品を少々(どこの家にもあるブレッドボード、セラコン、抵抗、タクトスイッチなど)
- USBコネクタ(僕は家にあったAE-USB2.0-TYPE-C-5077CRを流用。むしろマイコンより高いんで手持ちのケーブルをバラして使うとか手持ちを工夫する方が合理的)
- 動作テスト環境(LチカるならLEDと抵抗と配線、開発環境)
手順
#1 SDCCをインストール
https://sourceforge.net/projects/sdcc/files/
#2 CH552_usbASPをビルド
https://github.com/usbman01/CH552_usbASP
C:\prj\CH552_usbASP-main\source\SDCC>build.bat
C:\prj\CH552_usbASP-main\source\SDCC>sdas8051 -losg .\obj\lowlevel ..\src\lowlevel.as
C:\prj\CH552_usbASP-main\source\SDCC>sdas8051 -o .\obj\lowlevel.rel ..\src\lowlevel.as
C:\prj\CH552_usbASP-main\source\SDCC>sdcc -c --opt-code-size --debug -o.\obj\ ..\src\clock.c
C:\prj\CH552_usbASP-main\source\SDCC>sdcc -c --opt-code-size --debug -o.\obj\ ..\src\isp.c
C:\prj\CH552_usbASP-main\source\SDCC>sdcc -c --opt-code-size --debug -o.\obj\ ..\src\tpi.c
C:\prj\CH552_usbASP-main\source\SDCC>sdcc -c --opt-code-size --debug -o.\obj\ ..\src\usbdrv.c
C:\prj\CH552_usbASP-main\source\SDCC>sdcc -c --opt-code-size --debug -o.\obj\ ..\src\main.c
C:\prj\CH552_usbASP-main\source\SDCC>sdcc --code-loc 0x0000 --no-xinit-opt .\obj\main.rel .\obj\lowlevel.rel .\obj\clock.rel .\obj\isp.rel .\obj\tpi.rel .\obj\usbdrv.rel -o.\obj\usbasp.ihx
C:\prj\CH552_usbASP-main\source\SDCC>packihx .\obj\usbasp.ihx 1>.\obj\usbasp.hex
packihx: read 183 lines, wrote 337: OK.
#3 出来たusbasp.hexをWCHISPStudioでch552に書き込む
https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html

#4 Zadigでデバドラをlibusbkにする
https://zadig.akeo.ie/?utm_source=chatgpt.com
配線
kicadで "CH552_usbASP-main\eagle\v7\wchasp_v3.sch" を開き書かれた通りに結線する
| CH552_USBasp | arduino as ISP | AVRMEGA328/168/88/48 | |
|---|---|---|---|
| PWM1=P1.5 (2pin) | D11 | MOSI | 17pin |
| RXD1=P1.6 (5pin) | D12 | MISO | 18pin |
| TXD1=P1.7 (6pin) | D13 | SCK | 19pin |
| INT0=P3.2 (4pin) | D10 | RST | 1pin |
書き込み
そこにあったATMega48にarduino IDEで書き込みテスト。単純に書き込み装置をUSBaspにしただけでアッサり動いた。
Avrdude version 8.0-arduino.1
Copyright see https://github.com/avrdudes/avrdude/blob/main/AUTHORS
System wide configuration file is C:\Users\2ru\AppData\Local\Arduino15\packages\MiniCore\tools\avrdude\8.0-arduino.1\etc\avrdude.conf
Using port : usb
Using programmer : usbasp
AVR part : ATmega48
Programming modes : SPM, ISP, HVPP, debugWIRE
Programmer type : usbasp
Description : USBasp ISP and TPI programmer
AVR device initialized and ready to accept instructions
Device signature = 1E 92 05 (ATmega48, ATmega48A)
Auto-erasing chip as flash memory needs programming (-U flash:w:...)
specify the -D option to disable this feature
Erased chip
Processing -U eeprom:w:C:\Users\2ru\AppData\Local\arduino\sketches\78F6E9AF40597FCBAE51CDA36438EE23/ATMEGA48_blink.ino.eep:i
Warning: no eeprom data found in Intel Hex file C:\Users\2ru\AppData\Local\arduino\sketches\78F6E9AF40597FCBAE51CDA36438EE23/ATMEGA48_blink.ino.eep
Reading 0 bytes for eeprom from input file ATMEGA48_blink.ino.eep
in 0 sections of [0, -1]: 0 pages and 0 pad bytes
Writing 0 bytes to eeprom
Writing | ################################################## | 100% 0.00s
Reading | ################################################## | 100% 0.00s
0 bytes of eeprom verified
Processing -U flash:w:C:\Users\2ru\AppData\Local\arduino\sketches\78F6E9AF40597FCBAE51CDA36438EE23/ATMEGA48_blink.ino.hex:i
Reading 806 bytes for flash from input file ATMEGA48_blink.ino.hex
in 1 section [0, 0x325]: 13 pages and 26 pad bytes
Writing 806 bytes to flash
Writing | ################################################## | 100% 0.13s
Reading | ################################################## | 100% 0.06s
806 bytes of flash verified
Avrdude done. Thank you.
まとめ
arduino as ISPの利便性と(ライター以外にも使える普遍性やそうゆう方々に対する)普及率を否定するものでもないし自分も使っている。でもUSB-UARTブリッジの向こう側にホストマイコンがあって更にその先にターゲットがあるというのはヘルメットを被ったまま頭を搔くようなもどかしさがある。僕のようなおっちょこちょいだとホストのAVRとターゲットのAVRを間違えて書き込んじゃうなんて馬鹿なミスを結構な頻度でやっちゃう。CH552P as USBaspがあればWeb上の情報だけで1バイトも変える必要はない。結線もドキュメント通りで慣れていれば30分、多少迷いながら丁寧に確認しつつ作業をしても1~2時間もあればダイレクトでストレートなAVRライターを「卵が先か鶏が先か」なんて悩む事すらなく費用的にもFIXでいいかと言う気にさせる。それをaliexpressより素早く手にする事ができる。夜中に急にAVR焼きたいって思い立った瞬間にサクっと僕にも作れる素晴らしい再現性は、先人たちの不断の努力の積み重ねの成果であり、ここに深い敬意と感謝を表します。ありがとうございます。秋葉の店頭で直買いでも先人たちの知恵と工夫を使わせてもらえばAliExpressと同レベルの値段でUSBライターが作れるぞって言うネタでした。最低賃金が時間1000円を超える世の中ですから冷静な常識人ならメーカー純正の安心とPICと2個イチできてブレークポイントも使えるMPLAB SNAPを秋月に行って2200円で買うかAVRオンリーならaitendoでクローンを550円税込みを買うよね。