Forum: Mikrocontroller und Digitale Elektronik MSP430 Bootloader unbeabsichtigt


von !TIler (Gast)


Lesenswert?

Hallo TI-Freunde,

wir haben hunderte Geräte mit MSP430F5438, jeweils mehrere Platinen in 
schuhkarton-großem Gehäuse, vergossen, Schaltplan/Layout/Software liegen 
vor.

Die Geräte starten manchmal nach kurzem Spannungseinbruch nicht mehr. 
Anscheinend gibt es bei einem kurzen Spannungsreset noch Pegelwechsel 
auf der TEST-Leitung, die damit den internen Bootloader aktivieren. 
Der TEST-Pin läuft ohne Kontakt mit Bauteilen durch das ganze Gerät.

Wir haben 0 Erfahrung mit MSPs. Und auch nur wenige, aufgepopelte HW. 
Der Hersteller ist nicht mehr greifbar. Daher folgende Fragen:

1) Ist meine Vermutung plausibel? Die Quartze schwingen im Fehlerfall 
nicht. Vermutlich koppelt ein LF- oder HF-Teil im Gerät auf die 
TEST-Leitung.

2) kommt der Bootloader bei erneutem, kurzem Reset (WDT-Baustein, 200ms) 
nicht aus dem Bootloader-Modus heraus?

3) Falls Bootloader: könnte man per Config-Bits oder Runtime-Config 
irgendwas tun,  (Reset-Pin oder TEST-Pin) um bei echtem 
Spannungseinbruch die "Sensitivität" des TEST-Pins zu reduzieren?

Herzliche Grüße

(k)ein TIler

Alles weg und neu ist leider keine Alternative :-(
Die Karre ist im Dreck, zum Glück bin ich nicht Schuld :-)

Warum die Leitung da durchgeht, ...????

von 50c (Gast)


Lesenswert?

1) 42
2) 42
3) 42

von Gerd E. (robberknight)


Lesenswert?

!TIler schrieb:
> Die Geräte starten manchmal nach kurzem Spannungseinbruch nicht mehr.

und dann?

Starten die danach, wenn Du sie für ein paar Minuten komplett stromlos 
gemacht hast, wieder?

Oder sind sie dauerhaft kaputt und Du hast es noch nicht geschafft eines 
wiederzubeleben?

von Clemens L. (c_l)


Lesenswert?

!TIler schrieb:
> MSP430F5438

F5438 oder F5438A?

> Die Quartze schwingen im Fehlerfall nicht.

Der BSL initialisiert sie nicht.

> Anscheinend gibt es bei einem kurzen Spannungsreset noch Pegelwechsel
> auf der TEST-Leitung, die damit den internen Bootloader aktivieren.
>
> Ist meine Vermutung plausibel?

Könnte sein. Der BSL kann entweder durch die Entry Sequence oder 
explizit durch Software gestart werden. Ich vermute mal, dass letzteres 
nicht passiert.

SLAU319 sagt:
> The BSL program execution starts when the TEST pin has received a minimum
> of two positive transitions and if TEST is high while RST/NMI rises from
> low to high (BSL entry method, see Figure 2). This level transition
> triggering improves BSL start-up reliability. The first high level of the
> TEST pin must be at least tSBW,En (see device-specific data sheet for
> tSBW,En parameter).

!TIler schrieb:
> kommt der Bootloader bei erneutem, kurzem Reset (WDT-Baustein, 200ms)
> nicht aus dem Bootloader-Modus heraus?

Ein normaler Reset (TEST low währed der steigenden Flanke von RST) 
sollte ihn beenden.

> könnte man per Config-Bits oder Runtime-Config irgendwas tun

Wenn deine Software schon läuft, dann verhindert RST als NMI 
konfiguriert, dass der BSL gestartet wird.

Brauchst du den BSL überhaupt? Wenn nicht, kannst du ihn löschen (siehe 
SLAA450; Adresse 17F4 genügt).

