• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
UNU CH340 - problem z wgraniem bootloadera
#31
Ja widzę, że masz zaznaczony bit ckdiv8, to jest dzielnik częstotliwości przez 8, także na pewno nie jest na 8MHz, jest właśnie na 1MHz.
W boards.txt powinna być taka sekcja (plik jest typowo c:\Program Files (x86)\Arduino\hardware\arduino\avr\):

Kod:
atmega88o.name=[Optiboot] Arduino NG or older w/ ATmega88
atmega88o.upload.tool=avrdude
atmega88o.upload.protocol=arduino
atmega88o.upload.maximum_size=7680
atmega88o.upload.speed=115200
atmega88o.bootloader.tool=avrdude
atmega88o.bootloader.low_fuses=0xff
atmega88o.bootloader.high_fuses=0xdd
atmega88o.bootloader.extended_fuses=0x04
atmega88o.bootloader.path=optiboot
atmega88o.bootloader.file=optiboot_atmega88.hex
atmega88o.bootloader.unlock_bits=0x3F
atmega88o.bootloader.lock_bits=0x0F
atmega88o.build.mcu=atmega88
atmega88o.build.f_cpu=16000000L
atmega88o.build.core=arduino:arduino
atmega88o.build.variant=arduino:standard

Wtedy dopiero pojawia się płytka o nazwie Arduino "NG or older w/ ATmega88", no ale za tym musi iść odpowiedni plik bootloadera w katalogu bootloaders i potem głębiej w optiboot o nazwie optiboot_atmega88.hex. Jak zrobiłeś coś źle to tego nie znajdziesz w katalogach Arduino i działać z poziomu Arduino nie będzie.


To tu przy okazji widać po wartościach fuses w HEX, że są inne wartości, powinno być np. low_fuses=0xff, a masz 0x72. Możesz sobie to za palca ustawić w AVRLAB i wgrać (lub zrób to z Arduino z USBASP SLOW wgrywając bootloader). Ale musisz mieć odpowiednie wpisy w boards.txt i bootloadery w katalogach. 
Jak masz zamiar ręcznie grzebać w plikach to zrób sobie ich kopie. Jak widać opis jest prosty, można sobie samemu dorabiać inne definicje płytek po ogarnięciu struktury tego pliku, ale sam program bootloadera jest na konkretną częstotliwość kwarcu, także taki do 16MHz nie będzie działał na 1 czy 8MHz. Można sobie wygenerować w Arduino hex do wgrania i potem wgrać go przez AVRLAB i USBASP.
 
Odpowiedź
#32
Znalazłem ładny pakiecik optiboot, wrzuciłem brakujący plik bootloader, uzupełniłem wpis w boards.txt i w ten sposób, tuningowane Arduino 1.7.11 umie już wgrywać bootloader do mojej płytki po wybraniu odpowiedniej płytki z listy (atmega88). Jedyne co musiałem sobie poprawić, to w boards.txt, mcu=atmega88p bo cały czas miałem błędy sygnatury urządzenia.

Jednak nadal coś jest nie tak z tym bootloaderem. Po jego wgraniu, płytka zaczyna mrugać LEDem, czyli realizuje podstawowy program, ale wgrywanie przez usb nie działa, zwracając błąd:
Kod:
Arduino:1.7.11 (Windows XP), Płyta:"[Optiboot] Arduino NG or older w/ ATmega88"

Szkic używa 382 bajtów z (4%) pamięci programu. Maksimum to 7 680 bajtów.

Globalne zmienne używają 9 bajtów  dynamicznej pamięci.

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x60

Problem z wgrywaniem na płyte. Sprawdź http://www.arduino.cc/en/Guide/Troubleshooting#upload w poszukiwaniu sugestii.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x60
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x60
Gdy spróbuje wgrać szkic przez programator, chodzi bez problemu, ale skoro udało się reanimować płytkę, to fajnie było by i ten problem pokonać Smile

Fusy sprawdzałem AVRLabem i są zgodne z wpisem z boards który dałeś
 
