Pri práci na jednom projekte pre zákaníka sa mi odporúčalo moje prvé, pôvodné UNO, kúpené za plnú cenu cca 35€. Mám tu okolo seba síce 10 ďalších replík z ebay (Pro Mini, Pro Micro…), ale projekt bol postavený na shielde pre UNO, tak som ho chcel/musel opraviť. Prvý krát som prepóloval 12V n a RAW vstupe a odniesol si to len stabilizátor NCP1117-ST50 v puzdre SOT-223, opravil som, doplnil schootky na vstup aby sa to neopakovalo.
Druhý krát sa odporúčalo z nezistenej príčiny, prestalo sa hlásiť vo Windowse, žiaden virtuálny COM port, nič. Reštart, iný USB port, iný kábel, nič. Zelená LED svietila, ale to bolo všetko. Pomeral som napätia na MEGA238P aj na MEGA16U2, všetko hralo. Skúšobne som išiel nahrať nejaký program cez FTDI kábel (VCC, GND, D0, D1, RESTART) ale nešlo to. Bolo jasné, že bootloader alebo celý procesor je v čudu, iný som po ruke nemal, tak som začal pátrať a objavil som super návod ako využiť DFU režim MEGA16U2.
Po resetnutí MEGA16U2 sa v správcovi zariadení zobrazil, nahral som ovládač, objavil sa ako ATmega16U2, ale v programe FLIP sa mi nedarilo, firmware Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex sa nechcel zmestiť do bufferu, Arduino-usbserial-atmega16u2-Uno-Rev3.hex sa síce zmestil, ale pri uploade vždy vybehla chyba že nevie skontrolovať čo zapísal (verify).
Tu už mi trochu zredlo a obával som sa že MEGA16U2 je kaput. Nádej mi na druhej strane dodávalo, že išiel prepnúť do DFU režimu…
Ako ďalšia možnosť sa ukázalo použiť ISP programátor a využiť ISP piny priamo na doske. AVR programátor doma nemám, ale zistil som že je jednoduché si ho vyrobiť – Mini Pro -> ISP programátor. Potom stačí nahrať do Mini Pro obligátny sketch ArduinoISP a použiť príkazový riadok.Do adresára \arduino\hardware\tools\avr\bin treba skopírovať súbor \arduino\hardware\tools\avr\etc\avrdude.conf a súbor Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex a spustiť príkaz:
avrdude.exe -C avrdude.conf -b 19200 -c avrisp -P COM12 -p m16u2 -v -U flash:w:Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex:i
COM port upravte podľa seba, Enter a je to.
avrdude.exe: Version 5.11, compiled on Sep 2 2011 at 19:38:36 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch System wide configuration file is "avrdude.conf" Using Port : COM12 Using Programmer : avrisp Overriding Baud Rate : 19200 AVR Part : ATmega16U2 Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC6 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 20 4 0 no 512 4 128 9000 9000 0x00 0x00 flash 65 6 128 0 yes 16384 128 128 4500 4500 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 lock 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 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.exe: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.10s avrdude.exe: Device signature = 0x1e9489 avrdude.exe: safemode: lfuse reads as EF avrdude.exe: safemode: hfuse reads as D9 avrdude.exe: safemode: efuse reads as F4 avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude.exe: erasing chip avrdude.exe: reading input file "Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex" avrdude.exe: writing flash (15668 bytes): Writing | ################################################## | 100% 10.33s avrdude.exe: 15668 bytes of flash written avrdude.exe: verifying flash memory against Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex: avrdude.exe: load data flash data from input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex: avrdude.exe: input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex contains 15668 bytes avrdude.exe: reading on-chip flash data: Reading | ################################################## | 100% 14.60s avrdude.exe: verifying ... avrdude.exe: 15668 bytes of flash verified avrdude.exe: safemode: lfuse reads as EF avrdude.exe: safemode: hfuse reads as D9 avrdude.exe: safemode: efuse reads as F4 avrdude.exe: safemode: Fuses OK avrdude.exe done. Thank you.
Ešte som musel podobným spôsobom preflashnúť aj bootloader na MEGA328P, čiže druhý ISP konektor a iný HEX súbor
avrdude.exe -C avrdude.conf -b 19200 -c avrisp -P COM12 -p m328p -v -U flash:w:ATmegaBOOT_168_atmega328.hex.hex:i
a hotovo, UNO rev3 funguje ako predtým.
Pridaj komentár