> um bei echtem Spannungseinbruch die "Sensitivität" des TEST-Pins zu
> reduzieren?

Du könntest deine eigene BSL Protect Function (siehe SLAA450) 
installieren, die zusätzliche Prüfungen durchführt.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

!TIler schrieb:
> die damit den internen Bootloader aktivieren.

Woran erkennst Du das?

> Der TEST-Pin läuft ohne Kontakt mit Bauteilen durch das ganze Gerät.

Soll das heißen, das da 'ne lange Leiterbahn als Antenne dranhängt?

von wv (Gast)


Lesenswert?

man könte auch den Test-Pin auf Masse legen
--wv

von !TIler (Gast)


Lesenswert?

Vielen Dank für die Hilfe.

Gerd E. schrieb:
> Starten die danach, wenn Du sie für ein paar Minuten komplett stromlos
> gemacht hast, wieder?

Es reichen ein paar Sekunden stromlos, dann laufen sie wieder.

Clemens L. schrieb:
> Ein normaler Reset (TEST low währed der steigenden Flanke von RST)
> sollte ihn beenden.

Das passiert leider nicht (bei 200ms). Hat da jemand Erfahrung, ob das 
so sein soll? Ein externer WDT zieht /RST alle 3s für 200ms auf low, 
ohne dass der µC wieder aufstartet. Auch, nachdem ich den Bootloader 
manuell starte (per wackeln am TEST-Pin während Reset). Ich weiss leider 
nicht, ob der Geräte-Hersteller nicht auch den TI-Bootloader schon 
überbügelt hat.

Clemens L. schrieb:
> Wenn nicht, kannst du ihn löschen (siehe
> SLAA450; Adresse 17F4 genügt).

wie gesagt, ich müsste die MSP-Welt extra dafür betreten, daher die 
dumme Frage:
- geht das aus einer laufenden Applikation heraus? Es gibt einen 
speziellen Bootloader des Geräte-Herstellers, der zu Anfang ein paar 
Sekunden aktiv ist. Darüber können wir neue (geänderte) Applikation 
laden.

Einen anderen Zugang (über JTAG oder originalem Bootloader) haben wir 
nicht (Verguss, versiegelt, ...).

Mein Problem: Wenn ich das ganze Faß der Programmierung aufmache 
(ISR-Compiler kaufen, Einarbeitung, Datenblätter wälzen, Code verstehen, 
Programmierung, ...) dann sollte Erfolg zumindest möglich sein, und 
nicht auf Seite 42: Dieses Config-Bit können sie nur per JTAG-Programmer 
manipulieren (oder so).


Rufus Τ. F. schrieb:
> Woran erkennst Du das?

Nur die Vermutung, da die Pins, die ich messen kann, sich genauso 
verhalten, wenn ich den Bootloader manuell aktiviere

Rufus Τ. F. schrieb:
> Soll das heißen, das da 'ne lange Leiterbahn als Antenne dranhängt
Naja, sind Quasi zusammengesteckte "Module" des Herstellers. Und TEST 
geht über 2 Module von Stecker zu Stecker, ohne Aufgabe.

wv schrieb:
> man könte auch den Test-Pin auf Masse legen

Ja. Leider nur zum Ausprobieren oder für künftige Geräte, falls es das 
ist.

Wir haben hier leider nur ein paar Geräte, und der Fehler kommt nur 
selten vor. Jede Modifikation braucht dann stundenlange Tests, meist mit 
typischen Ergebnisen wie: Wenn wir das Gerät auf den Kopf stellen, dann 
stürzt es nicht mehr ab! Ne, wirklich, ich schwör!

von !TIler (Gast)


Lesenswert?

Clemens L. schrieb:
> F5438 oder F5438A?

Bei allen Geräten hier ist F5438 verbaut (ohne A). Rev L.

Leider weiss ich nicht, ob es im Feld auch welche mit A gibt.

von Clemens L. (c_l)


Lesenswert?

