Forum: Mikrocontroller und Digitale Elektronik MSP430G2955 BSLUpdate Kalibrierungsdaten


von Frank B. (rank_b)


Lesenswert?

Hallo,
ich bin dabei über das BSLDemo2 von TI ein Firmwareupdate über die UART 
zu machen. Soweit funktioniert auch alles, nur das nach einem BSL Update 
auch die Kalibrierungsdaten im Infomemory gelöscht sind. Kann man dies 
irgend wie verhindern?
Die Firmware selber läuft nach dem Update, nur stimmen halt die 
Geschwinddigkeiten nicht mehr.

Danke für eure Hilfe...

von Sven (Gast)


Lesenswert?


von Frank B. (rank_b)


Lesenswert?

Sven schrieb:
> Schau Mal hier: http://www.livediesel.de/?p=615

ok, ich könnte damit zumindest neu kalibrieren.
Bedeutet dies aber, dass bei einem BSL Update immer die 
Kalibrierungsdaten gelöscht werden?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank B. schrieb:
> Bedeutet dies aber, dass bei einem BSL Update immer die
> Kalibrierungsdaten gelöscht werden?

Das sollte nicht der Fall sein, da ist irgendwas kaputt. Die 
Info-Segmente im Flash, in denen die Kalibrierdaten stehen, sollten 
normalerweise nicht beschrieben werden -- das ist schließlich ihr Sinn.

Wenn aber Dein Programm auch Daten für den Adressbereich im Info-Segment 
enthält, dann werden auch die Info-Segmente überschrieben.

Du solltest Dir mal die Datei näher ansehen, die Du dem BSL vorwirfst.

von Frank B. (rank_b)


Lesenswert?

Rufus Τ. F. schrieb:
> Frank B. schrieb:
>> Bedeutet dies aber, dass bei einem BSL Update immer die
>> Kalibrierungsdaten gelöscht werden?
>
> Das sollte nicht der Fall sein, da ist irgendwas kaputt. Die
> Info-Segmente im Flash, in denen die Kalibrierdaten stehen, sollten
> normalerweise nicht beschrieben werden -- das ist schließlich ihr Sinn.
>
> Wenn aber Dein Programm auch Daten für den Adressbereich im Info-Segment
> enthält, dann werden auch die Info-Segmente überschrieben.
>
> Du solltest Dir mal die Datei näher ansehen, die Du dem BSL vorwirfst.

Mein Programm toggelt zum Testen einfach nur ein Pin. Ansonsten steht da 
nichts weiter drin. Die Datei, die ich dem BSL übergebe sieht meiner 
Meinung nach auch ok aus:

@2100
31 40 00 21 B0 12 66 21 B0 12 90 21 B2 40 80 5A
20 01 C2 43 56 00 D2 42 FF 10 57 00 D2 42 FE 10
56 00 32 D2 F2 D0 20 00 53 00 B2 40 42 A5 2A 01
F2 43 22 00 F2 43 21 00 D2 D3 1A 00 D2 D3 19 00
F2 40 30 00 1B 00 F2 D0 80 00 61 00 F2 40 34 00
62 00 C2 43 63 00 E2 42 64 00 D2 C3 61 00 D2 D3
01 00 32 D2 30 41 B2 40 A0 5A 20 01 B0 12 0C 21
F2 D0 80 00 22 00 F2 E0 80 00 21 00 3F 40 3E 0D
3E 40 03 00 3F 53 3E 63 FD 2F F5 3F 30 40 94 21
30 40 8C 21 FF 3F 00 13

@FFE4
96 21

@FFFE
00 21
q

von Sven F. (mr_sven)


Lesenswert?

Hi,
ich bin mir nicht sicher wie der BSL Flasher das macht, ich glaube man 
konnte beeinflussen was er überschreibt.

Da ich mir da auch immer nicht sicher war und ich nix kaputt machen 
wollte bei einem Update habe ich mir die Daten einfach in eine "rom.c" 
geschrieben und mit im Projekt abgelegt.
1
// BSLSKEY
2
#pragma RETAIN(bslskey)
3
#pragma DATA_SECTION(bslskey, ".bslskey")
4
const unsigned short bslskey = 0x0000;
5
6
// Calibration data InfoA
7
#pragma RETAIN(cal_data)
8
#pragma DATA_SECTION(cal_data, ".infoA")
9
const unsigned char cal_data[] = {
10
  0xD4, 0x84, 0xFE, 0x16, 0xFF, 0xFF, 0xFF, 0xFF,
11
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
12
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
13
  0xFF, 0xFF, 0x08, 0x10, 0x00, 0x80, 0x01, 0x00,
14
  0xC9, 0x80, 0xA6, 0x0B, 0xD1, 0x0D, 0xF4, 0x80,
15
  0xFB, 0x06, 0x48, 0x08, 0xFE, 0x08, 0xFF, 0xFF,
16
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x08,
17
  0x80, 0x8F, 0x87, 0x8E, 0x70, 0x8D, 0x22, 0x87
18
};

