Arduino Due - brak automatycznego kasowania

Kwestia o którą chcę zapytać nie jest żadnym poważnym problemem, pytam bardziej z ciekawości. Mianowicie wpadło w moje ręce Arduino Due, będące częścią pewnego projektu. Podczas eksperymentów podjąłem próbę wgrania zaktualizowanego kodu, podpinając go przez "programming port" (konwerter USB-UART zrobiony na atmega16u2, tak jak w innych płytkach Arduino).

Okazało się jednak, że przy próbie wgrania kodu wywala się błąd o niemożliwości znalezienia płytki na tym interfejsie. Z ciekawości spróbowałem wgrać przez natywny port USB - tutaj zadziałało bez problemu.

Sprawa jednak mnie zainteresowała i zacząłem eksperymentować. Szybko odkryłem przyczynę - okazało się, że przed wgraniem softu konieczne jest ręczne skasowane flasha przyciskiem ERASE - po takiej operacji płytka przechodzi w tryb bootloadera i flashowanie przez UART przebiega normalnie.

Zdziwiło mnie to, bo inaczej zapamiętałem zachowanie tej płytki. Wyjąłem więc z pudełka swoje własne Due i zrobiłem test. Tym razem wszystko przebiegało normalnie - nie trzeba było wciskać przycisku, plytka flashowała się automatyczne.

I teraz mnie zastanawia - tak z czystej ciekawości - możliwa przyczyna. Inna rewizja płytki? Różnica pomiędzy oryginałem i możliwą podróbką? Inny soft w konwerterze na a16u2? A może jakieś dziwne uszkodzenie, które jakimś cudem w ogóle nie przeszkadza w korzystaniu z konwertera UART-USB? Bo po wgraniu programu zaczyna on działać normalnie.

Reply to
Atlantis
Loading thread data ...

Kwestia bootloadera. a16u2 po prostu wystawia port, bootlader musi rozpoznac czy to programowanie czy komunikacja przez port. Wieksze MCU maja wlasny bootlader ktory dziala tylko w specjalnych okolicznosciach (tak by wykluczyc konflikt z protokolem uzywanym przez program). Typowe rozwiazania to specjalny pin uaktywniajacy programowanie. Popularne tez jest uruchomianie bootloadera gdy procek jest pusty (po ERASE). Arduino ma wlasny bootloader ktory z punktu widzenia procka jest czescia programu, ale srodowisko Arduino tak organizuje zapis zeby raz zapisany bootloader pozostal na stale we flashu. Jak rozumiem w Due mozna sie obyc bez bootloadera z Arduino i pewnie dostales takie Arduino bez bootloadera Arduino (albo z bootloaderm okrojonym do USB). Programujac przez UART programowales bootloaderm procka (a nie bootloaderm Arduino ktory czeka na program po kazdym resecie). Jak wykasujesz caly flash (czyli bootloader Arduino) w swoim Due to tez bedzie sie tak zachowywac.

Reply to
antispam

Atlantis snipped-for-privacy@wp.pl napisał(a):

Tak bym obstawiał. Soft niewysterowujący linii ERASE. Ewentualnie brak podłączenia tej linii do Atmegi, jedynie do przycisku.

Reply to
Grzegorz Niemirowski

Hmm... To jest ten sam bootloader, który był wykorzystywany w mikrokontrolerach AT91SAM7 od Atmela (SAM-BA)? Rozumiem, że istnieje jakieś konsolowe narzędzie do flashowania, z którego korzysta Arduino i które mógłbym sobie podpiąć pod Makefile? Wiesz może co to za narzędzie i czy jest też kompatybilne ze starą rodziną SAM7?

Reply to
Atlantis

W Due faktycznie. Ja pisalem ogolnie, w Uno i paru innych wariantach bootloader robi wiecej. Czy chcesz to nazwac "rozpoznaje" to twoja sprawa. W kazdym razie musi podjac decyzje.

Racja. Mnie zmylilo ze sa (nieoficjalne) warianty gdzie bootloader jest "bardziej zbedny" niz w Due ale go wrzucaja...

Reply to
antispam

No wlasnie: musi stwierdzic czy to co dostaje jest zgodne z protokolem. W Uno zgodnosc obejmuje timeout, a jak nie ma nowego programu to uruchamia stary.

Reply to
antispam

Tu piszesz o Due. W Uno jest bootloader Arduino ktory dziala jak pisze. W innych prockach jest BOOT pin (jedna lun wiecej): bootloader uruchamia sie niezaleznie od kasowania procka (pomijam to kwestie bitow w stylu "code protection"), trzeba po prostu dac odpowiedni poziom na BOOT pin.

Reply to
antispam

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.