Hey there, I was able to build and run an application from TCM using the startup code and linker script from CMSIS. Since my application is going to exceed the TCM space I want to use a different memory region. According to the device tree there should be 8MB DDR reserved for the M4, starting at 0x84000000. So I modified the linker script like this: MEMORY { m_interrupts (RX) : ORIGIN = 0x84000000, LENGTH = 0x00000240 m_text (RX) : ORIGIN = 0x84000240, LENGTH = 0x00007DC0 m_data (RW) : ORIGIN = 0x20000000, LENGTH = 0x00008000 } From my understanding, I should be able to boot the M4 in u-boot by doing the following: fatload mmc 0:1 0x84000000 test_ddr.bin dcache flush bootaux 0x84000000 Bootaux should take care of copying the stack and pc pointer values. I added it by recompiling u-boot with the corresponding command definition. For the TCM memory layout (m_interrupts starting at 0x00000000) this procedure works, so what am I missing for the DDR?
solved it, maybe it's interesting for some of you: the problem was the position of the whole vector table, the vectors are located at 0x84000000 but the M4 expected them to be at 0x00000000. So after enabling the SysTick Interrupt it crashed because it jumped to a completely wrong address looking for the SysTick_Handler. Copying the vectors to the correct address (starting at 0x00000000) did the trick.