Gruß Sven

von Frank B. (rank_b)


Lesenswert?

Sven F. schrieb:
> Hi,
> ich bin mir nicht sicher wie der BSL Flasher das macht, ich glaube man
> konnte beeinflussen was er überschreibt.
>

bei dem BSLDemo von TI habe ich jedenfalls noch nicht herausfinden 
können, wie man dies einstellen kann...

> Da ich mir da auch immer nicht sicher war und ich nix kaputt machen
> wollte bei einem Update habe ich mir die Daten einfach in eine "rom.c"
> geschrieben und mit im Projekt abgelegt.
>

Das Problem hierbei ist aber, das in jedem Prozessor ja andere 
Kalibrierungsdaten stehen können. Ich habe hier z.B. mehrere MSP430G2955 
und in jedem steht was anderes (was ja bei den Kalibrierungsdaten auch 
logisch ist). Ich kann diese Daten also nicht einfach in mein Projekt 
mit einbinden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank B. schrieb:
> @2100

Das ist die unterste Adresse des Flash; das Info-Memory liegt zwischen 
0x1000 und 0x10ff.


...

Hmm. Eine Suche nach bsldemo2 und "Information Memory" bringt das hier:
1
When i use the BSLDEMO2.exe to do the FW upgrade the MSP430, all the data in INFO memory are erased to 0XFF,
2
3
below is my command:
4
5
BSLDEMO2.exe -cCOM38 -m1 +aepvrw MSP430G2744.txt
6
7
How to modify the command to avoid erasing the data in INFO memory?


Da scheint also jemand exakt das gleiche Problem zu haben.
1
As mentioned in SLAU319 (http://www.ti.com/lit/pdf/slau319) Section 2.4.4.4, 
2
a Mass Erase erases the entire flash memory including info memory.
3
4
When programming a blank device (i.e. during production), you shouldn't mass 
5
erase the device (or you can unlock it with a blank password). 
6
7
When re-programming a device, you should provide the correct password.


Das Problem scheint also das "mass erase" zu sein, das Du vermutlich 
durchführst.

Lies Dir mal den Rest hiervon durch, vielleicht hilft das ja weiter:

http://e2e.ti.com/support/microcontrollers/msp430/f/166/p/461847/1669611

von Frank B. (rank_b)


Lesenswert?

Rufus Τ. F. schrieb:

>
> Das Problem scheint also das "mass erase" zu sein, das Du vermutlich
> durchführst.
>
> Lies Dir mal den Rest hiervon durch, vielleicht hilft das ja weiter:
>
> http://e2e.ti.com/support/microcontrollers/msp430/f/166/p/461847/1669611

Das mit dem "mass erase" habe ich probiert. Auch ohne den Aufruf von 
"mass erase" und nur beim Übertragen der Firmware sind die Daten weg...

von Max G. (l0wside) Benutzerseite


Lesenswert?

Spricht was dagegen, die Daten vorher aus INFOA auszulesen und dann 
wieder zurückzuschreiben?
Alternativ kannst du auch z.B. auf Python zurückgreifen, siehe hier: 
http://pythonhosted.org/python-msp430-tools/target.html#msp430-bsl-target. 
Oder dir deine Routinen gleich selbst schreiben, so furchtbar 
kompliziert ist das Protokoll ja nicht, und verfusen kann man den MSP430 
ja auch nicht ;)

von Frank B. (rank_b)


Lesenswert?

Max G. schrieb:
> Spricht was dagegen, die Daten vorher aus INFOA auszulesen und dann
> wieder zurückzuschreiben?
OK, hier habe ich vergessen zu erwähnen, dass ich den FT231X von FTDI 
verwende um das Update über eine USB Schittstelle durchführen zu können. 
Der Chip bietet mir eine USB to RS232 Schnittstelle an. Über diese kann 
ich die Kalibrierdaten auf den PC übertragen und das Firmwareupdate 
durchführen. Da dann aber die Kalibrierdaten gelöscht sind, kann ich die 
UART Verbindung zum PC nicht mehr herstellen, da ich ja keine definierte 
Geschwindigkeit mehr auf dem MSP430 habe.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hmm.

