Forum: Mikrocontroller und Digitale Elektronik STM32F105VC interner CAN bootloader


von Bernd (Gast)


Lesenswert?

Hallo Forum,

ich versuche den internen CAN bootloader an einem STM32F105VC zu 
benutzen.
Bitte keine Diskussion darüber, dass der interne BL zu unflexible etc. 
ist.
Es gibt für mich einen guten Grund diesen als Fallback benutzen zu 
wollen, und sei es nur um einen eigenen BL zu installieren. Meine Frage 
ist nur, ob er bei jemandem überhaupt funktioniert? Ich finde dazu keine 
Informationen und auch kein PC Tool zum Testen.

Der BL wird bei mir über die BOOT Pins aktiviert.
Mit einem eigenen kleinen Tool kann ich den BL auch dazu bewegen mir mit 
einer Bestätigung zu antworten, dass seine Konfiguration und Clock 
Einstellung geklappt haben soll. Dies klappt allerdings mal besser mal 
schlechter, also nicht sehr zuverlässig. Der Controller läuft mit einem 
25 MHz Quarz was laut AN3154 eine der erlaubten Frequenzen ist. Mit 8 
MHz Quarz verhält es sich nicht besser. Aus der Appnote verstehe ich es 
so, dass sich der BL auf die ersten Nachrichten hin (0x79 DLC=1 0x00 bei 
125kbps) mit Hilfe des internen Oszillators (wenn es keine BUS Fehler 
gib) die CLOCK Einstellungen berechnet und danach auf den externen HSE 
Clock umstellt.
Meine eigentliche Firmware kann mit der selben Hardware ohne BUS Fehler 
über CAN kommunizieren. Beim BL bricht die Übertragung der FW immer an 
unterschiedlichen Stellen ab und es gibt zwischendrin auch viele BUS 
Fehler (Frame Errors, Bit Stuffing). So als wäre die Baudrate nicht gut 
eingestellt. Aber darauf habe ich ja keinen Einfluss. Wenn der 
Controller auf meine erste Nachricht mit "OK" antwortet, sollte alles 
eingestellt sein.
Es sieht auch so aus, als ob der BL seine Bestätigung auf eine Nachricht 
sehr schnell und zum Teil zu früh schickt und dadurch was aus dem Takt 
kommt.

Mich wundert, dass man zu dem Thema so gut wie nichts findet.
Also entweder klappt es bei den meisten auf Anhieb besser als bei mir, 
oder niemand benutzt den internen CAN BL.
Aber wenn er gar nicht funktionieren sollte, hätte man sicherlich davon 
etwas gelesen.

Hat jemand erfolgreich mit dem internen CAN BL ein Update durchgeführt 
und kann mich evtl. auf die richtige Spur bringen?
Die Appnote AN3154 ist auch nicht fehlerfrei, so steht z.B. auf S.10 der 
Rev 6 beim GET Kommando, dass die Nachrichtenlänge egal sei.
"Command message: Std ID = 0x00, data length code (DLC) = ‘not 
important’."
Es klappt aber nur mit Länge 1.
Vielleicht gibt es ja noch mehr so Sachen...

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal ein Trace von ein paar manuell gesendeter Kommandos.

Am Anfang ist der Controller im internen BL aber noch nicht konfiguriert 
-> Error auf dem Bus

In Message 47 kommt mein Start Kommando. In MSG 51 kommt mit 0x79 im 
ersten Datenbyte ein OK zurück. Ab da sind die Fehler auf dem Bus erst 
einmal weg.

MSG 52 ist ein GET Kommando (0x00 DLC=1 0x00) mit korrekter Antwort bis 
MSG 68.

MSG 69 ist ein kurzes GET Kommando (0x01 DLC=1 0x00) mit korrekter 
Antwort bis MSG 73.

MSG 74 ist ein READ MEMORY von N=63+1 Bytes ab Adresse 0x08000000 mit 
korrekter Antwort bis MSG 84.

MSG 85 ist ein "Clear complete Flash" (0x43 DLC=1 0xFF) mit korrekter 
Antwort aber auch einem Error auf dem Bus bis MSG 88.