!TIler schrieb:
> Es gibt einen speziellen Bootloader des Geräte-Herstellers, der zu Anfang
> ein paar Sekunden aktiv ist. Darüber können wir neue (geänderte)
> Applikation laden.

Ersetzt der den TI-BSL, oder ist der Teil der normalen Firmware?

Wie sicher bist du, dass der BSL in deinem Fall überhaupt aktiviert 
wurde?

!TIler schrieb:
> sollte Erfolg zumindest möglich sein, und nicht auf Seite 42: Dieses
> Config-Bit können sie nur per JTAG-Programmer manipulieren (oder so).

Wie gesagt, 0 nach 17F4 schreiben (oder BSL-Flash komplett löschen) 
deaktiviert den BSL. Allerdings ist der BSL-Flash natürlich extra 
schreibgeschützt; du musst vorher das SYSBSLPE-Bit im SYSBSLC-Register 
löschen. (Kann dieser spezielle Bootloader das überhaupt?)

: Bearbeitet durch User
von !TIler (Gast)


Lesenswert?

Clemens L. schrieb:
> oder ist der Teil der normalen Firmware?

Teil der normalen Firmware, der nach einem "normalen" Reset losläuft und 
es u.a. erlaubt, ein weiteres Programm (bei uns Applikation genannt) per 
speziellem Protokoll einzuladen.

Der BSL sollte eigentlich nie aktiv werden. Und wenn er aktiv wird 
(manuell getriggert), dann steht die ganze Kiste (das eigentliche 
Problem).

Clemens L. schrieb:
> Wie gesagt, 0 nach 17F4 schreiben (oder BSL-Flash komplett löschen)
> deaktiviert den BSL. Allerdings ist der BSL-Flash natürlich extra
> schreibgeschützt; du musst vorher das SYSBSLPE-Bit im SYSBSLC-Register
> löschen. (Kann dieser spezielle Bootloader das überhaupt?)

Dann jetzt die Ultimative, Hands on Frage:

Kann ich (*) von einer Applikation, die ich irgendwie ins Flash bekomme 
und starten kann, diese 0 nach 17F4 schreiben, und vorher SYSBSLPE 
löschen?

Oder brauche ich dafür weitere HW-Signale, eine Programmierspannung, 
JTAG oder irgendwas anderes?


Gruß
Achim

(*) Nach kauf von Compiler, Wochenlanger Einarbeitung in TI, MSP, 
Toolchain und Quellcode, Eval-Boards-Hello World, ....

von Clemens L. (c_l)


Lesenswert?

!TIler schrieb:
> Kann ich (*) von einer Applikation, die ich irgendwie ins Flash bekomme
> und starten kann, diese 0 nach 17F4 schreiben, und vorher SYSBSLPE
> löschen?

Ja:
1
void mein_kleiner_BSL_Killer(void)
2
{
3
    WDTCTL = WDTPW + WDTHOLD;
4
5
    SYSBSLC &= ~SYSBSLPE;
6
    FCTL3 = FWPW;
7
8
    FCTL1 = FWPW+WRT;
9
    *(int *)0x17f4 = 0;
10
    FCTL1 = FWPW;
11
12
    FCTL3 = FWPW+LOCK;
13
    SYSBSLC |= SYSBSLPE;
14
15
    ...
16
}

Oh, das Datenblatt des MSP430F5438 sagt:
> The BSL area contains a Texas Instruments provided BSL and cannot be
> modified.
Allerdings sagt SLAU319, dass das eine Einschränkung des BSL selbst ist, 
und dass Löschen möglich ist. Es sollte also auf jeden Fall 
funktionieren, wenn du WRT durch ERASE ersetzt.

: Bearbeitet durch User
von !TIler (Gast)


Lesenswert?

Clemens L. schrieb:
> Ja:

Super, Danke Dir Clemens.

Ich melde mich wieder, wenn ich deren Code soweit verstanden habe (und 
es im Startup halt mache, falls noch nicht geschen) und den Compiler 
installiert und ... und ... und.

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.