Forum: Mikrocontroller und Digitale Elektronik MSP430 TelosB Unknown header 0x00


von Florian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin noch recht neu in der Mikrocontroller-Programmierung und 
bräuchte ein wenig Hilfe mit einem Problem, das ich absolut nicht 
einordnen kann:

Ich arbeite mit einem TelosB, auf dem ein MSP430F1611 verbaut ist, und 
dem MSPGCC. Zum Flashen meiner Programme verwende ich tos-bsl (eine 
Abwandlung des msp430-bsl Bootstrap Loaders für TelosB Motes aus der 
TinyOS-Toolchain).

Als ich ein UART-Testprogramm (von mathar.com, s. Anhang), dessen 
Interruptroutinen ich auf den MSPGCC angepasst habe, ausprobieren 
wollte, erhielt ich folgende Ausgabe:

<snip>

D:\Code\ITM\telosb\InterruptTest>make
msp430-gcc -Os -mmcu=msp430x1611 -c InterruptTest.c -o InterruptTest.elf
msp430-objcopy -O ihex InterruptTest.elf InterruptTest.ihex
tos-bsl --telosb -c 5 -r -e -I -p InterruptTest.ihex
MSP430 Bootstrap Loader Version: 1.39-telos-8
Mass Erase...
Transmit default password ...
Invoking BSL...
Transmit default password ...
Current bootstrap loader version: 1.61 (Device ID: f16c)
Changing baudrate to 38400 ...
Program ...

An error occoured:
Unknown header 0x00
Are you downloading to RAM into an old device that requires the patch? 
Try optio
n -U
make: *** [InterruptTest.ihex] Error 1

</snip>

Das Auftauchen dieses Problems ist scheinbar willkürlich, denn für 
unterschiedliche mit dem MSPGCC kompilierbare (!) Programme tritt der 
Fehler manchmal auf und manchmal nicht. Wichtig hierbei ist, dass der 
Fehler reproduzierbar bleibt, sich ein und dasselbe Programm also 
entweder immer flashen lässt oder aber nie.
Es gab auch den Fall, dass sich ein Programm flashen ließ, in dem die 
Anweisung P1DIR |= 0x01; vorkam. Verdoppelte man diese Anweisung jedoch 
(führte also einen syntaktischen, aber keinen semantischen Unterschied 
herbei), ließ sich das Programm nicht mehr flashen und hatte wieder den 
o.g. Fehler zur Folge.

Mir fehlt wirklich jeglicher Ansatz, um dem Ursprung des Problems auf 
die Schliche zu kommen. Hoffentlich seid ihr da kreativer.

Vielen Dank für Eure Ideen!

Beste Grüße,
Florian

von Christian R. (supachris)


Lesenswert?

Also da sind mehrere Fehler im Quelltext, du müsstest mindestens eine 
Warnung bekommen. Was passiert wohl, nachdem der 1. Interrupt 
eingetreten ist? Rrrungs, und der µC landet im Nirvana. Desweiteren hast 
du eventuell RX-Int und TX-Int verwechselt, geht aus den Kommentaren 
nicht eindeutig hervor. Und die Meldung, dass er versucht 38400 Baud zu 
machen, heißt nix gutes. Ich hab das nie hinbekommen, geht nur mit 9600. 
Irgendwie scheints da Inkompatibilitäten zu geben.

von Florian (Gast)


Lesenswert?

Hallo Christian,

wie gesagt habe ich den Quelltext nur kopiert, um mal auszuprobieren, 
wie die Kommunikation per Terminal und UART überhaupt abläuft. Warnungen 
gibt der MSPGCC nicht aus, das Programm wird fehlerlos übersetzt.

Mein Problem ist wie beschrieben (noch) nicht die Programmierung, 
sondern das Flashen. Und: Da es Fälle gibt, in denen das Flashen 
problemlos funktioniert, würde ich mich wundern, wenn die Ursache die 
Baudrate wäre. Wie sollte das mit der geschilderten Fehlermeldung 
zusammenpassen?

Ich freue mich über jegliche weitere Gedanken zur Problematik!

Vielen Dank für die Mühe,
Florian

von Christian R. (supachris)


Lesenswert?

Vielleicht stimmt was mit dem Hex-File nicht? Der Header könnte da ja 
aus dem Hex-File sein. Nichts desto trotz wird dein Programm sowieso 
nicht funktionieren.

von Wolfgang-G (Gast)


Lesenswert?

lässt sich denn ein einfaches Programm, z.B. LED blinkt, problemlos 
laden?

von Florian (Gast)


Lesenswert?

@Christian:
Ja, zumindest erwartet tos-bsl offenbar (manchmal) etwas anderes als 
das, was msp430-obj als ihex fabriziert. Derzeit bin ich auf der Suche 
nach ner Application Note o.ä., die beschreibt, wie das Programmformat 
aussehen muss, damit ich von Hand debuggen kann.

@Wolfgang-G:
Eine Blinkanwendung war das erste Programm, das ich ausprobiert habe. 
Das funktionierte anstandslos.

von Florian (Gast)


Lesenswert?

Der Vollständigkeit halber wollte ich nur mitteilen, dass das Problem 
gelöst wurde. Ursache für die Fehlermeldung war ein verkehrt 
geschriebenes Makefile, das eine fehlerhafte ihex-Datei erzeugt hat.

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
Noch kein Account? Hier anmelden.