boot m4 from ddr

Discussion in 'UDOO NEO' started by maike, Aug 28, 2017.

Tags:
  1. maike

    maike New Member

    Joined:
    Aug 28, 2017
    Messages:
    2
    Likes Received:
    2
    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?
     
  2. maike

    maike New Member

    Joined:
    Aug 28, 2017
    Messages:
    2
    Likes Received:
    2
    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.
     
    modjo and waltervl like this.

Share This Page