MSG 89 bis 99 nochmal ein READ MEMORY vom gleichen Bereich. Ist 
gelöscht.

MSG 100 bis 106 Schreiben von 12 Byte ab Adresse 0x08000010.
MSG 105 bestätigt den Kommandoempfang, MSG 106 bestätigt das Ende des 
Schreibvorgangs.

MSG 107 erneutes Auslesen des Bereichs. Wieder 2 Error Frames, aber 
trotzdem korrekte Antwort bis MSG 119.

Hier sieht man nun, dass in MSG 114 hinter den 4 letzten geschriebenen 
Byte noch 4 ungewollte Bytes geändert wurden (0x00 0x83 0x6E 0x07).

von Bernd (Gast)


Lesenswert?

Bernd schrieb:
> Hier sieht man nun, dass in MSG 114 hinter den 4 letzten geschriebenen
> Byte noch 4 ungewollte Bytes geändert wurden (0x00 0x83 0x6E 0x07).

OK, beim Schreiben muss man auch N-1 angeben, um N Bytes zu schreiben. 
Sonst passieren komische Dinge.

Dann liegt es vermutlich doch an meinem Tool...

von Bernd (Gast)


Lesenswert?

Was mir aber noch aufgefallen ist, wenn ich versuche eine einmal bereits 
beschriebene Adresse nochmal zu beschreiben, dann funktioniert das 
nicht. Beim Auslesen steht immer noch der alte Wert drin, obwohl alle 
Kommandos brav bestätigt wurden. Versuche ich das ganze mehrfach dann 
kommt es zu Errorframes und letztendlich zum BUSOFF.

Sollte zwar beim normalen Update nicht vorkommen, aber irgendwie ist das 
nicht so vertrauenserweckend. Vor allem vermute ich momentan, dass so 
etwas ähnliches beim Updateversuch übers Tool auch passieren könnte.
Hat da jemand eine Idee zu?

von Bernd (Gast)


Lesenswert?

Gelöst:

Es stellt sich so dar, dass es funktioniert, wenn am PC CAN Adapter der 
Sampling Point verschoben wird.
Standardmäßig liegt er bei 75% (oder bei 125kbit/s auch mal bei um die 
86%).
Wenn am PC Adapter ein Sampling Point um die 50% z.B. 56,x% eingestellt 
wird, dann klappt die Übertragung ohne Bus Fehler. Dazu wäre ein Hinweis 
im Datenblatt sehr hilfreich gewesen.

Es gibt noch eine Ungereimtheit. Es wird aktuell immer eine Adresse mit 
maximal 16 Byte beschrieben. Also Adresse setzten. Zwei CAN Nachrichten 
mit insgesamt 16 Byte schreiben. Die aller ersten 8 Byte bleiben hier 
jedoch 0.
Mit einem Blockwrite von 256 Bytes ab der gesetzten Adresse scheint es 
zu gehen. Der ganze Rest des Hexfiles wird auch Adressweise mit 16 Byte 
korrekt übertragen.

Das Erhöhen der Baudrate klappt nur stufenweise. Also immer eine 
Baudrate höher einstellen, und von da aus wieder eine Baudrate höher. 
Nicht direkt auf die höchste Baudrate springen. Davon steht auch nichts 
im Datenblatt.

Hoffe es hilft jemandem weiter!

von Schimdt (Gast)


Lesenswert?

Hi Bernd,

ich bin Dir sehr Dankbar, sowas hier zu posten. Seit Wochen bin ich nach 
der Suche von einem Tool zum Flaschen von STM32 MCU über internen CAN 
Bootloader. Ich bin ein Zero-Anfänger mit STM32 MCU und wäre sehr froh, 
wenn Du mir Dein Tool zur Verfügung stellen könntest. Dies wird mir 
erlauben sehr große Vorschritte zu machen. In der Tat stehe ich schon 
unter Zeitdruck, da dass Projekt schon in 3 Wochen beim Dozent abzugeben 
wird und ich bisher nur die 30% gemacht habe. Ich warte auf deine 
schnelle Antwort.

Viele Grüße

Schmidt

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.