Skip to main content
wenbin
Associate II
March 28, 2016
Question

STM32F7xx Flash interface selection (AXIM or ITCM)

  • March 28, 2016
  • 10 replies
  • 3778 views
Posted on March 28, 2016 at 18:28

I am confused about the boot setting in STM32F7xx series.

When the boot pin is low, it boots from flash on ITCM interface (0x0020 000) by default, as shown in the screenshot of the manual.

0690X000006038MQAQ.jpg

However, in the IAR linker file, the AXIM interface is selected. The program runs ok when downloaded in the flash. So could you tell me is the CPU using ITCM or AXIM interface in this case?

0690X00000602vZQAQ.jpg

Edit:

Hi ALL,

The way to choose AXIM or ITCM flash interface in IAR is to configure the ROM address in the linker file.

For AXIM, ROM starts from 

0x08000000, 

for ITCM, ROM starts from 

0x00200000.

So the BOOT_ADD0 setting is not working?

#stm32f7-axim-itcm-flash-interfac
This topic has been closed for replies.

10 replies

Radosław
Associate II
March 28, 2016
Posted on March 28, 2016 at 19:21

This isn't important for linker. For linker check memory map in datasheet. Becose Flash is at 0x0800000. In AXIM 0x0800000 is mapeed to 0x00000000.  IN ITCM 0x0020000 is mapped to 0x00000000.  ITCM interface maps flash to 0x00200000

Tesla DeLorean
Guru
March 28, 2016
Posted on March 28, 2016 at 19:23

The content of the FLASH would presumably appear at both addresses, and at start up load the first two vectors SP/PC, and then start execution for the address specified there. So whatever address you've specified to the linker.

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Radosław
Associate II
March 28, 2016
Posted on March 28, 2016 at 19:31

>>So whatever address you've specified to the linker.

Not true. It depends on the loader. Programming device. I can bet that anyone can use others addresses from 0x08000000.

Radosław
Associate II
March 28, 2016
Posted on March 28, 2016 at 19:47

I never use IAR. But read data will still be done by done by AXIM. LMA (load memory address) can be different do VMA.   LMA must be 0x0800000.

VMA can be 0x0800000 or 0x00200000. 

If LMA - VMA data will be read by AXIM.   If VMA =0x0020000 data will be read by ITCM.

Tesla DeLorean
Guru
March 28, 2016
Posted on March 28, 2016 at 19:54

>>So whatever address you've specified to the linker.

 

 

Not true. It depends on the loader. Programming device. I can bet that anyone can use others addresses from 0x08000000.

The linker fixates the addresses in the image. The vector table entries point to absolute addresses. The linker base could be 0, 0x200000, 0x8000000, where the FLASH is mapped at ZERO, and all would appear to execute ''normally''

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Radosław
Associate II
March 28, 2016
Posted on March 28, 2016 at 19:58

Bull shit.   Tested. LMA MUST BE 0x0800000.   VMA is something else.

Write to Flasg can be done only by AXIM.,

Tesla DeLorean
Guru
March 28, 2016
Posted on March 28, 2016 at 21:14

Bull shit.   Tested. LMA MUST BE 0x0800000.   VMA is something else. Write to Flasg can be done only by AXIM.,

You must be such a joy to be around.

This would all be far more convincing if the numbers had the right numbers of zeros in them. Having the code natively built to function in the ITCM would seem to be far the most desirable out come. Yes, if your loader is incapable of understanding where a .HEX or .ELF/AXF might need some address translation, that's going to be a problem for you. Nevertheless, a .BIN is ''address-less'', having no meta-data specifying where it goes, and a flash loader with a grasp of the architecture can map things to the writeable array as appropriate. When you work with tools, you know how to recognize them.

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Radosław
Associate II
March 28, 2016
Posted on March 28, 2016 at 21:24

You have problem to understand differences LMA and VMA?

Ohh sorry im just human, a can do typo mistake.

What with loaders in debugers hmm?

In gcc I only change 2 words and add one line to do it correctly.   Debuging works, hex genereted with start address 0x08000000.  But all function,data addresses,  in vetor table and reset address  are 0x002XXXXX.

So you say that IAR (price XXXX$) can do it?   WOW  WOW WOW WOW

wenbin
wenbinAuthor
Associate II
March 29, 2016
Posted on March 29, 2016 at 11:44

Hi ALL,

The way to choose AXIM or ITCM flash interface in IAR is to configure the ROM address in the linker file.

For AXIM, ROM starts from 

0x08000000,

for ITCM, ROM starts from 

0x00200000.

So the BOOT_ADD0 setting is not working?

Radosław
Associate II
March 29, 2016
Posted on March 29, 2016 at 12:47

In true you will not see effect of this settings directly.  As I mention this is only memory mapping.  When you program will be compiled for AXIM, and when you boot from ITCM this will be still work. But any read (const data, funtions literals will be done by axim) but code will be executed by ITCM. 

If in IAR setting rom to 0x00200000 work with programing and debuging so good.

Check pointer value to some function or constant data.

This is not verifed information.

ITCM interface is enabled at power on by setting booting from them.  If you change boot to AXIM, and program will be compiled to work on ITCM this will not work.

But ST maybe implement that ITCM is always ON. 

This i will check later.