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?
Wer Datenblätter lesen kann oder mal TI besucht wird da schnell fündig... Und tschüss...
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?
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...
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.
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.
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.
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...
habe
1 | #pragnma locattion=0x8000
|
probiert, aber nichts ist passiert...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.