Hallo, zuerst ein paar Infos zur verwendeten Hardware. Debugger: Segger JLink µC: STM32F407IG (Cortex-M4) Die JTagpins sind ohne Pullups. Sie sind direkt vom µC mit dem JTag verbunden. Ich habe das Board gelötet und konnte dann problemlos von Linux auf die Cortex per JTag zugreifen. Ich konnte die Register etc. auslesen und habe ein kleines LED-Beispiel aufgespielt (auf dem STM32F4 Eval Board ging das Programm problemlos, ich habe nur die Pins angepasst). Nachdem ich einmal "go" eingegeben habe, konnte das JTag die CPU nicht mehr in den Haltmodus versetzen. Ich hatte BOOT0 mit 10k gegen Masse. Boot1 war erst nicht angeschlossen (laut Datenblatt ist es für den Main Memory egal). Ich hab allerdings testweise auch ein definiertes Signal angelegt. Nach ewigen hin und her testen konnte ich zweimal richtig per JTag zugreifen. Dann konnte ich ein Programm aufspielen und im "Step" Modus hätte er die richtigen Befehle ausgeführt. Ich habe es wieder zurück gelesen und es stimmte. Mit "go" und "reset" kam wieder die Meldung, dass er die CPU nicht in den Haltemodus versetzen kann. Wenn ich mit der Hand den Resetknopf drücke, erkennt er die CPU, er kann sie allerdings ebenfalls nicht in den Haltemodus versetzen. Programmieren geht ebenfalls nicht, da er versucht vorher die CPU in den Haltemodus zu versetzen. Ich habe den Flash oder Register ausgelesen und er hat nur Nullen angezeigt. Beim JLink (9-Poliger Stecker) kann ich den Pin 9 auf Reset brücken, den habe ich auch an Reset vom µC gelegt. Dies hatte keinen Erfolg. Auch die Jlink-Stm32-unlock.exe von Segger brachte einen Fehler. Testweise habe ich den BOOT0 mit 10k gegen VCC gelötet. Ich konnte auf den Bootloader mit UART zugreifen. JTag funktioniert hier auch problemlos. Ich habe ein anderes Testprogramm mit dem JLink (ebenfalls für das STM32F4 Eval Board) in den Mainflash laden können und per Bootloader zurücklesen. An dem Fehlerbild im Bootmodus "Mainflash" hat sich nichts geändert. Ich habe auch eine leichte Erwärmung im "Mainflashmodus" gemerkt. Könnte an den eigentlich eingestellten 168MHz liegen. Wenn ich per Bootloader boote, hat die LED nicht geblinkt und JTag ging nicht mehr. (gleiche Fehlermeldung als angehängt) Ich habe es von 3 verschiedenen PCs (Windows und Linux) mit zwei verschiedenen Versionen getestet und immer den gleichen Fehler erhalten. Ich habe auch an dem Taster einen Pullup gebaut, brachte nichts. Auch ein Pullup an JTag-TDI brachte nichts. Das JTag habe ich eben nochmals mit einer Freescale Kinetis Cortex-M4 getestet, da ging es problemlos und eben im Systemflash Bootmodus auch. Da die Software fast unverändert aus dem I-Net übernommen wurde, kann ich sie nicht komplett hochladen. Müsste ich irgend etwas ändern, damit die Software vom Eval Board auch auf der größeren Cortex läuft. (außer der Flashgröße und evtl der Ramgröße/Stackpointer) Für eine einfache LED-Blinkanwendung sollte der Startupcode ja 1:1 funktionieren. Sleepmodus, Watchdog habe ich nicht bewusst aktiviert. CMSIS sollte es ja auch nicht einfach so aktivieren. Ich hoffe ihr könnt mir weiter helfen. Vielen Dank! Simon
Die Fehler nochmals als .txt Datei, sollte es sonst Probleme geben.
du hast warscheinlich den JTAG Debugger Reset Pin nicht mit dem STM32-Reset Pin verbunden. Du kannst jetzt in den Hardware Einstellungen des Debuggers die RESET Art ändern ... Per ResetPin ... auf SYSReset oder so. Dann geht auch das Flash-under-reset. Oder du verbindest den Reset Pin vom JTAG/SWD Debugger mit dem reset pin des stm32.
Wie gesagt, musst den JLINK so einstellen das er den Reset nicht mit via HardwareReset durchführt. Daher auch dieser Fehler "MCU couldnt halted blabla". Das gleiche ist das Problem beim Keil & Eclipse. Keil merkt das bzw. probiert verschiedene reset varianten durch bis es klappt und bei Eclipse muss es entsprechend eingestellt werden. Sonst geht das mit dem Flash / Connect under reset auch nicht.
Danke für die Antwort. Ich habe den Pin testweise verbunden gehabt. Das Fehlerbild war dann auch anders. Den genauen Fehler weiß ich nicht mehr, jedenfalls war es ca. so: 2 Zeilen Fehlermeldung 1 Zeile eigentliche Ausgabe, allerdings alle Werte waren 0 Die verschiedenen Reset-Methoden habe ich auch schon ausprobiert, kann aber sein, dass ich einen Parameter übersehen habe. Ich werde es Morgen nochmals testen. Da es ja vor dem Flashen funktioniert hat und im anderen Bootmodus funktioniert: Könnte es - außer Sleepmodus direkt nach dem Start (hab dazu was im segger Forum gelesen) oder ein aktiver Watchdog - noch weitere Softwareprobleme geben? Könnte ich mich über die Optionbytes aussperren? Per Bootloader habe ich read und writeprotection deaktiviert. Allerdings keine Veränderung. Wenn die Software auf einer kleinen STM32F407VG (STM32F4 Eval Board) problemlos läuft und ich nur den Pin ändere, reicht das aus, oder muss ich den Startupcode für CMSIS ändern und sogar noch das Linkerskript anpassen. (Letzteres werde ich auf 1MB Flash machen müssen, sollte aber mit kleineren Werten ebenfalls funktionieren.)
Also wenn ich den Bootloadermodus wähle und dann den Flash ab 0x800 0000 mit lauter 0xFF fülle komme ich wie nach dem löten auf die Cortex. Ich kann Step, Go, Halt machen was alles funktioniert, auch Softreset. Ich habe mittlerweile 3-4 verschiedene Programme mit CMSIS (alle für das Eval board) durch und sobald ich mein Programm hochlade und boote, komme ich nicht mehr mit dem JTag drauf. Der Fehler ist wie oben. Ich nutze momentan die Beispiele von: https://github.com/cccc/U23_2013_examples Dort das 01_leds. Außer den Ports (PA10 soll toggeln) habe ich nichts geändert. Laut der .bin File stimmt der Stackpointer. Auch habe ich die main.c auf das geändert:
1 | #include <System.h> |
2 | int main() |
3 | {
|
4 | int a=0; |
5 | while (1) |
6 | {
|
7 | a++; |
8 | }
|
9 | }
|
Das ändert auch nichts. Daher müsste der Fehler im Startupcode oder an der Hardware liegen. Außer den zwei Bootpins und dem Reset (Stimmt die beschaltung? So habe ich sie in einem Beispiel von ST gesehen) müsste ich ja nichts beschalten? Im Bootloadermodus funktioniert es so wie es soll. Ich habe die Option Bytes ausgelesen, da ist keine Beschränkung. Watchdog ist auf Software und BOD ist auf off. Hat jmd ein Minimalbeispiel am Laufen für den STM32F407IG (beim *VGT6 laufen meine auch problemlos)?
Das Problem ist anscheinend gelöst und schon fast peinlich. Den Grund schreibe ich, falls einer das gleiche Problem hat. Der Quarz ist 25 MHz statt 8 MHz wie auf dem Demoboard. Ich hab vergessen den PLL richtig einzustellen. Das müsste dann ca. 0,5GHz machen :P Das erklärt auch die leichte Erwärmung. Das Beispiel von oben läuft jetzt per JTag. Ich danke allen, die sich Zeit genommen haben.
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.