Odpowiedź
#33
Rozumiem, że podłączasz płytkę pojawia się port COM. Wgraj jakiś szkic z obsługą komunikacji z UART, sprawdź czy UART działa prawidłowo w obie strony na prędkości 115200. Może nie tylko procek dostał strzała. Sprawdź czy działa automatyczny reset, a właściwie czy wgrywanie  działa gdy reset wciśniesz ręcznie.   Dalej możesz sprawdzić czy jak podłączysz płytkę z innego konwertera USB-UART to nawiążesz komunikację/uda się wgrać kod przez bootloader. Stary procek 328 masz w jednym kawałku to możesz go wrzucić na jakąś płytkę i zobaczyć czy działa.
Niestety sam tego nigdy nie robiłem akurat z tym procesorem. Jak będę miał chwilę to sobie zlutuję taki układ i sprawdzę czy są tu jakieś niespodzianki. Z informacji ogólnych na sprawnej płytce po wgraniu bootloadera i ustawieniu fuses powinna działać od strzału jak oryginał. Mam płytki jednak zlutowane tylko z 168 i 328.
AVR LAB też umie komunikować się z bootloaderem, wybierz programator Arduino, port com i odczytaj AVR. Nano z procesorem 168 odczytuje, nie pokazuje jednak fuses prawidłowo, bo ich nie odczytuje jak przez USBASP. Jakby nie działało to wciśnij reset, może tu coś kuleje.
Edit:
No akurat dzisiaj przyszły wynalazki z Chin 5 m88p za 3$. Są niespodzianki. Po zlutowaniu podłączyłem USBASP, odpaliłem AVRLAB, ładnie wykrył, zmieniłem mu tylko bit ckdiv8  by leciał na wewnętrznym 8MHz i nie było problemu w Arduino z przełączaniem na SLOW. Ale w Arduino łatwo nie było, też się pluł o te ATMega88 i p na końcu. Dodałem więc nową płytkę:
Kod:
atmega88p.name=[Optiboot] ATmega88p 16MHz
atmega88p.upload.tool=avrdude
atmega88p.upload.protocol=arduino
atmega88p.upload.maximum_size=7680
atmega88p.upload.speed=115200
atmega88p.bootloader.tool=avrdude
atmega88p.bootloader.low_fuses=0xff
atmega88p.bootloader.high_fuses=0xdd
atmega88p.bootloader.extended_fuses=0x04
atmega88p.bootloader.path=optiboot
atmega88p.bootloader.file=optiboot_atmega88.hex
atmega88p.bootloader.unlock_bits=0x3F
atmega88p.bootloader.lock_bits=0x0F
atmega88p.build.mcu=atmega88p
atmega88p.build.f_cpu=16000000L
atmega88p.build.core=arduino:arduino
atmega88p.build.variant=arduino:standard
No i wgrał nawet fuses, ale bootloadera nie - nie mógł znowu znaleźć hexa z bootloaderem, jest niby podany path optiboot i wszystkie bootloadery są w tym katalogu, a ten wyskoczył, że nie może go znaleźć w katalogu wyżej, no to mu skopiowałem tam dwa pliki z 88 wyżej i w końcu wgrał.
Teraz mam już bootloader, ale nie wgrywa mi przez niego - twierdzi, że teraz wykrywa procek m88. 

No to dodałem kolejną płytkę z m88, ale teraz to mi kazał spadać na drzewo, bo takiej nie zna podczas kompilacji. Po prostu teraz wykrywa to co podaje bootloader, czyli rozwiązaniem jest powrót do płytki zdefiniowanej oryginalnie przez OPTIBOOT bez p. I działa. Trochę kulawo, bo żeby wgrać bootloader trzeba zmienić na płytkę z p, gdyż:
Kod:
Error while burning bootloader.
Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e930f (probably m88p)
avrdude: Expected signature for ATmega88 is 1E 93 0A
        Double check chip, or use -F to override this check.

avrdude done.  Thank you.
Rozwiązaniem jest zdobycie bootloadera do 88p, tak by USBASP wykrywał to samo co wysyła bootloader przy starcie. Pewnie wystarczy sobie to skompilować, ale do tego wrócę w jakiś długi zimowy wieczór.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości