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