Hallo,
ich habe eine Frage zum STM32F7xx. Dieser besitzt die Möglichkeit, Code
aus dem Flash über sein ITCM Interface auszuführen. Dafür muss natürlich
das Programm entsprechend gelinkt werden.
Meine Frage ist nun, wie flasht man das elf File dann in den uC? Der
Flash ist laut Datenblatt nicht über das ITCM Interface beschreibbar. Er
muss über einen anderen Adressbereich über den "normalen" Bus
beschrieben werden.
Meine Frage ist nun, ob die Flashtools von STLink und JLink automatisch
erkennen, dass sie das an eine andere Adresse schreiben müssen, als
später darauf zugegriffen wird? In den Linkerskripten, die mir vorliegen
wurden nämlich die Lade und Zugriffsadressen nicht getrennt, so wie man
es zum Beispiel bei initialisiertem RAM tut.
Vielen Dank
Ich wollte das X-CUBE-LPDEMO-F7 herunterladen, klappt aber nicht.
Schon das zweite Mal das keine email kommt.
Hat noch jemand Probleme oder liegt das an meiner temporären email
Adresse?
Vor 2 Tagen hatte ich schon mal das Problem.
pegel schrieb:> Ich wollte das X-CUBE-LPDEMO-F7 herunterladen, klappt aber nicht.> Schon das zweite Mal das keine email kommt.> Hat noch jemand Probleme oder liegt das an meiner temporären email> Adresse?> Vor 2 Tagen hatte ich schon mal das Problem.
Hat bei mir auch ewig gedauert. ST entwickelt sich da langsam in eine
unangenehme Richtung.
Ich bin immernoch am grübeln, wie man diesen Flash programmiert...
pegel schrieb:> Das Nächste wäre:> "For more details about the embedded software, refer to the readme file> inside the embedded software package."
Mir geht es hier weniger um die Doku von ST.
Mich interessiert, wie ich den Programmieradapter dazu bewegen kann den
Code, der auf die ITCM Adresse gelinkt ist, in den Flash zu schreiben.
Ich möchte Wissen, ob bspw. der JLink automatisch erkennt, um welche
Adresse es sich dabei handelt und das auf den Flash umbiegt, oder ob man
im Linkerscript die VMA und LMA trennen muss.
pegel schrieb:> Schon klar.> Aber manchmal muss man sich einlesen.> In der pdf oben, könnte Kapitel 2.2.2 interessant sein.
Ist es eben nicht.
Es zeigt, was man anklicken muss, aber nicht, was passiert.
Das es zwei Linkereinstellungen gibt, habe ich auch gesehen. Abllerdings
ist mir nicht klar, wie das Programm geladen wird, da die Adresse nicht
schreibbar ist.
Dann wird es vielleicht indirekt wie bei ext. Flash gemacht?
Da auch eine SW4STM32 Version dabei ist, würde ich in den openocd
Konfigurationen suchen. Weiß es aber nicht genau, die email ist immer
noch nicht da.
Für heute gebe ich auf.
pegel schrieb:> Dann wird es vielleicht indirekt wie bei ext. Flash gemacht?> Da auch eine SW4STM32 Version dabei ist, würde ich in den openocd> Konfigurationen suchen. Weiß es aber nicht genau, die email ist immer> noch nicht da.> Für heute gebe ich auf.
Ich habe die Note von STM gelesen:
1
@Notes
2
1- For the SW4STM32 toolchain the application runs only with Flash_AXI configuration
3
4
2- In order to load the Flash_AXI configuration, you must follow the instructions below :
5
- Open SW4STM32 toolchain
6
- Rebuild all files
7
- Open STM32 ST-Link Utility V3.7, click on "External Loader" from the bar menu then check "N25Q128A_STM32F746G-DISCO" box
8
- Connect the STM32746G-Discovery board to PC with USB cable through CN14
9
- Use the "Flash_AXI.hex" for SW4STM32 file with ST-Link Utility to program Flash and external QSPI memories
Die bekommen das offenbar selbst nicht hin xD.
Mein Ansatz ist es (ähnlich wie bei initilisiertem RAM) die loadadresse
der flash sections in den AXI-Flash zu legen, und die VMA auf den
ITCMFlash zeigen zu lassen.
hi
habe das auch gebraucht ...
im Linkerfile eine section anlegen:
MEMORY
{
RAM4 (xr) : ORIGIN = 0x00000000, LENGTH = 16K /* ITCM */
...
...
...
SECTIONS
{
...
...
_siitcm = LOADADDR(.itcm);
/* ITCM RAM for critical functions */
.itcm :
{
. = ALIGN(4);
_sitcm = .; /* create a global symbol at itcm start */
*(.itcm)
*(.itcm*)
. = ALIGN(4);
_eitcm = .; /* define a global symbol at itcm end */
} >RAM4 AT> ROM
...
...
...
}
und jetzt der knackpunkt .. das zeug muss bei systemstart vom flash in
den ITCM geladen werden
udn das bitte VOR allem anderen zeug
zB: in der systeminit
1
externunsignedlong_siitcm;
2
externunsignedlong_sitcm;
3
externunsignedlong_eitcm;
4
5
voidSystemInit(void)
6
{
7
// copy to ITCM RAM !!!
8
unsignedlong*pulSrc,*pulDest;
9
pulSrc=&_siitcm;
10
11
for(pulDest=&_sitcm;pulDest<&_eitcm;)
12
{
13
*(pulDest++)=*(pulSrc++);
14
}
wer sich mit linkerfiles auskennt kann das auch dort automatisieren...
ich hatte das nicht hinbekommen
funktionen werden dann mit: