www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bootloader auf Basis des xnutboot Problem


Autor: Stephan W. (stephan-w)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stephan W. (stephan-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.