www.mikrocontroller.net

Forum: Compiler & IDEs Probleme mit Bootloader


Autor: SkySurfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich verwenden den foodloader von lochraster.org auf einem m644p.
Bootloader funktioniert soweit bis ich mit AVR Dude etwas darauf 
übertragen will. Dann kommt irgendwann beim Übertragen ein Timeout.

Habe das ganze auf uart_getc Funktion eingrenzen können:
static noinline uint8_t uart_getc(void)
    /* wait if a byte has been received */
    while (!(_UCSRA_UART0 & _BV(_RXC_UART0)));
    /* return received byte */
    return _UDR_UART0;
}

Es scheint als würde die Funktion Zeichen verpassen und ewig auf weitere 
warte obwohl AVRdude bereits alle Daten des Blocks übertragen hat.

Da es soweit funktioniert dürfen alle Probleme der die auf der 
Checkliste behandelt wurden nicht zutreffen.

Was kann ich machen?

Gruß SkySurfer

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SkySurfer schrieb:

> Da es soweit funktioniert dürfen alle Probleme der die auf der
> Checkliste behandelt wurden nicht zutreffen.

Mir ist diese Schlussfolgerung nicht so klar wie dir. Ich würde von 
einer fehlerfreien UART-Übertragung soft- und hardwareseitig ausgehen, 
wenn ein Nicht-Bootloaderprogramm größere Datenmengen fehlerfrei senden 
und empfangen kann.

> ich verwenden den foodloader von lochraster.org auf einem m644p.
> Bootloader funktioniert soweit bis ich mit AVR Dude etwas darauf
> übertragen will. Dann kommt irgendwann beim Übertragen ein Timeout.
>
> Es scheint als würde die Funktion Zeichen verpassen und ewig auf weitere
> warte obwohl AVRdude bereits alle Daten des Blocks übertragen hat.

Die gezeigte Funktion ist dafür IMHO nicht verantwortlich. Diese 
Funktion ist nur "ausführendes Organ" und bekommt von ihrem Cheffe den 
Auftrag, auf das nächste Zeichen zu warten. Wieso meint der Cheffe, also 
die aufrufende Funktion, dass noch Zeichen kommen? Dieser Frage solltest 
du nachgehen.

Autor: Pit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Liste,

zuerstmal vielen Dank für die Programmierung des Foodloaders, den ich 
auf dem Etherrape-Board mit Erfolg verwende (War beim Kauf schon drauf).
Neuerdings besitze ich ein Pollin AVR-NetIO, auf dem ein AtMega32 sitzt. 
Für den habe ich den Foodloader auch kompiliert und per ISP aufgespielt. 
Er meldet sich einwandfrei und reagiert auch auf die Kommandos, die ich 
per RS232 und minicom an ihn sende. Einzig beim Aufspielen einer neuen 
Firmware mit avrdude zickt er: Read und Erase funktionieren, aber beim 
anschliessenden Write (der Fortschrittsbalken ist schon da, bleibt aber 
bei 0% stehen) kommt die Fehlermeldung, dass der Foodloader sich nicht 
mehr meldet.
Das klingt genauso, wie oben. Hat irgendjemand dieses Problem inzwischen 
gelöst?

Mit freundlichen Grüßen

P. Hartmann

P.S: anbei meine config.mk und die avrdude kommandos.


config.mk:
SERIAL_DEV=/dev/ttyS0
ISP_DEV=/dev/ttyS0
ISP_PROG=avr109
AVRDUDE_BAUDRATE=115200
MCU=atmega32
F_CPU=16000000
DEBUG=1
CFLAGS += -DBOOTLOADER_DDR=DDRB
CFLAGS += -DBOOTLOADER_PORT=PORTB
CFLAGS += -DBOOTLOADER_PIN=PINB
CFLAGS += -DBOOTLOADER_PINNUM=PINB1
CFLAGS += -DSEND_BOOT_MESSAGE=1
CFLAGS += -DBOOTLOADER_JUMPER=1
CFLAGS += -DBOOTLOADER_CHAR=1

avrdude kommandos:
avrdude -v -p m32 -c ponyser -P /dev/ttyS0 -U lfuse:w:0xef:m  -U 
hfuse:w:0xdc:m -U lock:w:0x2f:m
avrdude -v -p m32 -c ponyser -b 115200 -P /dev/ttyS0 -U 
flash:w:foodloader.hex

Autor: SkySurfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beheben konnte ich den Fehler leider noch nicht aber wenn du die 
Programmiergeschwindigkeit auf 38400 runter drehst tritt er zumindest 
bei mir wesentlich seltener auf.
Was irgendwie für ein Timingproblem spricht.

Habe meinen Code im Github unter: 
http://github.com/NeoBelerophon/foodloader reingestellt falls noch 
jemand experimentieren will.

Sollte ich noch eine bessere Lösung finden werde ich sie dort 
veröffentlichen.

Autor: Pit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo SkySurfer,

vielen dank für die Antwort. Was mich wundert ist, dass der foodloader 
auf meinem Etherrape board überhaup keine Probleme macht.
Ich glaube ich werde den Avr-NetIO heute abend mal mit einem AtMega644 
bestücken und die ganze Sache damit probieren...

Gruß

Pit

Autor: Pit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo SkySurfer,

also einen 644 habe ich jetzt doch nicht eingebaut. Habe aber beim Lesen 
zum Thema Umbau gefunden, dass die serielle Schnittstelle (im Gegensatz 
zur ISP) beim NetIO noch niemals bei 115 kbaud funktioniert hat. Dein 
Tipp war also goldrichtig.
Habe dann die Baudrate des foodloaders durch einen anderen Teiler in der 
uart.h des foodloaders sogar auf 19200 baud runtergesetzt (30k brauchen 
18 sec.). Das hat bis jetzt einwandfrei funktioniert!

Dankst!

Pit

Autor: Pit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf einen Tipp von A. Neumann hin habe ich mal ins Datenblatt des 
AtMega32 geguckt (macht man ja immer zuletzt ;-) und siehe da: der 
AtMega32 selbst macht bei 16 MHz und 115.2 kB einen Baudratenfehler von 
mindestens 2.1%, bei ungeeigneter Einstellung (U2X=1) sogar 3.5%.
Eine Baudrate von 38.4 kB ist wohl am geeignetsten, da der Fehler dort 
lt. Datenblatt nur 0.2% beträgt. 57.6 könnte mit U2X=1 auch noch 
funktionieren (Fehler 0.8%).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man nimmt ja auch üblicher Weise Standardquarze wie 11,0592 oder 
14,7456MHz.


Peter

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.