Hallo zusammen, in einem AVR ATMega128 wird durch die Firmware auf das Eprom zugegriffen. Im Eprom sind ein paar Parameter hinterlegt die der Anpassung des Ablaufes dienen. Wenn ich das Eprom auslesen erhalte ich eine *.eep Datei die auch mit einem einfacher Editor dargestellt werden kann. hier ein Stück aus dem Epromsspeicher als Auszug ohne Daten :10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 :10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 :10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 :10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 :1000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 :1000B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 :1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 Ich kenne den Aufbau und sehe auch im letzten Segment die Prüfsumme/Checksumme wie man es auch immer nehnen mag. Um die Einstellung komfortabler zugestalten arbeite ich an einem externen Programm welches die Datei einließt und auch schon verändern kann. Nach dem Speichern soll dann das Zurückschreiben in den AVR mit der Bootloadersoftware erfolgen. Da dieser Versuch mit einem Fehler quitiert wird liegt es wohl an der nicht aktualisierten Prüfsumme. Soviel zu den Randbedingungen: Auf der Suche nach Erklöärungen und wie man es zum Verständnis erstmal handisch berechnen kann bin ich auf dieses Beispiel zum Intel Hex Format gestoßen. http://de.wikipedia.org/wiki/Intel_HEX Von der Internetseite :020000021000EC :10010000214601360121470136007EFE09D2190140 Die Prüfsumme für den ersten Beispiel-Datensatz berechnet sich wie folgt: Das zusammen rechnen der einzelnen Hexfelder des Beispieles habe ich auch verstanden komme aber am Ende ins schleudern und nicht weiter. Ich stocke bei 3C0 -> C0 -> C0 + 1 = 40 ????????? beim Zusammenrechnen des ganzen erhalte ich dezimal 960 was 3C0 entspricht. Der untere Wert wird verwendet C0 auch klar. Aber wie wird jetzt aus C0 + 1 = 40 ??????? Kann mir das einer kurz für einen Dummy erklären... Danke Gruß Schorschi
Ich glaube so: 0xc0 := 0b11000000 2er Komplement: invertieren, dann + 1 -> 0b00111111 -> 0b01000000 0b01000000 := 0x40 MfG StorkBOT
Sry für den Doppelpost, aber: "Each record ends with a CHKSUM field that contains the ASCII hexadecimal representation of the two's complement of the 8-bit bytes that result from converting each pair of ASCII hexadecimal digits to one byte of binary, from and including the RECLEN field to and including the last byte of the INFO/DATA field. Therefore, the sum of all the ASCII pairs in a record after converting to binary, from the RECLEN field to and including the CHKSUM field, is zero." Intel Hexadecimal Object File Format Specification Revision A, 1/6/88
Hallo, danke für die Aufklärung, das werde ich direkt mal an ein paar Beispielen testen. Gruß Schorschi
Hallo, für das Beispiel sceint es zupassen, leider nicht zu dem AVR Eepromfile :10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"FF" = 4097 = 1001h = 01h = b00000001 = 11111110 +1 = 11111111 = FF = ja geht :10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"EF" =4107 = 100Bh = 0Bh = b00000011 = 11111100 +1 = 11111101 = FD = falsch :10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF =4117 = 1015h = 15h = 00010101 = 11101010 +1 = 11101011 = EB = falsch Ja scheint doch nicht so einfach wie ich dachte. Dann ist da doch eine andere Prüfsummenermittlung drüber gestülpt. Gibt es noch eine andere Möglichkeit, oder habe ich einen Fehler gemacht. Gruß Schorschi
>:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"EF" >=4107 = 100Bh = 0Bh = b00000011 = 11111100 +1 = 11111101 = FD = falsch Quark;) Das geht viel einfacher als du denkst. Nimm eine 8 Bit Variable zum addieren der Werte. Alles was überläuft ist egal! Um das ein bisschen abzukürzen: erster Zwischenwert 0x10 + 0x01 + 0x10 + 0x00 = 0x21 Jedes 0xFF was addiert wird bedeutet schlicht -1 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF Das sind 16 Stück. Du addierst in deinem Algo nacher die 0xFF aber einfach. 0x21 - 16 = 17 = 0x11 Not 0x11 = 0xEE 0xEE + 1 = 0xEF passt.
Hallo, ich habe auch mal daran rumgetüftel, bis mir an meinem Editor aufgefallen ist, der kann das viel besser! Notepad++ nur den Inhalt schreiben und speichern als 16bit Intel Hex... fertig. Ansonsten haben StorkBOT und Wikipedia natürlich recht. Grüße aus Berlin
Hallo, so jetzt hab ichs geschnalt. hex 10 2 80 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF dez 16 2 128 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 :10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E dez Hex Hex dez <-> plus 1 Hex 4226 1082 82 130 125 126 = 7E Jetzt gehts jedesmal, danke für die Initialzündung Gruß Schorschi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.