Forum: Mikrocontroller und Digitale Elektronik MSP430 Bootloader via RS232 (UART 0)


von Heiner69 (Gast)


Lesenswert?

Hallo Zusammen,

möchte gerne einen Bootloader für den MSP430F1611 in C schreiben und 
müßte dazu wissen wie man ein Programm an eine bestimmte Stelle im 
FlashRom bzw. RAM positioniert und dann ausführt. Am besten im Flash 
selbst, da nach einem Stromausfall während des Flashens die Prozedur 
weitergehen soll. Kann mir da jemand helfen? (Die Links in den älteren 
Posts funktionieren nicht mehr bzw. enthalten nur kaum Information.)

Arbeiten die Routinen zum Löschen bzw. Schreiben des Flash nur über den 
eingebauten BSL?

von Coder (Gast)


Lesenswert?

Wer Datenblätter lesen kann oder mal TI besucht wird da schnell 
fündig...

Und tschüss...

von Der Diplomat (Gast)


Lesenswert?

Coder schrieb:
> Wer Datenblätter lesen kann oder mal TI besucht wird da schnell
> fündig...
>
> Und tschüss...

Ich kann zwar dem Fragesteller leider keine Unterstützung zu diesem 
Thema geben, aber ich frage mich: Warum wird eigentlich immer gleich 
unfreundlich zurückgekeift und mit dem Datenblatt rumgewedelt?

von Coder (Gast)


Lesenswert?

Wenn man wissen möchte, wie etwas funktioniert, muss man es zwangsläufig 
selber nachlesen. Niemand programmiert Dir eine Lösung. Es ist 
vollkommen in Ordnung, wenn man etwas nicht versteht.

Aber zuerst gilt "READ THE F* MANUAL" oder mal selber "googeln".

PS:
Hatte ich auch mal machen müssen...man kann sich bei TI auch Beispiele 
runterladen. Gibt es deren Foren. Also macht euch doch bitte selber erst 
mal die Mühe und investiert selbst ein paar Minuten...

von Christian R. (supachris)


Lesenswert?

Hm, nach dem Stromausfall während des Flashens startet der µC wieder 
beim normalen Startpunkt, da geht nix weiter. Da müsstest du schon im 
Flash irgendwo was speichern, dass gerade ein Update im Gange ist, und 
nach erfolgreichem Flashen das wieder löschen. Ansonsten gibts bei TI in 
den Code-Samples immer ein Flash-Demo, das zeigt, wie man was in den 
Flash schreibt. Aber wieso nutzt du nicht den schon in jedem MSP430 
eingebauten Bootloader (BSL)? Der ist fail-save und geht auch bei 
beschädigtem Flash-Inhalt. Du kannst die TX/RX Leitungen der USART auch 
parallel an TA 1.1 und TA 2.2 klemmen, und die Timer Pins auch im 
normalen Programm anderweitig verwenden. Wichtig ist nur, dass an der 
UART auch RTS und DRT angeschlossen ist.

von Heiner69 (Gast)


Lesenswert?

Vielen Dank für die Reaktionen.

Coder schrieb:
> Wer Datenblätter lesen kann oder mal TI besucht wird da schnell
> fündig...
>
> Und tschüss...

Die Datenblätter kenn' ich bereits und gegoogelt hab' ich auch schon 
einiges, aber bisher keine befriedigende Antwort auf meine Fargen 
erhalten - deshalb der Post in diesem Forum. Vielleicht bin ich auch 
einfach zu blöd, die Datenblätter (u.a. slaa89, slaa96b und slaa96d) zu 
verstehen. Und die Links, die in dem bereits vorhandenen Thread aus 
diesem Forum (ist von 2006) angegeben sind funktionieren alle nicht 
mehr...

Manchmal hilft es auch einfach, wenn einem jemand anderes etwas erklärt, 
der schon weiß wie's geht (praktische Erfahrung!) und den man direkt 
fragen kann anstatt die Antworten aus hunderten Seiten schwer 
verständlicher Dokumentation zu destilieren. Außerdem kommt es nicht 
selten vor, das in Dokus nicht alles drin steht oder das Dinge anders 
funktionieren als angegeben!

>
> Ich kann zwar dem Fragesteller leider keine Unterstützung zu diesem
> Thema geben, aber ich frage mich: Warum wird eigentlich immer gleich
> unfreundlich zurückgekeift und mit dem Datenblatt rumgewedelt?

Danke für die freundliche Unterstützung!

Zum Inhalt:
Den eingebauten BSL kann ich nicht verwenden weil der Bootloadre auf 
einer bereits vorhandnen Hardware laufen soll und alle PINs bereits 
belegt sind. Und der UART 0 wird ohne Hardware-Handshake betrieben! Also 
muss ich eine eigene Software schreiben.

von Christian R. (supachris)


Lesenswert?

Ich hab sowas ausgehend vom Flash-Demo in den Beispielcodes per Funk 
gemacht. Allerdings mit externem RAM. Der Bootloader ist eigentlich nur 
ein kleines Stück Code, der das neue Flash-Image aus dem externen RAM in 
den Flash schreibt. Die Haupt-Applikation bekommt die Daten paketweise 
vom Host, schreibt sie ins externe RAM, liest sie zurück und sendet 
jedes Paket zurück an den Host, als Kontrolle, dass es korrekt 
angekommen ist. Kann man natürlich auch mit CRC oder sonstwie machen. 
Wenn alles korrekt angekommen ist, werden alle Interrupts deaktiviert 
und der Bootlader angesprungen, der dann das Image in den Flash 
schreibt, sektor für Sektor, weil ein Mass-Erase ja den Bootloader 
überschreiben würde. Da könnte man natürlich bei genügend RAM auch den 
Loader ins RAM kopieren und von da aus starten. Geht aber auch mit einer 
eigenen Section, die man per Linker-Script deklariert. Der Teil des 
Flashes wird beim Update nicht überschrieben.

von Heiner69 (Gast)


Lesenswert?

Christian R. schrieb:
> Geht aber auch mit einer
> eigenen Section, die man per Linker-Script deklariert. Der Teil des
> Flashes wird beim Update nicht überschrieben.

Vielen Dank für den Hinweis. Werde auch noch mal nach den Beispielcodes 
suchen - mal sehen. Aber meine Vorstellung ist auch, dass der Teil mit 
dem Bootloader stehen bleibt und nur der Rest überschrieben wird. By the 
way: Wie geht das genau mit dem Linker-Script? Ich verwende den Code 
Composer Essentials von TI und habe noch nie ein Linkerscript 
verwendet...

von xmu (Gast)


Lesenswert?

habe
1
#pragnma locattion=0x8000
probiert, aber nichts ist passiert...

von Roland H. (batchman)


Lesenswert?

xmu schrieb:
> #pragnma locattion=0x8000

Da sind vermutlich zwei Tippfehler drin

von Heiner69 (Gast)


Lesenswert?

Roland H. schrieb:
> xmu schrieb:
>> #pragnma locattion=0x8000
>
> Da sind vermutlich zwei Tippfehler drin

stimmt, aber auch korrekt geschrieben bringt es nichts!
1
#pragma location=0xD000

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.