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...
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?
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.
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
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
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.
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
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...
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 ;)
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.
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?
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.
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?
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.