Um welches Anwendungsszenario geht es Dir eigentlich? Willst Du mehrere 
Controller irgendwo "im Feld" mit einfachen Mittel mit neuer Software 
ausstatten, oder machst Du das an Deinem 
Arbeitsplatz/Entwicklungsrechner?

von Frank B. (rank_b)


Lesenswert?

Rufus Τ. F. schrieb:
> Hmm.
>
> Um welches Anwendungsszenario geht es Dir eigentlich? Willst Du mehrere
> Controller irgendwo "im Feld" mit einfachen Mittel mit neuer Software
> ausstatten, oder machst Du das an Deinem
> Arbeitsplatz/Entwicklungsrechner?

Ich möchte "im Feld" die Möglichkeit haben, über eine USB Schnittstelle 
ein Firmwareupdate anbieten zu können.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Dann wirst du doch vermutlich eine eigene PC-Software dafür haben. Und 
kannst die Routinen darin selbst schreiben. Das von mir erwähnte 
Python-Skript kannst du ja als Vorlage nehmen.
Mass Erase und Schreiben sind zwei verschiedene Befehle im BSL. Wenn 
beides in einem passiert, wird das PC-seitig veranlasst. Lies dir doch 
einfach mal http://www.ti.com/lit/ug/slau319p/slau319p.pdf durch. Wie 
bringst du den MSP430 denn in den BSL-Mode?

von Frank B. (rank_b)


Lesenswert?

Max G. schrieb:
> Dann wirst du doch vermutlich eine eigene PC-Software dafür haben. Und
> kannst die Routinen darin selbst schreiben. Das von mir erwähnte
> Python-Skript kannst du ja als Vorlage nehmen.
> Mass Erase und Schreiben sind zwei verschiedene Befehle im BSL. Wenn
> beides in einem passiert, wird das PC-seitig veranlasst. Lies dir doch
> einfach mal http://www.ti.com/lit/ug/slau319p/slau319p.pdf durch. Wie
> bringst du den MSP430 denn in den BSL-Mode?

Ich habe mir den Quellcode von BSLDemo als Vorlage genommen und mir mal 
ein eigenes PC Programm geschrieben. Den Befehl für Mass Erase (0x18) 
schicke ich nicht.
Alles andere funktioniert, der MSP geht in den BSL Mode, die Firmware 
wird übertragen. Wird der BSL Mode beendet läuft die Firmware auch 
richtig. Nur die Geschwindigkeit stimmt dann halt nicht mehr, da die 
Kalibrierdaten weg sind.

von Juergen P. (optronik)


Lesenswert?

Kann es sein dass das Device geschützt ist und durch ein 
fehlendes/falsches Passwort ein automatisches Mass Erase ausgeführt wird 
welches auch alle Info-Blöcke mitlöscht?

von MSP430_greenhorn (Gast)


Lesenswert?

Ich denke genau das ist der Punkt.
Laut diverser Datenblätter kommt es bei Nutzung des BSL und Übergabe des 
falschen Passwortes zu einem Automatischen mass erase.

USB Field Firmware Updates on MSP430™ MCUs (Rev. C):
http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slaa452&fileType=pdf&keyMatch=SLAA452C&tisearch=Search-EN-TechDocs

Man könnte das Verhalten bei Eingabe des Falschen Passwortes aber je 
nach Chip anpassen, indem man einen Wert in den Interrupt Vector 
Addresses anpasst.

Siehe dazu Seite 11 im entsprechenden Datenblatt:
http://www.ti.com/general/docs/lit/getliterature.tsp?fileType=pdf&genericPartNumber=msp430g2313&keyMatch=SLAS735J&tisearch=Search-EN-TechDocs

>Seite 11 - Table 5. Interrupt Sources, Flags, and Vectors - "See(7)":
>
>This location is used as bootstrap loader security key (BSLSKEY).
>A 0xAA55 at this location disables the BSL completely.
>A zero (0h) disables the erasure of the flash if an invalid password is 
supplied."

Außerdem kommt es wohl noch auf den Programer an, mit mspdebug scheint 
derzeit per "flash-bsl" (connection is via serial port) noch kein 
flashen ohne mass erase möglich zu sein.

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.