Hallo zusammen, ich habe eine kurze Frage zum decodieren von Intel-Hex Dateien. :100030000C9447000C947E0B0C9447000C94AE0B70 :100040000C9447000C9447000C9447000C94470014 Hie mal zwei Zeilen. Die ersetn beiden (ohne ':') geben an wieviele Datenbytes übertragen werden, die nächsten vier sind die Adresse, dann kommt der Recordtyp (in der Regel 00, nur die letzte Zeile ist 01). Dann kommen die Datenbytes, und zum schluss die Prüfsumme. Also, ich habe ein Netzwerk aus einigen AVRs, welche in einem Gehäuse verbaut sind. Daher möchte ich nun deinen AVR dazu benutzen um die anderen zu Programmieren. Diese MASTER AVR hat auf einer SD-Karte alle Sources der anderen AVRs. Nun soll ein neues Programm automatisch auf den passenden AVR programmiert werden. So, mein problem nun ist, Die Adresse hab ich: 0030 und 0040 Doch die Daten kommen mir einwenig lang vor: 0C9447000C94 7E0B0C 9447000C94 AE0B und 0C9447000C94 47000C 9447000C94 4700 was (16 Bytes) entspricht. Weiß einer damit was anzufangen? Danke für eure Hilfe. Michael
Michael Leske wrote: > So, mein problem nun ist, > Die Adresse hab ich: 0030 und 0040 > Doch die Daten kommen mir einwenig lang vor: > 0C9447000C94 7E0B0C 9447000C94 AE0B > und > 0C9447000C94 47000C 9447000C94 4700 > was (16 Bytes) entspricht. Ich verstehe nicht ganz, was Du uns mitteilen willst. Passt doch ganz genau. Jede Zeile enthält 16 Bytes, und dementsprechend geht es in der nächsten Zeile mit einer um 16 (10h) höheren Adresse weiter...
>Doch die Daten kommen mir einwenig lang vor: >0C9447000C94 7E0B0C 9447000C94 AE0B ASCII to HEX 0C ist ein Byte 0x0C 94 ist ein Byte 0x94 usw.
Sorry, aber ganz sooo einfach ist der Aufbau des Intel-Hexfiles nun auch nicht... http://www.keil.com/support/docs/1584.htm Das hätte der OP durch simple Eingabe von "intel hexfile" bei google aber auch ganz einfach selbst finden können. Du weisst was eine Suchmaschine ist, oder? Jochen Müller
>aber ganz sooo einfach ist der Aufbau des Intel-Hexfiles nun auch >nicht... Stimmt. Da kommen evtl. auch noch andere Records als 0x00. So richtig lustig wird es wenn die Adressen im HEX File nicht aufsteigend sortiert sind.
Hex2Bin und gut? >Diese MASTER AVR hat auf einer SD-Karte alle Sources der anderen AVRs. >Nun soll ein neues Programm automatisch auf den passenden >AVR programmiert werden. Wie jetzt, kompilieren auch noch?
Auch ich finde es immer wieder lustig, dass man bei gestellten Fragen erst einmal die Frage finden muss... Also das Intel-HEX Format ist im Internet ausführlichst beschrieben und es gibt auch fertige Interpreter dafür, jedefalls habe ich solche in Pascal und C gefunden, als ich mich irgendwann 199x damit mal beschäftigen musste. Kann also kein Problem sein. Einen AVR zu programmieren ist, jedenfalls via SPI, kein Problem, weil zum Einen ATMEL dazu einiges veröffentlich hat, es aber auch einige freie Seriell/USB Programmer gibt, die das Protokoll über einen AVR abhandeln. Hier müsste man also nur die Software nehmen und seinen eigenen Bedürfnissen anpassen. Ich kann nicht genau sagen, ob die PC-Software das iHEX File bereits binär kodiert, oder aber der AVR im Programmer. Wenn das letzterer macht, oder die Chip-interne Programming Engine, dann hat man eigentlich für eine fertige Lösung nur zwei Dinge zu tun: 1) Anpassen der Programmer-Software um nacheinander mehrere AVR zu programmieren, also eigentlich nur anlegen der MOSI an die MISO oder PDI des richtigen Zielprozessors. 2) Aufpeppen der Programmer Software um ein Dateisystem mit SD-Card. Aber... Warum macht man das nicht über einen simplen Bootloader, der das Protokoll versteht, das einem am meisten liegt und das man selber auch gut versteht? Der Vorteil wäre, dass man alle AVRs parallel programmieren könnte, weil ich ja einem AVR Daten zum programmieren schicken kann, wärend der andere gerade mit dem flashen von bereits erhaltenen Daten beschäftigt ist. Manche Leute machen es sich aber auch kompliziert... Gruß, Ulrich
Ich brauche avr-objcopy zum einer intel-hex und einer bin file zum machen. Im binfile is die selber data als im hex , nur im binary format. Siehe hier http://hubbard.engr.scu.edu/embedded/avr/avrgcc_install/avrgcc_install.html http://ccrma.stanford.edu/planetccrma/man/man1/avr-objcopy.1.html mfg Bingo / Dänemark
Mein Problem besteht darin, das die Adressierung in der Hex nicht mit der Adressierung im AVR übereinstimmt. z.B. die ersten 6 zeilen: :100000000C942A000C9447000C9447000C94470071 :100010000C9447000C9447000C9447000C94470044 :100020000C9447000C9447000C9447000C94470034 :100030000C9447000C947E0B0C9447000C94AE0B70 :100040000C9447000C9447000C9447000C94470014 :100050000C94470011241FBECFE5D8E0DEBFCDBF12 ^Hier ist im ATMega 32 die Adresse 0x002A, davor stehen die Sprungadressen für die Interrupts. In der Hex-file ist es aber die Adresse 0x0054 Wie kann ich nun aus der Hex-Datei die richtige Adresse im AVR ermitteln? Oder ist das einfach die Adresse 0x0054 / 2 = 0x002A ??? Ich hoffe die Frage ist nun klar geworden. Gruß Michael
>der ist das einfach die Adresse 0x0054 / 2 = 0x002A ??? Der Flash im Atmel ist WORD-Orientiert. >Adresse 0x002A im Atmel ist im hexfile: 0x0054 (byte)
Michael Leske wrote: > Mein Problem besteht darin, das die Adressierung in der Hex nicht mit > der Adressierung im AVR übereinstimmt. > > z.B. die ersten 6 zeilen: > > :100000000C942A000C9447000C9447000C94470071 > :100010000C9447000C9447000C9447000C94470044 > :100020000C9447000C9447000C9447000C94470034 > :100030000C9447000C947E0B0C9447000C94AE0B70 > :100040000C9447000C9447000C9447000C94470014 > :100050000C94470011241FBECFE5D8E0DEBFCDBF12 > ^Hier ist im ATMega 32 die Adresse 0x002A, > davor stehen die Sprungadressen für die Interrupts. > In der Hex-file ist es aber die Adresse 0x0054 Du weisst hoffentlich, dass bei den AVR das Flash wortweise addresiert wird. Wenn du also die Adresse einer Instruktion aus dem Assemblerprogramm kennst, dann ist das die Adresse eines Wortes. Die Byteadresse ist dann einfach das doppelte. (1 Wort = 2 Byte)
Ich muss Ulrich P. zustimmen: Es ist wirklich verblüffend, wie jemand eine Frage so stellen kann, dass es einen ganzen Tag dauert, bis endlich herauskommt, wo tatsächlich das Problem liegt...
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.