Hallo zusammen, ich hoffe, Ihr könnt mir bei einem dringenden problem helfen. Ich möchte einen Bootloader für den ATMega 1281 in C programmieren. Da ich das ganze so gestalten möchte, dass er die zu flashende Applikation über ein Programm wie TeraTerm bezieht, kam mir der bereits existierende Bootloader XNUTBOOT wie gelegen (siehe hierzu: Beitrag "Re: AVR Bootloader selber schreiben, suche Infos..."). Ich habe ihn zunächst für meinen 1281 angepasst und folgendes verändert (siehe Anhang): - den Baudratenfaktor auf 25 gestellt (19.2kBaud bei 8MHz Clock) - die intern verwendeten Funktionen inb() und outb() ersetzt, da ich die "could not find reference to..." - Fehlermeldungen nicht beseitigen konnte, da ich nicht wusste, welche auf welche Headerfiles dafür zurückgegriffen werden muss. Zumal habe ich gelesen, dass Abfragen, ob ein bestimmtes Bit in einem Register gesetzt ist nun anders gemacht wird: also: beispielsweise: while (!(UCSR0A & (1<<UDRE0))) statt while ((inb(UCSR0A) & _BV(UDRE)) == 0) Nach diesen Ändeurngen brachte mir der GCC auch keine Fehlermeldungen beim Kompilieren. Bootloader aufgespielt und eine Applikation als Hexfile (entsprechendes .bin file brach beim Übertragungsversuch übrigens vor 100% ab...?!) mit Teraterm per XMODEM übertragen (dabei auf Baudrate geachtet). Die übertragene App ist lediglich ein Test mit einem 16Bit-counter (siehe Anhang, LEDs blingen im Sekundenabstand).Wenn ich nun den Flash auslese, dann steht zwar eine neue Applikation an der gewünschten Stelle, jedoch nur "Käse". Statt wie im Hexfile der Applikation zu sehen: :100000000C9466000C9485000C9485000C9485007B :100010000C9485000C9485000C9485000C9485004C :100020000C9485000C9485000C9485000C9485003C :100030000C9485000C9485000C9485000C9485002C :100040000C9485000C9485000C9485000C9485001C :100050000C9485000C9485000C9485000C9485000C :100060000C9485000C9485000C9485000C948500FC :100070000C9485000C9485000C9485000C948500EC :100080000C9485000C94AA000C9485000C948500B7 ... ... lauten die ersten Zeilen des Flash_Hexdumps: :100000003A313030303030303030433934363630B9 :100010003030433934383530303043393438353086 :1000200030304339343835303037420D0A3A3130C8 :10003000303031303030304339343835303030437F :100040003934383530303043393438353030304356 :1000500039343835303034430D0A3A3130303032AB :10006000303030304339343835303030433934383B :100070003530303043393438353030304339343826 :1000800035303033430D0A3A313030303330303090 ... ... Ich bin den Quellcode schon zig mal durchgegangen und konnte keinen Fehler finden. Man sagt ja immer, wenn beim Übertragen per RS232 nur Mist ankommt, dann liegt es zumeist an einer falschen Baudrate... aber auf die habe ich vor allem geachtet :-( Habt Ihr eine Ahnung, woran die Übertragung gescheitert sein könnte? Den Quelltext der xnutboot habe ich mal angehangen. Vielleicht kann jemand von Euch, der einen 1281 oder einen 128 hat mal probieren, ob er zum gleiche Resultat kommt? ich hoffe auf Eure Unterstützung, vlG Stephan P.S.: ach ja, ich benutze das AVR Studio 4.17 Built 666 mit WinAVR20090313
Hallo zusammen, ich habe eben noch etwas weiter geforscht und habe erkannt, dass das *.bin File zwar im Gegensatz zum *.hex-File nicht 100% übertragen wurde (Abbruch bei ca. 96%), aber hingegen zum Hex-File wurde der Inhalt korrekt übertragen, jedoch nur die erste Seite im Flash: Vergleicht man die Hexfiles des Flashdumps und des Programmcodes (16Bit-Counter) miteinander, dann kann man diesen Unterschied schön sehen: Hex-File des Programms 16Bit-Counter: :100000000C9466000C9485000C9485000C9485007B :100010000C9485000C9485000C9485000C9485004C :100020000C9485000C9485000C9485000C9485003C :100030000C9485000C9485000C9485000C9485002C :100040000C9485000C9485000C9485000C9485001C :100050000C9485000C9485000C9485000C9485000C :100060000C9485000C9485000C9485000C948500FC :100070000C9485000C9485000C9485000C948500EC :100080000C9485000C94AA000C9485000C948500B7 :100090000C9485000C9485000C9485000C948500CC :1000A0000C9485000C9485000C9485000C948500BC :1000B0000C9485000C9485000C9485000C948500AC :1000C0000C9485000C9485000C94850011241FBEAF :1000D000CFEFD1E2DEBFCDBF12E0A0E0B2E0EEE8AC :1000E000F1E000E00BBF02C007900D92A030B10715 :1000F000D9F712E0A0E0B2E001C01D92A130B10733 :10010000E1F70E9487000C94C5000C94000080E089 :1001100090E290939B0080939A008DE080939100F1 :10012000109290008FEF80BB81BB80917100846042 :1001300080937100789441E050E021B380910002F7 :10014000BA0102C0660F771F8A95E2F72623209531 :1001500021BBF3CF1F920F920FB60F9211248F93F2 :10016000809100028F5F80930002809100028830AE :1001700010F01092000210929500109294008F914E :0E0180000F900FBE0F901F901895F894FFCFB0 :00000001FF Hex-Dump des Flashs (Auszug): :100000000C9466000C9485000C9485000C9485007B :100010000C9485000C9485000C9485000C9485004C :100020000C9485000C9485000C9485000C9485003C :100030000C9485000C9485000C9485000C9485002C :100040000C9485000C9485000C9485000C9485001C :100050000C9485000C9485000C9485000C9485000C :100060000C9485000C9485000C9485000C948500FC :100070000C9485000C9485000C9485000C948500EC :100080000C9485000C94AA000C9485000C948500B7 :100090000C9485000C9485000C9485000C948500CC :1000A0000C9485000C9485000C9485000C948500BC :1000B0000C9485000C9485000C9485000C948500AC :1000C0000C9485000C9485000C94850011241FBEAF :1000D000CFEFD1E2DEBFCDBF12E0A0E0B2E0EEE8AC :1000E000F1E000E00BBF02C007900D92A030B10715 :1000F000D9F712E0A0E0B2E001C01D92A130B10733 :10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF :10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF :10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF :10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF :10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF :10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF :10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F :10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F :10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F :10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F Jetzt muss ich noch Herausbekommen, warum nur die erste Seite geschrieben wird. Aber ich denke, dass ich der Sache schon ein ganzes Stück näher gekommen bin.... Dennoch bin ich über jeden weiteren Hinweis dankbar. Schönes WE noch, vlG Stephan
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.