Μ
µ == Micro
ATtiny85
Boot Loader
micronucleus is a 2Kb boot loader that provides a bit banged USB interface for directly updating user code without teh need for a programming device or dedicated USB to UART/Serial hardware.
https://github.com/micronucleus/micronucleus
A new ATtiny85 chip will need a time operation, i.e., be flashed with this bootloader. avrdude is a useful solution for this, and the following demonstrates such process with a Bus Pirate.
Check proper connectivity with chip via Bus Pirate connected at ttyUSB0
$ avrdude -c buspirate -P /dev/ttyUSB0 -p t85 Attempting to initiate BusPirate binary mode... avrdude: Paged flash write enabled. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.09s avrdude: Device signature = 0x1e930b (probably t85) avrdude: safemode: Fuses OK (E:FF, H:DF, L:62) avrdude done. Thank you.
Write file "t85_default.hex" to ATtiny85
$ avrdude -c buspirate -P /dev/ttyUSB0 -p t85 -U flash:w:t85_default.hex Attempting to initiate BusPirate binary mode... avrdude: Paged flash write enabled. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.09s avrdude: Device signature = 0x1e930b (probably t85) 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 "t85_default.hex" avrdude: input file t85_default.hex auto detected as Intel Hex avrdude: writing flash (8124 bytes): Writing | ################################################## | 100% 0.00s avrdude: 8124 bytes of flash written avrdude: verifying flash memory against t85_default.hex: avrdude: load data flash data from input file t85_default.hex: avrdude: input file t85_default.hex auto detected as Intel Hex avrdude: input file t85_default.hex contains 8124 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 51.02s avrdude: verifying ... avrdude: 8124 bytes of flash verified avrdude: safemode: Fuses OK (E:FF, H:DF, L:62) avrdude done. Thank you.
Burn fuses
$ avrdude -c buspirate -P /dev/ttyUSB0 -p t85 -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m -B 20 Attempting to initiate BusPirate binary mode... avrdude: Paged flash write enabled. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e930b (probably t85) avrdude: reading input file "0xe1" avrdude: writing lfuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xe1: avrdude: load data lfuse data from input file 0xe1: avrdude: input file 0xe1 contains 1 bytes avrdude: reading on-chip lfuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: reading input file "0xdd" avrdude: writing hfuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xdd: avrdude: load data hfuse data from input file 0xdd: avrdude: input file 0xdd contains 1 bytes avrdude: reading on-chip hfuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xfe" avrdude: writing efuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of efuse written avrdude: verifying efuse memory against 0xfe: avrdude: load data efuse data from input file 0xfe: avrdude: input file 0xfe contains 1 bytes avrdude: reading on-chip efuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of efuse verified avrdude: safemode: Fuses OK (E:FE, H:DD, L:E1) avrdude done. Thank yo
Additional Resources:
Prior work that lead up to micronucleus development http://www.embedded-creations.com/projects/attiny85-usb-bootloader-overview/details
More details, variations on using Bus Pirate for flashing bootloader http://hintshop.ludvig.co.nz/show/buspirate-avr-programming/
Some notes on using Bus Pirate with Arch linux https://wiki.archlinux.org/index.php/Bus_pirate
The avrdude project http://savannah.nongnu.org/projects/avrdude
Datasheet
Schematics
Digispark using 5v chip supply and "level shifting" diodes on data lines
Adafruit Gemma using 3.3v regulator and no diodes
Threads on USB data line voltages and series/terminator resistor:
- https://electronics.stackexchange.com/questions/190592/why-does-usb-have-vcc-5v-and-high-3-3v
- http://www.eevblog.com/forum/projects/why-usb-data-series-resistors/
Purchase
- https://www.digikey.com/product-detail/en/microchip-technology/ATTINY85-20PU/ATTINY85-20PU-ND
- http://www.mouser.com/ProductDetail/Microchip-Technology-Atmel/ATtiny85-20PU
- https://www.sparkfun.com/products/9378
DUMPS
Probing a factory fresh unprogrammed chip with a Bus Pirate per http://dangerousprototypes.com/docs/Bus_Pirate_AVR_ProgrammingChange note change to "-p t85" vs example provided.
$ avrdude -c buspirate -P /dev/ttyUSB0 -p t85 -v avrdude: Version 6.3, compiled on Aug 9 2017 at 12:31:56 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "/etc/avrdude.conf" User configuration file is "/home/neo/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : /dev/ttyUSB0 Using Programmer : buspirate AVR Part : ATtiny85 Chip Erase delay : 4500 us PAGEL : P00 BS2 : P00 RESET disposition : possible i/o 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 6 4 0 no 512 4 0 4000 4500 0xff 0xff flash 65 6 32 0 yes 8192 64 128 4500 4500 0xff 0xff signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 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 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 Programmer Type : BusPirate Description : The Bus Pirate Attempting to initiate BusPirate binary mode... BusPirate binmode version: 1 BusPirate SPI version: 1 avrdude: Paged flash write enabled. AVR Extended Commands not found. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.09s avrdude: Device signature = 0x1e930b (probably t85) avrdude: safemode: hfuse reads as DF avrdude: safemode: efuse reads as FF avrdude: safemode: hfuse reads as DF avrdude: safemode: efuse reads as FF avrdude: safemode: Fuses OK (E:FF, H:DF, L:62) BusPirate is back in the text mode avrdude done. Thank you.
\/ Erronious dumps returning not exactly expected results \/
Probing with a Bus Pirate, and NO CHIP CONNECTED
$ avrdude -c buspirate -P /dev/ttyUSB0 -p attiny2313 -v avrdude: Version 6.3, compiled on Aug 9 2017 at 12:31:56 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "/etc/avrdude.conf" User configuration file is "/home/neo/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : /dev/ttyUSB0 Using Programmer : buspirate AVR Part : ATtiny2313 Chip Erase delay : 9000 us PAGEL : PD4 BS2 : PD6 RESET disposition : possible i/o 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 6 4 0 no 128 4 0 4000 4500 0xff 0xff flash 65 6 32 0 yes 2048 32 64 4500 4500 0xff 0xff signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 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 calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00 Programmer Type : BusPirate Description : The Bus Pirate Attempting to initiate BusPirate binary mode... BusPirate binmode version: 1 BusPirate SPI version: 1 avrdude: Paged flash write enabled. AVR Extended Commands not found. avrdude: initialization failed, rc=-2 Double check connections and try again, or use -F to override this check. BusPirate is back in the text mode avrdude done. Thank you.
Probing with chip connected, and using wrong partno (-p attiny2313) per default example.
$ avrdude -c buspirate -P /dev/ttyUSB0 -p attiny2313 -v avrdude: Version 6.3, compiled on Aug 9 2017 at 12:31:56 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "/etc/avrdude.conf" User configuration file is "/home/neo/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : /dev/ttyUSB0 Using Programmer : buspirate AVR Part : ATtiny2313 Chip Erase delay : 9000 us PAGEL : PD4 BS2 : PD6 RESET disposition : possible i/o 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 6 4 0 no 128 4 0 4000 4500 0xff 0xff flash 65 6 32 0 yes 2048 32 64 4500 4500 0xff 0xff signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 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 calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00 Programmer Type : BusPirate Description : The Bus Pirate Attempting to initiate BusPirate binary mode... BusPirate binmode version: 1 BusPirate SPI version: 1 avrdude: Paged flash write enabled. AVR Extended Commands not found. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.09s avrdude: Device signature = 0x1e930b (probably t85) avrdude: Expected signature for ATtiny2313 is 1E 91 0A Double check chip, or use -F to override this check. BusPirate is back in the text mode avrdude done. Thank you.