Hallo liebe MC Gemeinde!
Ich weiß, das mein Problem ein alter Hut ist, aber ich komme leider
nicht weiter...
Ich nutze einen STM32F103C8T6 und möchte aus meinem Code den Bootloader
starten (Gründe erstmal egal).
Ich setze den VTOR auf 0x1FFFF000 und springe dann mit
1
LDR R0, =0x1FFFF000
2
LDR SP, [R0, #0]
3
LDR PC, [R0, #4]
zu dem Bootloader. Das Ganze habe ich mit einem Terminal getestet, also
den Code ausgeführt, per Terminal ein 0x7F und erhalte ein "y" zurück.
Soweit also alles i.O.
Wenn ich aber mit dem ST Flash Loader Demonstrator auf den F103
zugreifen möchte, erhalte ich die Meldung "Cannot get available
commands..."
Nun stehe ich voll aufm Schlauch, bin mir aber auch nicht sicher, ob der
Verktor Offset richtig ist, oder ob da etwas anderes faul ist.
Noch als kleine Info: ich nutze den Basic Compiler von MikroElektronika,
kann also mit C Libs nicht viel anfangen.
Danke schonmal fürs bis hierher lesen ;) noch dankbarer währe ich aber
für eure Hilfe...
MfG Stefan
Hast du das hier alles gemacht?
In addition to patterns described below, user can execute bootloader by
performing a jump
to system memory from user code. Befor jumping to Bootloader user must :
•
Disable all peripheral clocks
•
Disable used PLL
•
Disable interrupts
•
Clear pending interrupts
>Bringt leider nichts, aber damit kann ich auf die SETENA Register>verzichten...
Das würde ich mir aber noch mal überlegen;)
So wie es aussieht muss für den Bootloader
die Hardware komplett clean sein, wie nach einem Reset
im Idealfall.
musst du nicht in deiner applikation einfach bei der startadresse
(0x8000) das 0x82 löschen, dann reseten und via flash load demonstrater
draufzugreifen. im notfall kannst du auf über den STVP
(VisualProgrammer) den flash auslesen und an der adresse 0x8000 0x00
hineinflashen, dann startet nach einem reset auch wieder der
bootloader...
sprites schrieb:> musst du nicht in deiner applikation einfach bei der startadresse> (0x8000) das 0x82 löschen, dann reseten und via flash load demonstrater> draufzugreifen. im notfall kannst du auf über den STVP> (VisualProgrammer) den flash auslesen und an der adresse 0x8000 0x00> hineinflashen, dann startet nach einem reset auch wieder der> bootloader...
Einfach nicht weiter ignorieren.
Stefan schrieb:> Hmm, mit den APB1RSTR und APB2RSTR kommt als Meldung direkt "No> response..."
Warscheinlich schießt Du dier die Schnittstelle ab.
Na dann setze doch das Bit für die nicht.
Detlef Kunz schrieb:> Na dann setze doch das Bit für die nicht.
OK, war ein langer Tag gestern.
Habe alles außer USART1, PortA und AFIO resettet.
1
RCC_APB1RSTR = 0xFFFFFFFF
2
RCC_APB2RSTR = 0xFFFFBFFA
Leider keine Änderung.
sprites schrieb:> musst du nicht in deiner applikation einfach bei der startadresse> (0x8000) das 0x82 löschen
??? Meinst du mit Startadresse den Start des Programmcodes? Währe dann
aber 0x08000000 und da steht der Wert, der in den MSP geladen wird
(0x20004FFC).
Außerdem müsste ich dann jedesmal die Werte ändern, wenn ich flashen,
oder das Programm starten möchte...?!
Du kannst auch ein sonstwie unbenutztes Deviceregister oder einen Pin
auf einen definierten Wert setzten und dann einen Core-Reset machen. In
deinem Start-Up Code pruefts Du dann das Register/ den Pin auf den Wert
und springst zum Bootloader oder zu Deinen Programm.
Bei neueren STM32 Chips kann man das SYSCFG_MEMRMP entsprechend setzen,
dann den Core-Reset ausloesen und man landet im ROM Bootloader.
direkt nach dem Start geladen und siehe da, es funktioniert. Ein
unbenutzes Register prüfen ist eine sehr gute Idee. Das werde ich so
umsetzen...
Danke an euch alle...