今回はUPDIインタフェース書き込みをトライする。
AVRマイコン開発メモ1(開発環境準備)
AVRマイコン開発メモ2(AVRプログラマ Pickit4編)
AVRマイコン開発メモ4(Transistor Testerを作成)
AVRマイコンの書き込みインタフェースは以下になる。最新のAVR(ATmega4809やATtiny202)などはUPDIでのプログラマがないと書き込めない。Pickit4はどのインタフェースにも対応していて持っていればこれでやるのが良さそうだが、品薄で高騰しているので、今すぐこれを購入するのはおすすめしない。
書き込みインタフェース | Pickit4 | USBasp | 自作例 |
---|---|---|---|
ICSP | 〇 | 〇 | 〇 |
TPI | 〇 | ||
PDI | 〇 | ||
UPDI | 〇 | http://www.technoblogy.com/show?2OJT |
実はUPDIは、Arduino NanoとかUnoを使って簡単に自作することができるのでやってみる。(Pickit4でも書き込みできるはずだが、今回は試してない)
参考サイト
DIY UPDI USB programmer which can be made with cheap hardware
LiPo電池チェッカーとATtiny202用ライター(jtag2updi)
ハードウェアの製作
追加で必要な素子は4.7kΩの抵抗1個と、10uFの電解コンデンサ1個だけである。
部品 | 接続先 |
---|---|
Arduino Nano | 本体 |
4.7kΩ抵抗 | D6とD11に接続 |
10uFコンデンサ | RESETとGNDを接続(もちろんマイナス側がGND) |
プログラムの書き込み
Arduino NanoをUPDIプログラマ化するファームウェアjtag2updi
を取得する。
> git clone https://github.com/ElTangas/jtag2updi.git
> cd jtag2updi
> bash make.sh
Compiling for atmega328p ...
Linking...
Cleaning up...
Creating HEX file...
Creating LSS file...
> ls build
./ ../ JTAG2UPDI.elf* JTAG2UPDI.hex* JTAG2UPDI.lss* STK2UPDI.map*
生成したhexファイルをavrdude
とPickit4で書き込む
> avrdude -c pickit4_isp -p atmega328p -U flash:w:JTAG2UPDI.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "JTAG2UPDI.hex"
avrdude: input file JTAG2UPDI.hex auto detected as Intel Hex
avrdude: writing flash (3324 bytes):
Writing | ################################################## | 100% 1.29s
avrdude: 3324 bytes of flash written
avrdude: verifying flash memory against JTAG2UPDI.hex:
avrdude: input file JTAG2UPDI.hex auto detected as Intel Hex
Reading | ################################################## | 100% 1.28s
avrdude: 3324 bytes of flash verified
avrdude done. Thank you.
製作は以上になる。
ATTiny2020にプログラムを書き込む(Arduino IDE)
今回はArudino IDEのBlinkスケッチを、先ほど自作したUPDIプログラマからATtiny202
に書き込んでみる。
8bitの最小マイコンだが、メモリが2kbあり非常に価格が安い人気マイコン(秋月で1個60円)
Arduino IDEから書き込むためにはATtiny202
などAVRマイコンを認識させる必要がある。以下からmegaTinyCore
を追加ボードとして認識させてインストールする。
https://github.com/SpenceKonde/megaTinyCore/blob/master/Installation.md
以下をIDEの環境設定から追加のボードマネージャ
にURLを追記して、megaTinyCore
をボードマネージャから検索&インストール。
http://drazzy.com/package_drazzy.com_index.json
下図のようにボードとしてATtiny412/402/212/202/
、書き込み装置としてjtag2updi
を選択すれば、準備完了となる。
ATtiny202のLチカ回路と接続方法は下図参照。3本しか接続しないのでとても楽。図中にはついでにPickit4を使ときに接続方法も図示。jtag2updiのどちらかで接続すればよい。
Lチカプログラム。ほぼサンプルのBlinkスケッチ。2番ピンが上図PA1になる。
/*
Blink
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/
#define LEDPIN 2
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LEDPIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LEDPIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(LEDPIN, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
これでマイコンボードに書き込む
を選択すると、自作したプログラマ経由でATtiny202にプログラムが書き込まれてLEDが点滅するはず。
おまけとして、ケースを作成してみた。
avrdude + UPDIプログラマでの書き込み方法
avrdude
と自作UPDIプログラマを組み合わせた書き込み方法は以下。
Arduino IDEでビルドしたモジュールは %USERPROFILE%\AppData\Local\Temp
に出力されるのでここからhexファイルを採取する。(Arduino IDEのコンソールでフォルダを確認)
-P
はポート番号で、プログラマの接続ポートを指定する(Arduino IDEやデバイスマネージャから確認)
-b
はボーレートで、指定すると書き込み成功率が上がる(checksumエラーが頻発する場合)
-p
はマイコンのタイプを指定する。ATtiny202
はt202
になる。
> avrdude -c jtag2updi -P COM7 -b 11500 -p t202 -U flash:w:Blink.ino.hex
-e
オプションをつけて実行すると、マイコン内のプログラムを削除できる。
> avrdude -c jtag2updi -P COM7 -b 11500 -p t202 -e
Arduino IDE用のアドオン
今回使用したmegaTinyCore
以外にもmegaCore
、miniCore
などあり、それぞれチップファミリー毎に分類されている。