AVRマイコン開発メモ3(AVRプログラマ UPDI編)

今回は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)

avr15

プログラムの書き込み

Arduino NanoをUPDIプログラマ化するファームウェアjtag2updiを取得する。

github ElTangas/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円)

avr01

Arduino IDEから書き込むためにはATtiny202などAVRマイコンを認識させる必要がある。以下からmegaTinyCoreを追加ボードとして認識させてインストールする。

SpenceKonde/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を選択すれば、準備完了となる。

avr12

ATtiny202のLチカ回路と接続方法は下図参照。3本しか接続しないのでとても楽。図中にはついでにPickit4を使ときに接続方法も図示。jtag2updiのどちらかで接続すればよい。

avr13

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が点滅するはず。

avr16

おまけとして、ケースを作成してみた。

avr17

avr18

avrdude + UPDIプログラマでの書き込み方法


avrdudeと自作UPDIプログラマを組み合わせた書き込み方法は以下。

Arduino IDEでビルドしたモジュールは %USERPROFILE%\AppData\Local\Tempに出力されるのでここからhexファイルを採取する。(Arduino IDEのコンソールでフォルダを確認)

-Pはポート番号で、プログラマの接続ポートを指定する(Arduino IDEやデバイスマネージャから確認)

-bはボーレートで、指定すると書き込み成功率が上がる(checksumエラーが頻発する場合)

-pはマイコンのタイプを指定する。ATtiny202t202になる。

> 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以外にもmegaCoreminiCoreなどあり、それぞれチップファミリー毎に分類されている。

megaTinyCore

miniCore

megaCore

-->