Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Konwersja kodu HEX do binary

makauto 28 Lis 2016 11:39 648 2
  • #1 28 Lis 2016 11:39
    makauto
    Poziom 2  

    Witam,

    Temat, z tego co widzę, wielokrotnie podejmowany. Ja jednak mam trochę inny problem z konwersją danych.
    Chcę zapakować do mikrokontrolera AVR nowy program za pomocą bootloadera. AVR studio generuje plik w formacie Intel HEX, a do AVRa trzeba załadować plik w formacie bin. I tu pytanie do kolegów, którzy mogliby coś mi wyjaśnić. Oto plik HEX z wyodrębnioną sekcją danych (plik wygenerowany przez AVR Studio - dla jasności przekopiowanych kilka pierwszych linii po otwarciu pliku w Notatniku):

    Linie nagłówkowe:
    :020000020000FC
    :020000000EC030
    :04001000ADC3F0C3C9
    :04001600BCC6F6C6A8

    Linie danych:
    :10 001C 00 9DC304E00EBF0FE50DBF0ED01FD565D1 FB
    :10 002C 00 24D79ED6AED56ED17BD11BD087D1D6D1 5D
    :10 003C 00 4DD040D684D6FACF0027009361000093 B0
    :10 004C 00 620001E00093600008B1006808B90027 65
    ...

    I oczywiście:
    10 - liczba danych
    001C - adres
    00 - rodzaj danych
    9D... D1 - dane
    FB - suma kontrolna

    I tu pojawia się problem, z którym się borykam. Otóż po wczytaniu pliku do chociażby PonyProga i zapisaniu go w postaci BIN otrzymuję:

    0000: 0EC00000000000000000000000000000
    0010: ADC3F0C30000BCC6F6C600009DC304E0

    1. Adresy w pliku HEX zaczynają się od 001C ???
    2. Dane z pliku HEX nie pokrywają się z danymi w pliku BIN - czy one są w jakiś sposób zakodowane, bo wydaje mi się, że powinno być tak

    :10 0000 00 0EC00000000000000000000000000000 32
    :10 0010 00 ADC3F0C30000BCC6F6C600009DC304E0

    A dalej pojawia się kolejna niespodzianka - przeanalizujmy sekcję bootloadera
    Plik HEX:

    :10 1C00 00 F89404E00EBF0FE50DBF0CB301FDFDCF + suma kontrolna
    :10 1C10 00 20E010E12FBB1EBBE09A0DB3013009F0 + suma kontrolna


    Plik BIN
    1C00: F89404E00EBF0FE50DBF0CB301FDFDCF
    1C10: 20E010E12FBB1EBBE09A0DB3013009F0

    Tak więc sekcja danych w pliku HEX i w pliku BIN jest identyczna, jak również zgadzają się adresy z pliku HEX, pod którymi te dane mają zostać zapisane w mikrokontrolerze.
    Co więc zrobić z sekcją 0000-1BFF (część programu)

    Pozdrawiam

    Maciek

    0 2
  • #2 28 Lis 2016 20:04
    makauto
    Poziom 2  

    Zamykam temat

    0