素直にArduinoを購入すればシリアル接続でプログラムが焼けるのでISPする必要がない が、毎度の癖の貧乏性で、素のAVRを秋月で買ってきてISPから試してみた。
@kimio_kosakaさんのページを参考にスケッチを直接書いた644pとブートローダー が入っている328pをavrdudeで確認したところ。MacOS XでIDE 0023でArduinoISPを 使っています。sh-3.2$ cd /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin sh-3.2$ ./avrdude -P /dev/cu.usbserial-A7004BTR -c avrisp -C ../etc/avrdude.conf -p m644p -b 19200 -v -v avrdude: Version 5.4-arduino, compiled on Oct 9 2007 at 11:20:31 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ System wide configuration file is "../etc/avrdude.conf" User configuration file is "/Users/hiroki/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : /dev/cu.usbserial-A7004BTR Using Programmer : avrisp Overriding Baud Rate : 19200 AVR Part : ATMEGA644P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PA0 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 10 128 0 no 2048 8 0 9000 9000 0xff 0xff flash 33 6 256 0 yes 65536 256 256 4500 4500 0xff 0xff lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 Programmer Type : STK500 Description : Atmel AVR ISP Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.05s avrdude: Device signature = 0x1e960a avrdude: safemode: lfuse reads as FF avrdude: safemode: hfuse reads as DE avrdude: safemode: efuse reads as FD avrdude: safemode: lfuse reads as FF avrdude: safemode: hfuse reads as DE avrdude: safemode: efuse reads as FD avrdude: safemode: Fuses OK avrdude done. Thank you. sh-3.2$ ./avrdude -P /dev/cu.usbserial-A7004BTR -c avrisp -C ../etc/avrdude.conf -p m328p -b 19200 -v -v avrdude: Version 5.4-arduino, compiled on Oct 9 2007 at 11:20:31 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ System wide configuration file is "../etc/avrdude.conf" User configuration file is "/Users/hiroki/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : /dev/cu.usbserial-A7004BTR Using Programmer : avrisp Overriding Baud Rate : 19200 AVR Part : ATMEGA328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 5 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : STK500 Description : Atmel AVR ISP Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.05s avrdude: Device signature = 0x1e950f avrdude: safemode: lfuse reads as FF avrdude: safemode: hfuse reads as DA avrdude: safemode: efuse reads as 5 avrdude: safemode: lfuse reads as FF avrdude: safemode: hfuse reads as DA avrdude: safemode: efuse reads as 5 avrdude: safemode: Fuses OK avrdude done. Thank you.
sh-3.2$ ./avrdude -P /dev/cu.usbserial-A7004BTR -c avrisp -C ../etc/avrdude.conf -p t2313 -b 19200 -B 1 -U flash:w:/tmp/main.hex avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.13s avrdude: Device signature = 0x1e910a 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 "/Users/hiroki/Downloads/usbtinyisp/spi/main.hex" avrdude: input file /Users/hiroki/Downloads/usbtinyisp/spi/main.hex auto detected as Intel Hex avrdude: writing flash (2046 bytes): Writing | ################################################## | 100% 5.68s avrdude: 2046 bytes of flash written avrdude: verifying flash memory against /Users/hiroki/Downloads/usbtinyisp/spi/main.hex: avrdude: load data flash data from input file /Users/hiroki/Downloads/usbtinyisp/spi/main.hex: avrdude: input file /Users/hiroki/Downloads/usbtinyisp/spi/main.hex auto detected as Intel Hex avrdude: input file /Users/hiroki/Downloads/usbtinyisp/spi/main.hex contains 2046 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 6.19s avrdude: verifying ... avrdude: 2046 bytes of flash verified avrdude: safemode: Fuses OK avrdude done. Thank you. sh-3.2$ ./avrdude -P /dev/cu.usbserial-A7004BTR -c avrisp -C ../etc/avrdude.conf -p t2313 -b 19200 -U hfuse:w:0xdf:m -U lfuse:w:0xef:m avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.13s avrdude: Device signature = 0x1e910a avrdude: reading input file "0xdf" avrdude: writing hfuse (1 bytes): Writing | ################################################## | 100% 0.03s avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xdf: avrdude: load data hfuse data from input file 0xdf: avrdude: input file 0xdf contains 1 bytes avrdude: reading on-chip hfuse data: Reading | ################################################## | 100% 0.05s avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xef" avrdude: writing lfuse (1 bytes): Writing | ################################################## | 100% 0.11s avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xef: avrdude: load data lfuse data from input file 0xef: avrdude: input file 0xef contains 1 bytes avrdude: reading on-chip lfuse data: Reading | ################################################## | 100% 0.05s avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: safemode: Fuses OK avrdude done. Thank you.
sh-3.2$ ./avrdude -c usbtiny -C ../etc/avrdude.conf -p m644p -v -v avrdude: Version 5.4-arduino, compiled on Oct 9 2007 at 11:20:31 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ System wide configuration file is "../etc/avrdude.conf" User configuration file is "/Users/hiroki/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : unknown Using Programmer : usbtiny AVR Part : ATMEGA644P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PA0 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 10 128 0 no 2048 8 0 9000 9000 0xff 0xff flash 33 6 256 0 yes 65536 256 256 4500 4500 0xff 0xff lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 Programmer Type : USBTINY Description : USBtiny simple USB programmer avrdude: Using SCK period of 10 usec CMD: [ac 53 00 00] [00 00 53 00] avrdude: AVR device initialized and ready to accept instructions Reading | | 0% 0.00sCMD: [30 00 00 00] [00 30 00 1e] CMD: [30 00 01 00] [00 30 00 96] Reading | ################# | 33% 0.00sCMD: [30 00 02 00] [00 30 00 0a] Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e960a CMD: [50 00 00 00] [00 50 00 ff] CMD: [50 00 00 00] [00 50 00 ff] CMD: [50 00 00 00] [00 50 00 ff] avrdude: safemode: lfuse reads as FF CMD: [58 08 00 00] [00 58 08 de] CMD: [58 08 00 00] [00 58 08 de] CMD: [58 08 00 00] [00 58 08 de] avrdude: safemode: hfuse reads as DE CMD: [50 08 00 00] [00 50 08 fd] CMD: [50 08 00 00] [00 50 08 fd] CMD: [50 08 00 00] [00 50 08 fd] avrdude: safemode: efuse reads as FD CMD: [50 00 00 00] [00 50 00 ff] CMD: [50 00 00 00] [00 50 00 ff] CMD: [50 00 00 00] [00 50 00 ff] avrdude: safemode: lfuse reads as FF CMD: [58 08 00 00] [00 58 08 de] CMD: [58 08 00 00] [00 58 08 de] CMD: [58 08 00 00] [00 58 08 de] avrdude: safemode: hfuse reads as DE CMD: [50 08 00 00] [00 50 08 fd] CMD: [50 08 00 00] [00 50 08 fd] CMD: [50 08 00 00] [00 50 08 fd] avrdude: safemode: efuse reads as FD avrdude: safemode: Fuses OK avrdude done. Thank you.以下のようにboards.txtを修正するとIDEから直接ISPでアップロードできるように なります。
sh-3.2$ grep usbtiny * boards.txt:avrmega644p16.upload.using=arduino:usbtinyispこのUSPtinyISPにはちょっと問題があって、MacOS起動前にUSBに接続している認識 されない。起動後にプラグインするとちゃんと認識する。HUBとの相性なんだろうか。 後から気がついたのだが秋月の2313は20PUと省電力版の10PUあって12Mのクロックを 使っているので20PUを使わなければならないところ10PUで作ってしまった。 とりあえず動いているからいいか。
# with Arduino IDE 0023 # http://www.clarestudio.org/elec/avr/gcc-1.html # APPPATH=/Applications TOOLPATH=Arduino.app/Contents/Resources/Java/hardware/tools/avr PROG=test2313 $(PROG).hex: $(PROG).c $(APPPATH)/$(TOOLPATH)/bin/avr-gcc \ -Os -I$(APPPATH)/$(TOOLPATH)/avr/include/ \ -mmcu=at90s2313 -Wall -S -o $(PROG).s $(PROG).c $(APPPATH)/$(TOOLPATH)/bin/avr-gcc \ -Os -mmcu=at90s2313 -Wall -c -o $(PROG).o $(PROG).s $(APPPATH)/$(TOOLPATH)/bin/avr-gcc \ -Os -L$(APPPATH)/$(TOOLPATH)/avr/lib/ \ -mmcu=at90s2313 -Wall -o $(PROG).elf $(PROG).o -lc $(APPPATH)/$(TOOLPATH)/bin/avr-objdump \ -d $(PROG).elf > $(PROG).dump $(APPPATH)/$(TOOLPATH)/bin/avr-objcopy \ -I elf32-avr -O ihex $(PROG).elf $(PROG).hex clean: rm -f *.s *.o *.dump *.hex *.elf出来たファイルはこんな感じ
sh-3.2$ file * Makefile: ASCII text test2313.c: ASCII c program text test2313.dump: ASCII text test2313.elf: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped test2313.hex: ASCII text, with CRLF line terminators test2313.o: ELF 32-bit LSB relocatable, Atmel AVR 8-bit, version 1 (SYSV), not stripped test2313.s: ASCII assembler program textMTM07で@morecat_labsさんのブースでGingerの基板を購入して部品を実装して USBtinyISPで88Pへ焼いてMacOS 10.6.8で試したがうまく行かない。 10.4ではechoでLEDの制御は出来るのでOSの問題と思われる。 /var/spool/uucp/の下にロックファイルも出来ていなくて、rootでlsofしても 出てこないのに使用中とはこれ如何に。さらにたちの悪い事に時々open出来る事がある。
sh-3.2$ sudo cu -l /dev/cu.usbmodemfd1431 cu: /dev/cu.usbmodemfd1431: Line in use sh-3.2$ sudo echo -n "h*" > /dev/cu.usbmodemfd1431 sh: /dev/cu.usbmodemfd1431: Resource busyもはやArduinoではないのだがATTiny2313を使ってリモコン送信機を作ってみた。 USBとの接続にはUSBtiny を使っている。USBtinyが1.5K位あり0.5Kしか使えなかったので三菱のディスプレーの 専用(2Byte送信)になっている。
sh-3.2$ make check python ./check.py main.elf text: 1962, data: 2, bss: 62
svn co https://ubsa-osx.svn.sourceforge.net/svnroot/ubsa-osx/HIDKeys HIDKeys2012年5月現在USBインターフェース付きのAVRはリリースされているが2313に比べると かなり高価です。将来安価になればそれでも良いでしょうが、DIPではリリースされ ない可能性があるのでUSBtinyやV-USBのは当面使われるのではないかと思われる。
$ ls dfu-programmer-0.6.2 libusbx-1.0.16 $ cd libusbx-1.0.16 $ ./configure $ make $ cd .. $ cd dfu-programmer-0.6.2 $ cp ../libusbx-1.0.16/libusb/libusb.h src/ $ cp ../libusbx-1.0.16/libusb/.libs/libusb-1.0.0.dylib src/libusb-1.0.dylib $ install_name_tool -id @executable_path/libusb-1.0.dylib src/libusb-1.0.dylib $ ./configure LDFLAGS="-L." $ make $ cd src $ ./dfu-programmer Type 'dfu-programmer --help' for a list of commands 'dfu-programmer --targets' to list supported target devices 'dfu-programmer --version' to show version information $ ./dfu-programmer at90usb162 get Bootloader Version: 0x05 (5) $ ./dfu-programmer at90usb162 flash /tmp/test.hex Validating... 4346 bytes used (35.37%)
AitendoでUSB ISPというモジュールがちょっと安かったので、試しに買ってみたが Win用の対応ライターしかなかったので、 こちらのページ を参考にUSB aspに焼き直してみた。
このモジュールでびんぼうでいいのをArduino IDEからブートを焼いてみたところ問題 なく焼けた。
続いてATMEGA64A-AUをこのモジュールで確認しようとしたところavrdudeで認識でき ない。翌日にUSB Tinyで確認したところ問題なく認識できた。
opendous-jtagを試す為に久しぶりにdfu-programmerを使ってみた。新しいバージョン がリリースされていたので、ビルドしてみた。(2015/03/01)
$ cd dfu-programmer-0.7.2 $ cp ../libusb-1.0.19/libusb/libusb.h src/ $ cp ../libusb-1.0.19/libusb/.libs/libusb-1.0.dylib src/ $ install_name_tool -id @executable_path/libusb-1.0.dylib src/libusb-1.0.dylib $ ./configure LIBUSB_1_0_LIBS="-L. -lusb-1.0" LIBUSB_1_0_CFLAGS="-Isrc/" $ make $ cd src $ ./dfu-programmer at90usb162 get Bootloader Version: 0x05 (5)
dfu-programmerで書き込む場合はeraseしてからflashしないとエラーになる。
dfu-programmerはビルドできて問題なく動作しているが、opendous-jtagの用意されて いるバイナリをを焼いても認識されない。おそらくCPUクロックが8Mでビルドされて いる為ではないかと思われる。opendous-jtagのビルドを試みたが、LUFAというAVRの USBライブラリを使っているが現在のライブラリコードではそのままではビルドできなさ そうなので、放置かな。
AVRを使い始めた当時もはまったような気がするのだがJJYのデコーダーが7K弱なので 328Pより50円安い168Pに焼こうとしてはまったのでメモを残しておく。Arduino 1.0.6 の168はPでない方の設定になている。このためboards.txtのnameの168を168Pにしてお く。これだけではだめでブートを焼くためにはavrdude.confの168のシグネチャを168P のものに変更する必要がある。これでブートは焼けるのだが、スケッチを焼くときには 元に戻しておかないと焼けない。あと何故かUSBaspでは認識できずブートが焼けず、 USBTinyISPでは焼けた。
Arduino 1.0.6の「ブートローダを書き込む」はマイコンボードで選択されたタイプの ブートローダプログラムの書き込みとFuseの書き込みをおこなっている。
久しぶりに新しいチップにブートを焼こうと思ったところ、USBTinyISPの6ピンコネクタが 変な事に気がついた。元々もボトムビューで回路図が書いてあったようで、逆に なってしまっていたようだ。
USBTinyISPは製品になってしまいフリーで作る情報が少なくなってしまったようだ。
最近だとATTiny44を使ったFabISPというのもあるみたいだ。(2019/8)
パッチで提供されていた、avrdudeのFT232サポートはVersion 6.2で取り込まれた。 またAT90USB162などを使ったAVRISP mkIIクローンもあった。AT90USB162はdfuで 書き込めるので、これらはISPを作るためのISPの問題はない。(2019/8)
上を調べていて気がついたのだがFTDIのMPSSEのサポートはavrdude Version 5.11 で入っていた。Arduino 1.0.6のavrdudeは5.11だった。