検索条件
AVR用のISP書き込み機の話題、UPDI方式が浸透している今では古い話になります。

aliexpressや、amazonなのでUSBメモリサイズのコンパクトなAVRライタのUSBISPが売られています。これ、USBaspに似ていますが全くの別物で中華独自のようです。そのままでは使いづらさがあるので、ネット情報にあるUSBasp化改造というものがあります。
参考になるのは、
で、このデバイスに書き込むカスタムUSBaspのリポジトリが
となっています。一応これらを参考に真似すればちゃんとArduino IDEの「USBasp」として「書き込み装置を使って書き込み」で使えるのですがどうも不安定です。素のATMEGA328Pにブートローダを書き込むときにエラーになったり、正式なUSBaspには起こらない、微妙に使えない場面に出くわします。この現象にずっとなんだろな、という曖昧な感覚で納めていたのですが、今回ちゃんと調べたところカスタム版のFWに問題があることがわかりました。
カスタム版のFWは、本家とのピン配置の違いなどを変更して修正したFWになりますがそのほかに一転重要なところを「良い感じに改造したぜ?」(意訳)というコメントともに改造されています。
それは、デフォルト時のSCKクロックスピードで、本家の375kHzから750kHzに変更されていた点です。ArduinoIDEから書き込む場合このSCKクロックを明示的に変更することはできませんので、必然的に750kHzクロックでの書き込みとなります("-B 10" などのオプションを通せない)。新品のATMEGA328Pは内蔵クロック1MHzで動作していますから、間に合わないわけです。
原因を突き止めたので、ソースコード変更してデフォルトクロックを93.75kまでさげてビルドしたものを書き込みました。本家よりも下げた理由は、互換機なんだから低速でもちゃんと書き込める装置としてあるべき、と考えたからです。
長年使ってきたレガシーなAVRの心残りがなくなった気がしました。
続きを読む