ClockTamerFirmwareUpdate

ClockTamer 1.30
dfu-programmer.exe atmega32u2 flash --debug=100 --suppress-bootloader-mem c:\tools\clock-tamer\board\FW\Tamer.hex dfu-programmer.exe atmega32u2 flash-eeprom --debug=100 c:\tools\clock-tamer\board\FW\Tamer.eep
 * 1) Download dfu-programmer (available both for Linux and Windows)
 * 2) On windows you also need to install libusb drivers (included with dfu-programmer)
 * 3) Download the latest firmware Tamer.hex and Tamer.eep
 * 4) Enter firmware update mode.
 * 5) Power off ClockTamer - disconnect power cord AND mini-USB cable.
 * 6) Short-circuit `nSS` pin of `GND` (full connector pinout is available [ClockTamerProtocolSPI#ClockTamer_pinout here]). You can short these pins on the bottom side header using any wire or office clip. [[File:clocktamer-nSS.png]]
 * 7) Connect ClockTamer to a computer with mini-USB cable. LED should be flashing immediately.
 * 8) Remove short-circuit from `nSS` to `GND`.
 * 9) Update flash (e.g. on windows)
 * 1) Update eeprom (e.g. on windows)

NOTE: Since there's no option to read firmware back from device on ClockTamer these commands fail. But it should fail only on validating operation, like this:

c:\tools\dfu-programmer-win-0.6.0>dfu-programmer.exe atmega32u2 flash --debug=100 --suppress-bootloader-mem c:\tools\clock-tamer\board\FW\Tamer.hex target: atmega32u2 chip_id: 0x2ff0 vendor_id: 0x03eb command: flash quiet: false debug: 100 device_type: AVR -- command specific below -- validate: true hex file: c:\tools\clock-tamer\board\FW\Tamer.hex

commands.c:327: write 14488/28672 bytes atmel.c:1010: atmel_flash( 0022FEAC, 01A40048, 0, 28672, 128, false ) atmel.c:847: atmel_select_page( 0022FEAC, 0 ) atmel.c:1085: valid block length: 11836, (0 - 11836) atmel.c:1222: atmel_flash_block( 0022FEAC, 01A40048, 0, 1024, false ) atmel.c:1179: atmel_flash_populate_header( 0022F8B0, 0, 1024, false ) atmel.c:1246: 1024 bytes to MCU 000000 atmel.c:1132: atmel_flash_populate_footer( 0022F8B0, 0022FCD0, 65535, 65535, 65535 ) atmel.c:1256: message length: 1072 atmel.c:1105: Next first: 1024 atmel.c:1107: valid block length: 10812 atmel.c:1222: atmel_flash_block( 0022FEAC, 01A40848, 1024, 1024, false ) atmel.c:1179: atmel_flash_populate_header( 0022F8B0, 1024, 1024, false ) atmel.c:1246: 1024 bytes to MCU 000400 atmel.c:1132: atmel_flash_populate_footer( 0022F8B0, 0022FCD0, 65535, 65535, 65535 ) atmel.c:1256: message length: 1072 atmel.c:1105: Next first: 2048 atmel.c:1107: valid block length: 9788 atmel.c:1222: atmel_flash_block( 0022FEAC, 01A41048, 2048, 1024, false ) atmel.c:1179: atmel_flash_populate_header( 0022F8B0, 2048, 1024, false ) atmel.c:1246: 1024 bytes to MCU 000800 atmel.c:1132: atmel_flash_populate_footer( 0022F8B0, 0022FCD0, 65535, 65535, 65535 ) atmel.c:1256: message length: 1072 atmel.c:1105: Next first: 3072 .... atmel.c:1246: 572 bytes to MCU 002c00 atmel.c:1132: atmel_flash_populate_footer( 0022F8B0, 0022FB0C, 65535, 65535, 65535 ) atmel.c:1256: message length: 620 atmel.c:1105: Next first: 11836 atmel.c:1107: valid block length: 0 atmel.c:1109: sent: 11836, first: 11836 last: 11836 Validating... atmel.c:579: atmel_read_flash( 0022FEAC, 0x00000000, 0x00007000, 002C4210, 28672, false ) atmel.c:847: atmel_select_page( 0022FEAC, 0 ) atmel.c:510: __atmel_read_page( 0022FEAC, 0, 28672, 002C4210, false ) atmel.c:537: result: -5 Unknown error. Try enabling debug. commands.c:346: Error while validating. Error while validating.