• 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
Bootloader czy nie...
#1
Witam,
prawdopodobnie będę musiał na swojej płytce umieścić bezpośrednio sam uC i zastanawiam się nad jedną kwestią.
Czy w środowisku Arduino IDE wygenerowany plik wynikowy jest taki sam, gdy ma być wgrany programatorem i gdy ma być wgrany przy pomocy bootloadera? Jeżeli planuję użyć programatora to chyba powinienem to zaznaczyć (kompilator będzie miał większy obszar pamięci do wykorzystania przy generowaniu pliku wynikowego). Jak to jest?
 
Odpowiedź
#2
Tak, można wybrać płytkę, która ma zdefiniowaną opcję bez bootloadera, zysk 512B (UNO) do 2kB (PRO MINI), można ją sobie samemu zdefiniować, albo wybrać coś po doinstalowaniu MINI CORE. Można też zostawić bootloader, umożliwia to wgranie wsadu przez BT (moduł HC-05 bardzo łatwo to zrobi), albo po WIFI z modułem ESP8266. Mini Core ma bootloadery dla wielu kombinacji taktowania uC.
Do PRO MINI można też wgrać bootloader od UNO, jest lepszy, szybszy i mniejszy. Jak są te same uC, tak samo taktowane, to bootloader może być ten sam. W PRO MINI był starszy 2kB, w NANO jest wersja stara i nowa, w PRO MINI już chyba nie wypuścili nowszej.
Można też wgrać do np. UNO programatorem program wprost z Arduino IDE, dla programu jest to obojętne czy zdefiniowany był w płytce bootloader czy nie, takie wgranie go kasuje i jedyne co, to że nie będzie już działał aż do ponownego "wypalenia". Minusem jest to, że będzie się wysypywała kompilacja nawet gdyby program się zmieścił, bo ma zdefiniowany flash pomniejszony o bootloader.
Zauważyłem też, że w miniCOre wygenerowany program jest większy, miałem raz taki na styk i dlatego się nauczyłem robić te definicje płytek, kompilacja jak dla UNO bez bootloadera się mieściła, a po wybraniu w miniCore 328P bez bootloadera minimalnie przekraczała 32kB.
Więc się zdarza, że po wybraniu innej definicji płytki coś się zmienia, ale to była kwestia może kilkudziesięciu bajtów, a nie 200% jak miałeś z tym (rzekomo) problem w 32u4. W innym CORE mogą być zmodyfikowane biblioteki, ustawione inne opcje optymalizacji kompilacji, ale to są pojedyncze %.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Dzięki, może to nie ten wątek - jaki programator polecasz do ATSAMD21? (idealnie, gdyby był obsługiwany przez ArduinoIDE i MPLAB X IDE)
 
Odpowiedź
#4
Jest dużo opcji, kiedyś rewelacją był MPLAB Snap, miał jakąś wadę, że trzeba było wymienić jeden rezystor, ale był za 4 dychy (2 w promocji). Teraz kosztuje 2 stówki, a i nie wiem, czy ta wada została usunięta, bo to chodziło o jeden tryb programowania. Nie jest to jakieś skomplikowane, mały rezystorek SMD łatwo wywalić zwykła lutownicą, a wlutowałem w to miejsce zwykły przewlekany odpowiednio wygięty i zalałem klejem.
Można kupić płytkę curiosity z uC tej rodziny, masz płytkę z uC do zabawy, a można jakoś się przełączyć na inny uC zewnętrzny, trochę metaloplastyki potrzebne i masz 2 w 1 za pół ceny.
Jak zerknąłem teraz na ceny to nie ma co narzekać na ten MPLAB, programatory, które kupowałem za 2 stówki (Atmel ICE PCBA), teraz ponad 5, wszystko podrożało w ostatnich 3 latach o 30%, ale te zabawki o kilkaset.
https://www.elektroda.pl/rtvforum/topic3696770.html opis MPLAB i przeróbka.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Ostatecznie uruchomiłem PICkit4 i programowanie kończy się pomyślnie.
Niestety program nie działa. Używam HEXa wygenerowanego z Arduino IDE ale podejrzewam, że coś trzeba ustawić, bo zawiera on kod od adresu 2000H. Tak jak piszesz, pewnie trzeba wybrać płytkę, która może być bez bootloadera - nie wiem tylko jak jej szukać Sad
Dodatkowo czy nie muszę gdzieś ustawić FUSE?
 
Odpowiedź
#6
Wgrywanie bootloadera w Arduino ustawia fuse, jak nie ma bootloadera (wybierzeesz taką opcję) to tylko ustawia fuse.
Zainstaluj sobie MINI CORE, wtedy wgrasz wprost z Arduino IDE (tylko ISP) i program i ustawisz uC. Poza tym to właśnie w nim można wybrać wiele opcji bez konieczności wymyślania koła i pisania własnej definicji płytki.
Wgranie bootloadera w MINI CORE gdy wybierzesz opcję bez boodloadera ustawia tylko fusebity, poza tym jeśli jest wybrana opcja bez bootloadera to klikasz w strzałkę i wgrywa aktualnie wybranym programatorem, normalnie by skorzystać z programatora trzeba wybrać opcję w menu.
Wgraj sobie jakiś banalny program i sprawdź działanie, blink, łatwo zauważyć że miga za szybko czy za wolno, potem docelowy.
Nie wiem czego używasz do wgrywania, typowo nie wybiera się adresu, jedyne co to wgranie programatorem hex'a kasuje ewentualny bootloader i by go przywrócić trzeba ponownie wypalić.
Bootloader niewiele przeszkadza w większości przypadków, zajmuje 512B, opóźnia uruchomienie o parę sekund, można kod wgrywać zdalnie przez BT, przez WIFI mostkiem WIFI-UART ESP8266, można sobie na płytce docelowej zostawić złącze dla konwertera UART czy modułu HC-05 i wykorzystać do wgrywania, testów, jak zostawisz na stałe to nadzorować działanie czy sterować przez sieć komputerową.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#7
Ok, dzięki. W takim razie:
- gdzie mogę ustawić opcję wgrywania bez bootloadera?
- czy dla Mini Core mogę wybrać uC serii ATSAMD21?
Może rzeczywiście w przyszłości zostawię możliwość podłączania USB (i pracy z bootloaderem). Niestety na razie chcę wykorzystać płytkę, którą zrobiłem a tu mam tylko złącze do programowania programatorem (interfejs Cortex SWD).
Poza tym, nawet jak chciałbym wgrać bootloader, to nadal nie wiem skąd wziąć stosowny HEX (Mój programator nie jest obsługiwany przez Arduino IDE, a zewnętrzna aplikacja musi dostać HEXa...)
 
Odpowiedź
#8
Szkoda że nie wspomniałeś o tym w pierwszym poście, napisałem parę postów pod kątem zwykłego, typowego w Arduino AVR.
Wpisujesz w Google co Cię interesuje i na github czytasz:
ATSAMD21 arduino core
https://github.com/arduino/ArduinoCore-samd
Każdy core ma inne opcje, które sobie wymyślił twórca i zebrał w ramach core, rożne opcje uC, ich ustawień, programatorów.
Nie używam tego uC i nie wiem jakie są opcje do wyboru.
To zupełnie inny uC niż typowe Arduino i nie nawet nie wiem czy w ogóle ma fuse bity.
Mam core do SAMD zainstalowany i nie ma opcji Twojego programatora. Poza tym nie ma żadnych opcji wyboru, ale jak pisałem, to zupełnie inna rodzina uC, jak ostatnio się bawiłem ARM to opcje ustawienia źródeł taktowania można było zrobić w dedykowanym oprogramowaniu dla tego uC od STM, a w Arduino opcje były okrojone, to było zbyt skomplikowane by dorabiać takie opcje w menu Arduino.
Domyślam się, że uC ma wbudowany USB i bootloader tak jak w DUE czy LEONARDO też można wypalić, tylko z programatorem może być problem, do STM faktycznie był programik do wgrywania wsadu pod odpowiedni adres, plik do wgrania, odpowiedni programator (Arduino obsługuje akurat) tutorial krok po kroku, a potem już normalne klepanie kodu w Arduino lub rzeźbienie w STM32CubeMX bez ograniczeń Arduino.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#9
Po woli tracę siły...
Kupiłem Atmel-ICE i chciałem wgrać bootloader. Niestety mam błąd:
Error: Debug adapter does not support any transports? Check config file order.
Kompletnie mi to nic nie mówi Sad
 
Odpowiedź
#10
Przynajmniej zasoby masz nieograniczone Big Grin
Zamiast kupować kolejny programator mogłeś zainstalować core, który go obsługuje, zerknąć na konfigurację i skopiować do drugiego core w odpowiedni plik konfiguracyjny, to są zwykłe piliki tekstowe, choć oczywiście nie robiłem tego z pickitem. No i w internetach piszą, że musi być w trybie AVR, protokoły PicKit4 ponoć są tajne, ale to pewnie przestawia X dla AVR, wtedy ma się zachowywać jak Atmel ICE.
Choć do uC Atmela Atmel ICE na pewno będzie lepszy.
Może opisz co robisz? Wyjmuję z pudełka, podłączam kable interfejsu MOSI....
Widzę w farnell taką płytkę z uC jak w ZERO, SPI jest to jest tylko do podłączania zewnętrznych urządzeń SPI jednak, do programowania jest nieuzbrojona listwa do wlutowania kołków z 2 pinowym interfejsem SWD.
Arduino ZERO ma dodatkowy uC który robi za programator debugger, dlatego wgranie bootloadera z tą płytką raczej nie zadziała. Ale jak się wybiera ZERO z native USB port to on gada z uC z pominięciem tego dodatkowego uC, na pewno w DUE to działa, więc ma wgrany bootloader.
Może spraw sobie lepiej taką na czas prototypowania za 5 dych z Farnell, przynajmniej większość niepewności odpada.
https://pl.farnell.com/seeed-studio/1020...t=atsamd21
Takie płytki są chyba dotowane, bo ich cena jest niewiele wyższa niż samych uC.
Jaki masz dokładnie  ten procek, może dorzucę go do jakiegoś zamówienia w najbliższym czasie i spróbuję odtworzyć twój problem.
Możesz też zapytać na Elektrodzie, może tam są osoby używające tego uC.
Wpisałem też w Gogole jak wgrać bootloader i tu piszą, że można użyć od Arduino Zero, ale tylko wtedy, gdy jest ten sam uC z 256kB flash i 32kB RAM, a uC SAMD21 jest cała masa w różnych wariantach i nie napisałeś co masz:
https://forum.arduino.cc/t/how-to-upload.../906434/11
Generalnie to nie ma za bardzo co walczyć o ten bootloader jeśli sprzęt robisz dla siebie i masz programator, bootloader działa przez USB i opisane przeze mnie opcje dla Atmega328p tu i tak nie zadziałają.
Chyba że programowanie w ogóle nie działa z Arduino, a tu chcesz napisać program.
A u mnie bez uC błędy wyglądają tak:
Kod:
Open On-Chip Debugger 0.10.0+dev-gf0767a31 (2018-06-11-13:36)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
debug_level: 2
0
Error while burning bootloader.
Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.
none separate
adapter speed: 400 kHz
cortex_m reset_config sysresetreq
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 400 kHz
in procedure 'init'
in procedure 'ocd_bouncer'


Open On-Chip Debugger 0.10.0+dev-gf0767a31 (2018-06-11-13:36)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
debug_level: 2
0
Error while burning bootloader.
Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.
none separate
adapter speed: 400 kHz
cortex_m reset_config sysresetreq
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 400 kHz
in procedure 'init'
in procedure 'ocd_bouncer'
Oczywiście nic nie mam podpięte do programatora.
Edit, doczytałem jeszcze, że ten procek z płytki Farnella, a właściwie cała płytka jest klonem ZERO PRO, czyli właśnie płytki bez wbudowanego ekstra programatora/debuggera. Jak masz SAMD21E17 to nie powinno być problemu z konfiguracją i wgraniem bootloadera, można wtedy korzystać z portu USB do UART bez konieczności stosowania przejściówek.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości