Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[m328p][Arduino]Bootloader i duże pliki z grafikami

piotrva 23 Lip 2011 14:37 2623 6
  • #1 23 Lip 2011 14:37
    piotrva
    Moderator Mikrokontrolery

    Witam Kolegów.
    Mam taki oto problem:
    1. Mamy sobie plik wynikowy do zaprogramowania procesora, który zajmuje w jego pamięci 27898 B (pamięć dostępna 32768B - bootloader 2048B = 30720B)
    2. Wgrywamy go bootloaderem Arduino przez środowisko Arduino i przy weryfikacji otrzymujemy taki komunikat (nie zawsze adresy i wartości są takie jak na zdjęciu)
    [m328p][Arduino]Bootloader i duże pliki z grafikami
    3. program działa, ale grafika (która akurat jest zawarta w tamtych komórkach pamięci) wyświetla się z dziurami (elementami starej grafiki o tym samym rozmiarze wgranej wcześniej)
    4. kasujemy pamięć procesora zewnętrznym programatorem ISP i wgrywamy wymieniony wcześniej w pkt. 1 plik wyłuskany z plików tymczasowych Arduino - wgrywanie i weryfikacja przebiegają pomyślnie - obrazek wyświetla się poprawnie
    5. kasujemy ponownie pamięć procesora zewnętrznym programatorem ISP i wgrywamy odpowiedni bootloader arduino.
    6. wgrywamy plik z pkt. 1 poprzez środowisko Arduino i bootloader - weryfikacja po stronie Arduino przebiega bez błędów - obrazek wyświetla się poprawnie.
    7. wgrywamy ze środowiska Arduino inny plik (rozmiar dokładnie ten sam, inne są tylko dane obrazka) i wraca problem z punktu 3.

    I teraz mam do Kolegów takie pytania:
    1. Czy ktoś miał podobne problemy z tym bootloaderem? (dodam, że bootloader jest oryginalny jaki był dołączony do Arduino-0022)
    2. Jeśli tak to czy i jak udało się problem rozwiązać?
    3. Jakieś sugestie dot. przyczyny? (tzn. sam doszedłem jedynie do wniosku, że bootloader nie kasuje niektórych stron/komórek pamięci i dlatego potem nie mogą one zostać zmienione. Problem nie leży też w procesorze i ew. jego uszkodzeniach, gdyż wtedy podobne operacje przeprowadzane przez ISP także dałyby wskazówkę o jakichś problemach z pamięcią flash - a tą zapisywałem "pod korek" do pełna losowymi wartościami i potem weryfikacja była zawsze pozytywna)
    Z góry dziękuję za wszelkie porady i sugestie.

    0 6
  • #3 23 Lip 2011 23:39
    piotrva
    Moderator Mikrokontrolery

    Ehh, wiem o tym, zresztą różnice są 2, u Ciebie wogóle program się nie wyrywał bo był błąd w komórce 0x0000, a ja mam znacznie dalej, po drugie bootloader wgrywalem i błąd powtarza się przy świeżym bootloaderze, mimo iż sam bootloader się nie uszkadza i dalej wyrywa mniejsze programy...
    Co zresztą opisałem w pytaniu...

    0
  • #4 26 Sie 2011 19:03
    mmacura
    Poziom 17  

    A może bootloader ma błąd i nie kasuje całej zawartości flash przed programowaniem (czyli całych 32kB - 2kB na bootloader) i dopóki program wgrywany bootloaderem jest taki sam jak już istniejący lub flash jest pusty (oprócz bootloadera) to jest OK, a jeśli nowowgrywany program różni się od poprzedniego to bootloader nie może nadpisać różnic i wskazuje błędy.

    Marek

    0
  • #5 26 Sie 2011 20:44
    piotrva
    Moderator Mikrokontrolery

    To właśnie przecież rozważam jako przyczynę:

    piotrva napisał:

    (...)sam doszedłem jedynie do wniosku, że bootloader nie kasuje niektórych stron/komórek pamięci i dlatego potem nie mogą one zostać zmienione. Problem nie leży też w procesorze i ew. jego uszkodzeniach, gdyż wtedy podobne operacje przeprowadzane przez ISP także dałyby wskazówkę o jakichś problemach z pamięcią flash - a tą zapisywałem "pod korek" do pełna losowymi wartościami i potem weryfikacja była zawsze pozytywna(...)

    0
  • #6 27 Sie 2011 16:31
    mmacura
    Poziom 17  

    To akurat można dość łatwo sprawdzić - zaprogramować dużym programem procesor - następnie skosować z hex wszystko, oprócz np. tylko pierwszych 16 bajtów tego samego programu, zaprogramować procesor i odczytać przez ISP. Komórki powyższe 16-tej powinny być 0xFF - jeśli nie, to bootloader jest do bani.

    Marek

    0
  • #7 27 Sie 2011 19:03
    piotrva
    Moderator Mikrokontrolery

    Jakoś nie do końca rozumiem ideę kasowania - z tego co wiem kasować można pamięć flash tylko stronami. Podsunąłeś mi za to inne rozwiązanie - zaprogramować cały procesor (przez bootloader) wsadem wypełnionym komórkami o wartości 0x00, potem też przez bootloader wykasować wszystko i potem via np. ISP odczytać i sprawdzić ile i jakich komórek nie kasuje...
    Jak będę miał czas i ogarnę jak się do tego bootloadera dobrać poza Arduino, żeby wgrywać własne hexy, to sprawdzę to.

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo