How to move CM4 core project to SDRAM in RT1176

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to move CM4 core project to SDRAM in RT1176

How to move CM4 core project to SDRAM in RT1176

 

RT1176 has two core. Normally, the CM7 core is the main core. When boot up, CM7 will boot up first. Then it will copy CM4’s image to RAM and kick off CM4 core. The details can be found in AN13264.

In RT1176, CM4 has 128K ITCM and 128K DTCM. This space is not big. It is enough for CM4 to do some auxiliary work. But sometimes, customer need CM4 to do more. For example, the CM7 may run an ML algorithm and CM4 to deal with USB/ENET and camera. That need more code space than 128K. In this case, CM4 image should be moved to OCRAM1/2 or SDRAM. OCRAM and SDRAM are both connect to a NIC-301 AXI bus arbiter IP. They have similar performance and character. This article will try to use SDRAM because it is more difficult to move to. Before moving, customer should know an important thing. the R/W speed of CM4 accessing OCRAM/SDRAM is slow. Because the CM4 requests data from SDRAM through XB (LPSR domain - AHB protocol) and then through NIC (WAKEUPMIX domain AXI protocol) and the clock limitation is BUS / BUS_LPSR. If both code and data placed in SDRAM the performance will significantly be reduced. SDRAM is accessible only via SYSTEM bus (so, in such case no harward possible). If any other bus masters are accessing the same memory the performance is even more degraded due to arbitration (on XB or NIC). So, user should arrange the whole memory space very well to eliminate access conflict.

 

  1. Prepare for the work

1.1 Test environment:

  • • SDK: 2.9.1 for i.MX RT1170
  • • MCUXpresso: 11.4.0
  • Example: SDK_root\boards\evkmimxrt1170\multicore_examples\hello_world.
    • Set hardware and software

Set the board to XIP boot mode by setting SW1 to OFF OFF ON OFF. Import the hello_world example from SDK. Build the project.

 

  1. Moving to SDRAM for debug option

In CM7 project, add SDRAM space in properties->MCU settings->Memory detail

jingpan_0-1635415395821.png

 

Then in properties->settings->Multicore, change the CM4 master memory region to SDRAM.

jingpan_1-1635415395903.png

 

Unlike other IDE, MCUXpresso can wake up M4 project thread and download M4 image by IDE itself. it calls implicit. This field tell IDE where to place CM4 image.

In properties->settings->Preprocessor, add XIP_BOOT_HEADER_DCD_ENABLE. This is to add DCD to image's head. DCD can be used to program the SDRAM controller for optimal settings, improving the boot performance.

Next, switch to CM4 project. Add SDRAM space to memory table, just like what we do in CM7 project.

jingpan_2-1635415395985.png

 

 

In properties-> Managed Linker Script, it’s better to announce Heap and stack space in DTCM. It also can be placed in SDRAM, but this should be careful.

After that, we can start debugging. You can see that the SDRAM has been filled with CM4 image. Click Resume button, the CM4 project will stop at the beginning of the Main.

jingpan_3-1635415396259.png

 

  1. Moving to SDRAM for release option

To compile the project in release mode, CORE1_IMAGE_COPY_TO_RAM should be added to Defined symbols table. But that is not enough. The CM7 project of SDK doesn’t copy the CM4 image. We must add this to CM7 project.

3.1 Create a new file named incbin.S. This is the code

        .section .core_m4slave , "ax" @progbits @preinit_array
        .global dsp_text_image_start
        .type dsp_text_image_start, %object
        .align 2
dsp_text_image_start:
        .incbin "evkmimxrt1170_hello_world_cm4.bin"
        .global dsp_text_image_end
        .type dsp_text_image_end, %object
dsp_text_image_end:
        .global dsp_data_image_start
        .type dsp_data_image_start, %object
        .align 2
dsp_ncache_image_end:
        .global dsp_text_image_size
        .type dsp_text_image_size, %object
        .align 2
dsp_text_image_size:
        .int  dsp_text_image_end - dsp_text_image_start

3.2 In hello_world_core0.c, add these code

#ifdef CORE1_IMAGE_COPY_TO_RAM
extern const char dsp_text_image_start[];
extern int dsp_text_image_size;
#define CORE1_IMAGE_START ((uint32_t *)dsp_text_image_start)
#define CORE1_IMAGE_SIZE  ((int32_t)dsp_text_image_size)
#endif

3.3 Right click the evkmimxrt1170_hello_world_cm4.axf in Project Explorer window, select Binary Utilities->Create Binary. A binary file called evkmimxrt1170_hello_world_cm4.bin will be created. Copy it to the release folder of CM7 project. If you want this work to be done automatically, you can add the command to properties->settings->Build stepes->Post-build steps

jingpan_4-1635415396335.png

 

Compile the project and download. Press reset button. After a while, you will see a small led blinking. This led is driven by CM4.

  1. Debug the CM4 project on SDRAM only

As we know that CM4 can debug alone without CM7 starting. But that is in ITCM and DTCM. Can it also work in SDRAM. Yes, but the original debug script file is not support this function. I attached a new script file. It can initialize SDRAM before downloading CM4 code. Replace the old .scp file with this one, nothing else need to be changed.

Attachments
Comments

 hello thanks @jingpan I think you are very familiar with this direction, so I look forward to hearing from you.

First of all, you mentioned in the article that CM4 program will be put into SDRAM to run, please ask me the current requirement is CM7 program to put into SDRAM, and CM4 program to put into SRAM(OCRAM or SRAM ITCM ?), How should the MCU Setting of cm4 and cm7 programs be configured?I followed my own configuration, and there was an error during compilation.

liuhailong_0-1701146887190.png  liuhailong_1-1701146923766.png

 

Second, since SDRAM is used, SDRAM needs to be initialized. You mentioned in the article that configuration is via dcd. Could you introduce the specific configuration methods and procedures?RT1170_connect_M7_wake_M4_SDRAM_init.7z.

This document is only the result of initializing SDRAM, not how to initialize SDRAM

liuhailong_1-1700725865960.png

 

 

100% helpful (5/5)
Version history
Last update:
‎10-28-2021 03:26 AM
Updated by: