Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[FreeRTOS][SAM7] -Bootloader

Carbon 10 Nov 2010 02:24 1635 8
  • #1
    Carbon
    Level 10  
    Witam serdecznie
    Tematy bootloadera do ARM7 sa ciężko wyszukiwalne w sieci... Do sam7 jeszcze gorzej, a na tym poziomie platforma ma duże znaczenie, ale do rzeczy.
    Piszę właśnie bootloader którego zadaniem będzie odczytanie obrazu pamięci z pliku i zapisanie go we flashu. I właściwie to zadanie nie jest trudne. Jednak bootloader będzie na początku flasha, z własnymi wektorami przerwań itd. Firmware ma z kolei swoje wektory przerwań, które muszą się znaleźć pod tym samym adresem (0x00).
    Pytanie brzmi co najlepiej zrobić aby to pogodzić i jak to zrobić? Firmware używa FreeRTOSa.
    W nocie "Safe and Secure Bootloader Implementation" Atmela na rozwiązanie tego problemu proponują umieścić wektory przerwań firmware`u na początku ramu i zastosowanie komendy Remap (wtedy ram mapowany jest pod adres 0x00).
    Mogą być tego jakieś negatywne konsekwencje (mam na myśli Remap- dotąd flash cały czas był mapowany pod ten adres)?
    A może jest jakieś inne, lepsze wyjście?
    Jeśli ktoś ma coś innego do dorzucenia od siebie w tej kwestii też bardzo proszę.
    W związku z pierwszym zdaniem tego postu, kiedy skończę ów bootloader zamierzam go udostępnić jako opensource.
  • #2
    Carbon
    Level 10  
    Na razie poradziłem sobie nie korzystając w ogóle z przerwań w bootloaderze. W tablicy wektorów bootloadera są wpisane na stałe skoki do tablicy wektorów aplikacji.
    Bootloader działa prawidłowo. Kopiuje program z karty, wpisuje do flasha i uruchamia go. Program też działa jak trzeba.
    Teraz chce pójść dalej i połączyć bootloader z firmwarem w jedno. Chodzi oczywiście o to aby w produkcji od razu umieścić cały program we flashu.
    Problem polega na tym, ze bootloader i aplikacja korzystają z tych samych bibliotek, więc nie moge ich zwyczajnie razem skompilować.
    Pytanie brzmi: jak najprościej umieścić cały kod bootloadera "pod" aplikacją w jednaj binarce?
    Każdy powtarzalny sposób będzie dobry.
  • #3
    upanie
    Level 22  
    Ja kiedyś zrobiłem bootloader do AT91SAM7X256 ładujący program z karty SD. Program też chodził na FreeRTOS :) Zrobiłem dokładnie tak samo jak Ty z przerwaniami :) Wszystko działa prawidłowo po dziś dzień.
    Rozumiem, że firmware zawsze zaczyna się pod konkretnym adresem. Skoro tak to wystarczy, że skleisz ze sobą dwie binarki i już :) Nie wiem czy programujesz procki ale jeśli to np OpneOCD to możesz również w skrypcie programować dwie binarki jedną po drugiej.
    U mnie jednak to nie miało sensu bo po zaprogramowaniu i zmontowaniu urządzenia trzeba je jakoś skonfigurować bo każde ma np. inny numer klienta, ustawienia itp.
    W związku z tym wgrywanie firmwaru odbywa się w tym etapie. U Ciebie może być inaczej ale zastanów się nad tym.
  • #4
    Carbon
    Level 10  
    Po chwili namysłu stwierdziłem że napisze krótki programik sklejający binarki jak mówisz :).
    OpenOCD używam, ale na etapie produkcji nie wiem jaki sposób programowania będzie użyty. Poza tym firmware jest troszkę przesunięty względem końca bootloadera- wyrównanie do rozmiaru lock-regionu.
  • #5
    Carbon
    Level 10  
    Zgodnie z obietnicą z pierwszego posta, udostępniam: NowBoot -bootloader dla sam7. Zachęcam do pobierania i dzielenia się uwagami.
    [edit] Zmieniłem link do bootloadera, zrezygnowałem ze strony projektu na rzecz Github'a
  • #6
    upanie
    Level 22  
    Tak na szybko:
    Po kiego grzyba w archiwum do zaciągnięcia ze strony są pliki wynikowe?
    Przed spakowaniem trzeba było wykonać make clean ;)
    Wszystkie pliki *.o, *.elf itp itd są raczej niepotrzebne ściągaczowi ;)
  • #7
    Carbon
    Level 10  
    1.Nie uznałem, że będą komuś przeszkadzały,
    2.Jeśli nie masz akurat pod ręką zainstalowanego Yagarto, albo masz Eclipse i inny kompilator i nie chcesz psuć swojego środowiska, a zechcesz jedynie szybko sprawdzić jak to działa, to warto mieć binarke.
    3.Cleana może sobie zrobić każdy i nie widze powodu, zeby miało to być czymś uciążliwym.
    Tylko dlatego :D
  • Helpful post
    #8
    upanie
    Level 22  
    No ale elf, *.lst, wszystkie objecty są naprawdę po nic a wielokrotnie zwiększają objętość pliku do ściągnięcia.
    Poza tym jest super hiper mega mała szansa, że komuś będzie pasowała Twoja binarka do swojej płytki ;)
  • #9
    Carbon
    Level 10  
    1.Chyba nie korzystasz z modemu? 3.75MB to rzeczywiście mega objętość :)
    2.No nie wiem- SAMy są między sobą kompatybilne, i niezależnie jakiego używa, jeśli karte ma podłączoną do SPI0, NPCS_1, to jedyne co może sprawić problem, to pamięć RAM i stos- w projekcie rzeczywiście dość optymistycznie ustawione jest 64KB.
    3.Przekonałeś mnie. Umieszcze same źródła, a pliki wyniokowe oddzielnie :)