~aleteoryx/muditaos

aea9e64beada7b05dcffb9fac9e46fcb6998da55 — Maciej Gibowicz 4 years ago 211a6e0
[EGD-7088] SDRAM configuration on T7 board

Add configuration for new, increased to 64 MB SDRAM.
M StartJLinkServer.sh => StartJLinkServer.sh +8 -2
@@ 1,8 1,9 @@
#!/usr/bin/env bash
# Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
# Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

declare -A OPTS=( ['continous']=' -singlerun ' ['verify']='  ' ['speed']=' -speed 25000 ')
jlinkScriptFileName="evkbimxrt1050_sdram_init.jlinkscript"

help()
{


@@ 13,6 14,7 @@ Params:
    continous   - run in continous mode
    verify      - verify data loaded
    speed       - change speed (please mind 30000 is max by docs)
    T6          - run for the T6 board 
EOF
}
while [[ $# -gt 0 ]]; do


@@ 28,6 30,10 @@ while [[ $# -gt 0 ]]; do
            OPTS[$1]=" -speed $2 "
            shift
            ;;
        "T6")
            echo "run for the T6 board"
            jlinkScriptFileName="evkbimxrt1050_sdram_init_T6.jlinkscript"
            ;;
        *)
            help
            ;;


@@ 35,7 41,7 @@ while [[ $# -gt 0 ]]; do
    shift
done
CMD="JLinkGDBServerCLExe -if SWD -device MCIMXRT1051                     \
    -jlinkscriptfile evkbimxrt1050_sdram_init.jlinkscript -strict -ir    \
    -jlinkscriptfile $jlinkScriptFileName -strict -ir    \
    -rtos GDBServer/RTOSPlugin_FreeRTOS                                  \
    ${OPTS[@]}"


M Target_RT1051.cmake => Target_RT1051.cmake +0 -1
@@ 110,5 110,4 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)



set(CMAKE_EXE_LINKER_FLAGS "-nostdlib -Xlinker --gc-sections -Xlinker --sort-section=alignment -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -Xlinker -print-memory-usage -T ${LDSCRIPTSDIR}/libs.ld -T ${LDSCRIPTSDIR}/memory.ld -T ${LDSCRIPTSDIR}/sections.ld -nostartfiles" CACHE INTERNAL "")
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)

M board/rt1051/crashdump/crashcatcher_impl.cpp => board/rt1051/crashdump/crashcatcher_impl.cpp +6 -2
@@ 17,9 17,13 @@ const CrashCatcherMemoryRegion *CrashCatcher_GetMemoryRegions(void)
        {0x20200000, 0x20210000, CRASH_CATCHER_BYTE},
        // SRAM_DTC
        {0x20000000, 0x20070000, CRASH_CATCHER_BYTE},
        // intentionally skip text section
        // BOARD_SDRAM_HEAP
    // intentionally skip text section
    // BOARD_SDRAM_HEAP
#if defined(PURE_SDRAM_64_MB) && (PURE_SDRAM_64_MB == 1)
        {0x80620000, 0x84000000, CRASH_CATCHER_BYTE},
#else
        {0x80620000, 0x81000000, CRASH_CATCHER_BYTE},
#endif
        // end tag
        {0xFFFFFFFF, 0xFFFFFFFF, CRASH_CATCHER_BYTE},
    };

R board/rt1051/ldscripts/memory.ld => board/rt1051/ldscripts/memory_T6.ld +0 -0
A board/rt1051/ldscripts/memory_T7.ld => board/rt1051/ldscripts/memory_T7.ld +25 -0
@@ 0,0 1,25 @@
/*
 * (c) Code Red Technologies Ltd, 2008-2013
 * (c) NXP Semiconductors 2013-2018
 * Generated linker script file for MIMXRT1052xxxxB
 * Created from memory.ldt by FMCreateLinkMemory
 * Using Freemarker v2.3.23
 * MCUXpresso IDE v10.2.0 [Build 759] [2018-05-15]  on 2018-07-30 10:43:20
 *
 * Modified by Mudita
 */
MEMORY
{
        /********************************   WARNING   *******************************/
        /*                                                                          */
        /* must be kept in sync with 'board/rt1051/crashdump/crashcatcher_impl.cpp' */
        /*                                                                          */
        /****************************************************************************/

	/* Define each memory region */
	SRAM_OC (rwx) : ORIGIN = 0x20200000, LENGTH = 0x10000 /* 64K bytes (alias RAM) */
	/*SRAM_ITC (rwx) : ORIGIN = 0x0, LENGTH = 0x0*/ /* 0K bytes (alias RAM2) */
	SRAM_DTC (rwx) : ORIGIN = 0x20000000, LENGTH = 0x70000 /* 448K bytes (alias RAM3) */
	BOARD_SDRAM_TEXT (rx) : ORIGIN = 0x80000000, LENGTH = 0x2000000 /* 32 MB for application code */
	BOARD_SDRAM_HEAP (rwx) : ORIGIN = 0x82000000, LENGTH = 0x2000000 /* 32 MB for heap (alias RAM4) */
}

M cmake/modules/ProjectConfig.cmake => cmake/modules/ProjectConfig.cmake +19 -1
@@ 49,6 49,19 @@ else()
    set (USB_DEVICE_PRODUCT_ID 0x0622 CACHE INTERNAL "Sets USB_DEVICE_PRODUCT_ID to Windows MTP Simulator Product ID")
endif()

option(PURE_HW_TARGET "PURE_HW_TARGET" T7)
if (${PURE_HW_TARGET} STREQUAL "T6")
    message("Building for T6")
    set (MEMORY_LINKER_FILE "memory_T6.ld")
    set (PROJECT_CONFIG_USER_DYNMEM_SIZE 9*1024*1024 CACHE INTERNAL "")
    set (PURE_SDRAM_64_MB 0 CACHE INTERNAL "")
else()
    message("Building for T7 - 64MB SDRAM !")
    set (MEMORY_LINKER_FILE "memory_T7.ld")
    set (PROJECT_CONFIG_USER_DYNMEM_SIZE 28*1024*1024 CACHE INTERNAL "")
    set (PURE_SDRAM_64_MB 1 CACHE INTERNAL "")
endif()

#Config options described in README.md
set(PROJECT_CONFIG_DEFINITIONS
        LOG_USE_COLOR=${LOG_USE_COLOR}


@@ 57,7 70,8 @@ set(PROJECT_CONFIG_DEFINITIONS
        SYSTEM_VIEW_ENABLED=${SYSTEM_VIEW_ENABLED}
        USBCDC_ECHO_ENABLED=${USBCDC_ECHO_ENABLED}
        LOG_LUART_ENABLED=${LOG_LUART_ENABLED}
        PROJECT_CONFIG_USER_DYNMEM_SIZE=9*1024*1024
        PROJECT_CONFIG_USER_DYNMEM_SIZE=${PROJECT_CONFIG_USER_DYNMEM_SIZE}
        PURE_SDRAM_64_MB=${PURE_SDRAM_64_MB}
        USB_DEVICE_VENDOR_ID=${USB_DEVICE_VENDOR_ID}
        USB_DEVICE_PRODUCT_ID=${USB_DEVICE_PRODUCT_ID}
        MAGIC_ENUM_RANGE_MAX=256


@@ 66,3 80,7 @@ set(PROJECT_CONFIG_DEFINITIONS

message(STATUS "BlueKitchen selected")
set(BT_STACK "BlueKitchen")

if(${PROJECT_TARGET} STREQUAL "TARGET_RT1051")
set(CMAKE_EXE_LINKER_FLAGS "-nostdlib -Xlinker --gc-sections -Xlinker --sort-section=alignment -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -Xlinker -print-memory-usage -T ${LDSCRIPTSDIR}/libs.ld -T ${LDSCRIPTSDIR}/${MEMORY_LINKER_FILE} -T ${LDSCRIPTSDIR}/sections.ld -nostartfiles" CACHE INTERNAL "")
endif()

M evkbimxrt1050_sdram_init.jlinkscript => evkbimxrt1050_sdram_init.jlinkscript +11 -7
@@ 136,6 136,8 @@ void SDRAM_Init() {
  MEM_WriteU32(0x401F80A8,0x00000000); // EMC_37
  MEM_WriteU32(0x401F80AC,0x00000000); // EMC_38
  MEM_WriteU32(0x401F80B0,0x00000010); // EMC_39
  MEM_WriteU32(0x401F80B4,0x00000000); // EMC_40
  MEM_WriteU32(0x401F80B8,0x00000000); // EMC_41
  
  // PAD ctrl
  // drive strength = 0x7 to increase drive strength


@@ 180,16 182,18 @@ void SDRAM_Init() {
  MEM_WriteU32(0x401F8298,0x000110F9); // EMC_37
  MEM_WriteU32(0x401F829C,0x000110F9); // EMC_38
  MEM_WriteU32(0x401F82A0,0x000110F9); // EMC_39
  MEM_WriteU32(0x401F82A4,0x000110F9); // EMC_40
  MEM_WriteU32(0x401F82A8,0x000110F9); // EMC_41

  // Config SDR Controller Registers/
  MEM_WriteU32(0x402F0000,0x10000004); // MCR
  MEM_WriteU32(0x402F0008,0x00030524); // BMCR0
  MEM_WriteU32(0x402F000C,0x06030524); // BMCR1
  MEM_WriteU32(0x402F0010,0x80000019); // BR0, 16MB OK
  MEM_WriteU32(0x402F0040,0x00000F31); // SDRAMCR0 OK
  MEM_WriteU32(0x402F0044,0x00652922); // SDRAMCR1
  MEM_WriteU32(0x402F0048,0x000a0b0d); // SDRAMCR2
  MEM_WriteU32(0x402F004C,0x0f0f0a00); // SDRAMCR3
  MEM_WriteU32(0x402F0008,0x20200E44); // BMCR0
  MEM_WriteU32(0x402F000C,0x20200E40); // BMCR1
  MEM_WriteU32(0x402F0010,0x8000001D); // BR0, 64MB OK
  MEM_WriteU32(0x402F0040,0x00000E31); // SDRAMCR0 OK
  MEM_WriteU32(0x402F0044,0x00774D22); // SDRAMCR1
  MEM_WriteU32(0x402F0048,0x000A0B0D); // SDRAMCR2
  MEM_WriteU32(0x402F004C,0x09090801); // SDRAMCR3
  MEM_WriteU32(0x402F0090,0x80000000); // IPCR0 OK
  MEM_WriteU32(0x402F0094,0x00000002); // IPCR1 OK
  MEM_WriteU32(0x402F0098,0x00000000); // IPCR2 OK

A evkbimxrt1050_sdram_init_T6.jlinkscript => evkbimxrt1050_sdram_init_T6.jlinkscript +258 -0
@@ 0,0 1,258 @@
/*
 * Copyright 2017 NXP
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * o Redistributions of source code must retain the above copyright notice, this list
 *   of conditions and the following disclaimer.
 *
 * o Redistributions in binary form must reproduce the above copyright notice, this
 *   list of conditions and the following disclaimer in the documentation and/or
 *   other materials provided with the distribution.
 *
 * o Neither the name of the copyright holder nor the names of its
 *   contributors may be used to endorse or promote products derived from this
 *   software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
void Load_Dcdc_Trim()
{
  unsigned int ocotp_base;  
  unsigned int dcdc_base;  
  unsigned int ocotp_fuse_bank0_base;  
  unsigned int reg;
  unsigned int index;
  unsigned int trim_value;
  unsigned int dcdc_trim_loaded;
  ocotp_base = 0x401F4000;
  ocotp_fuse_bank0_base = 0x401F4000 + 0x400;
  dcdc_base = 0x40080000;
  dcdc_trim_loaded = 0;
  reg = MEM_ReadU32(ocotp_fuse_bank0_base + 0x90);
  if (reg & (1<<10))
  {
      trim_value = (reg & (0x1F << 11)) >> 11;
      reg = (MEM_ReadU32(dcdc_base + 0x4) & ~(0x1F << 24)) | (trim_value << 24);
      MEM_WriteU32(dcdc_base + 0x4, reg);
      dcdc_trim_loaded = 1;
  }
  // DCDC_VOLT_CHANG_EN
  reg = MEM_ReadU32(ocotp_fuse_bank0_base + 0x80);
  if (reg & (1<<30))
  {
    index = (reg & (3 << 28)) >> 28;
    if (index < 4)
    {
      reg = (MEM_ReadU32(dcdc_base + 0xC) & ~(0x1F)) | (0xF + index);
      MEM_WriteU32(dcdc_base + 0xC, reg);
      dcdc_trim_loaded = 1;
    }
  }
  if (dcdc_trim_loaded)
  {
      // delay 1ms for dcdc to get stable
      SYS_Sleep(1);
      JLINK_SYS_Report("DCDC trim value loaded.");
  }
}
 
void Clock_Init() 
{
    //
  MEM_WriteU32(0x400FC068,0xffffffff);
  MEM_WriteU32(0x400FC06C,0xffffffff);

  MEM_WriteU32(0x400FC070,0xffffffff);
  MEM_WriteU32(0x400FC074,0xffffffff);
  MEM_WriteU32(0x400FC078,0xffffffff);
  MEM_WriteU32(0x400FC07C,0xffffffff);
  MEM_WriteU32(0x400FC080,0xffffffff);
  MEM_WriteU32(0x400D8030,0x00002001); // CCM_ANALOG_PLL_SYS
  MEM_WriteU32(0x400D8100,0x001d0000);  // CCM_ANALOG_PFD_528
  MEM_WriteU32(0x400FC014,0x00010D40); // CCM_CBCDR
  JLINK_SYS_Report("Clock Init Done");
}
void SDRAM_WaitIpCmdDone(void) 
{
  unsigned int reg;
  do
  {
      reg = MEM_ReadU32(0x402F003C);
  }while((reg & 0x3) == 0);
  
  MEM_WriteU32(0x402F003C,0x00000003); // clear IPCMDERR and IPCMDDONE bits
}
void SDRAM_Init() {
  // Config IOMUX for SDRAM
  MEM_WriteU32(0x401F8014,0x00000000); // EMC_00
  MEM_WriteU32(0x401F8018,0x00000000); // EMC_01
  MEM_WriteU32(0x401F801C,0x00000000); // EMC_02
  MEM_WriteU32(0x401F8020,0x00000000); // EMC_03
  MEM_WriteU32(0x401F8024,0x00000000); // EMC_04
  MEM_WriteU32(0x401F8028,0x00000000); // EMC_05
  MEM_WriteU32(0x401F802C,0x00000000); // EMC_06
  MEM_WriteU32(0x401F8030,0x00000000); // EMC_07
  MEM_WriteU32(0x401F8034,0x00000000); // EMC_08
  MEM_WriteU32(0x401F8038,0x00000000); // EMC_09
  MEM_WriteU32(0x401F803C,0x00000000); // EMC_10
  MEM_WriteU32(0x401F8040,0x00000000); // EMC_11
  MEM_WriteU32(0x401F8044,0x00000000); // EMC_12
  MEM_WriteU32(0x401F8048,0x00000000); // EMC_13
  MEM_WriteU32(0x401F804C,0x00000000); // EMC_14
  MEM_WriteU32(0x401F8050,0x00000000); // EMC_15
  MEM_WriteU32(0x401F8054,0x00000000); // EMC_16
  MEM_WriteU32(0x401F8058,0x00000000); // EMC_17
  MEM_WriteU32(0x401F805C,0x00000000); // EMC_18
  MEM_WriteU32(0x401F8060,0x00000000); // EMC_19
  MEM_WriteU32(0x401F8064,0x00000000); // EMC_20
  MEM_WriteU32(0x401F8068,0x00000000); // EMC_21
  MEM_WriteU32(0x401F806C,0x00000000); // EMC_22
  MEM_WriteU32(0x401F8070,0x00000000); // EMC_23
  MEM_WriteU32(0x401F8074,0x00000000); // EMC_24
  MEM_WriteU32(0x401F8078,0x00000000); // EMC_25
  MEM_WriteU32(0x401F807C,0x00000000); // EMC_26
  MEM_WriteU32(0x401F8080,0x00000000); // EMC_27
  MEM_WriteU32(0x401F8084,0x00000000); // EMC_28
  MEM_WriteU32(0x401F8088,0x00000000); // EMC_29
  MEM_WriteU32(0x401F808C,0x00000000); // EMC_30
  MEM_WriteU32(0x401F8090,0x00000000); // EMC_31
  MEM_WriteU32(0x401F8094,0x00000000); // EMC_32
  MEM_WriteU32(0x401F8098,0x00000000); // EMC_33
  MEM_WriteU32(0x401F809C,0x00000000); // EMC_34
  MEM_WriteU32(0x401F80A0,0x00000000); // EMC_35
  MEM_WriteU32(0x401F80A4,0x00000000); // EMC_36
  MEM_WriteU32(0x401F80A8,0x00000000); // EMC_37
  MEM_WriteU32(0x401F80AC,0x00000000); // EMC_38
  MEM_WriteU32(0x401F80B0,0x00000010); // EMC_39
  
  // PAD ctrl
  // drive strength = 0x7 to increase drive strength
  // otherwise the data7 bit may fail.
  MEM_WriteU32(0x401F8204,0x000110F9); // EMC_00
  MEM_WriteU32(0x401F8208,0x000110F9); // EMC_01
  MEM_WriteU32(0x401F820C,0x000110F9); // EMC_02
  MEM_WriteU32(0x401F8210,0x000110F9); // EMC_03
  MEM_WriteU32(0x401F8214,0x000110F9); // EMC_04
  MEM_WriteU32(0x401F8218,0x000110F9); // EMC_05
  MEM_WriteU32(0x401F821C,0x000110F9); // EMC_06
  MEM_WriteU32(0x401F8220,0x000110F9); // EMC_07
  MEM_WriteU32(0x401F8224,0x000110F9); // EMC_08
  MEM_WriteU32(0x401F8228,0x000110F9); // EMC_09
  MEM_WriteU32(0x401F822C,0x000110F9); // EMC_10
  MEM_WriteU32(0x401F8230,0x000110F9); // EMC_11
  MEM_WriteU32(0x401F8234,0x000110F9); // EMC_12
  MEM_WriteU32(0x401F8238,0x000110F9); // EMC_13
  MEM_WriteU32(0x401F823C,0x000110F9); // EMC_14
  MEM_WriteU32(0x401F8240,0x000110F9); // EMC_15
  MEM_WriteU32(0x401F8244,0x000110F9); // EMC_16
  MEM_WriteU32(0x401F8248,0x000110F9); // EMC_17
  MEM_WriteU32(0x401F824C,0x000110F9); // EMC_18
  MEM_WriteU32(0x401F8250,0x000110F9); // EMC_19
  MEM_WriteU32(0x401F8254,0x000110F9); // EMC_20
  MEM_WriteU32(0x401F8258,0x000110F9); // EMC_21
  MEM_WriteU32(0x401F825C,0x000110F9); // EMC_22
  MEM_WriteU32(0x401F8260,0x000110F9); // EMC_23
  MEM_WriteU32(0x401F8264,0x000110F9); // EMC_24
  MEM_WriteU32(0x401F8268,0x000110F9); // EMC_25
  MEM_WriteU32(0x401F826C,0x000110F9); // EMC_26
  MEM_WriteU32(0x401F8270,0x000110F9); // EMC_27
  MEM_WriteU32(0x401F8274,0x000110F9); // EMC_28
  MEM_WriteU32(0x401F8278,0x000110F9); // EMC_29
  MEM_WriteU32(0x401F827C,0x000110F9); // EMC_30
  MEM_WriteU32(0x401F8280,0x000110F9); // EMC_31
  MEM_WriteU32(0x401F8284,0x000110F9); // EMC_32
  MEM_WriteU32(0x401F8288,0x000110F9); // EMC_33
  MEM_WriteU32(0x401F828C,0x000110F9); // EMC_34
  MEM_WriteU32(0x401F8290,0x000110F9); // EMC_35
  MEM_WriteU32(0x401F8294,0x000110F9); // EMC_36
  MEM_WriteU32(0x401F8298,0x000110F9); // EMC_37
  MEM_WriteU32(0x401F829C,0x000110F9); // EMC_38
  MEM_WriteU32(0x401F82A0,0x000110F9); // EMC_39

  // Config SDR Controller Registers/
  MEM_WriteU32(0x402F0000,0x10000004); // MCR
  MEM_WriteU32(0x402F0008,0x00030524); // BMCR0
  MEM_WriteU32(0x402F000C,0x06030524); // BMCR1
  MEM_WriteU32(0x402F0010,0x80000019); // BR0, 16MB OK
  MEM_WriteU32(0x402F0040,0x00000F31); // SDRAMCR0 OK
  MEM_WriteU32(0x402F0044,0x00652922); // SDRAMCR1
  MEM_WriteU32(0x402F0048,0x000a0b0d); // SDRAMCR2
  MEM_WriteU32(0x402F004C,0x0f0f0a00); // SDRAMCR3
  MEM_WriteU32(0x402F0090,0x80000000); // IPCR0 OK
  MEM_WriteU32(0x402F0094,0x00000002); // IPCR1 OK
  MEM_WriteU32(0x402F0098,0x00000000); // IPCR2 OK
  MEM_WriteU32(0x402F009C,0xA55A000F); // IPCMD, SD_CC_IPREA
  SDRAM_WaitIpCmdDone();
  MEM_WriteU32(0x402F009C,0xA55A000C); // SD_CC_IAF
  SDRAM_WaitIpCmdDone();
  MEM_WriteU32(0x402F009C,0xA55A000C); // SD_CC_IAF
  SDRAM_WaitIpCmdDone();
  MEM_WriteU32(0x402F00A0,0x00000033); // IPTXDAT OK
  MEM_WriteU32(0x402F009C,0xA55A000A); // SD_CC_IMS
  SDRAM_WaitIpCmdDone();
  MEM_WriteU32(0x402F004C,0x08080A01 ); // enable sdram self refresh again after initialization done.

  JLINK_SYS_Report("SDRAM Init Done");
}
void INTRAM_Init() {
    unsigned int gpr14_addr;
    unsigned int gpr16_addr;
    unsigned int gpr17_addr;
    unsigned int ret;
    
    gpr14_addr = 0x400AC038;
    gpr16_addr = 0x400AC040;
    gpr17_addr = 0x400AC044;
    ret = 0;
    
    // 448 KBytes of DTCM
    MEM_WriteU32(gpr17_addr,0x5AAAAAAA);
    
    
    ret = MEM_ReadU32(gpr16_addr);
    
    // Turn off DTCM
    //ret &= ~0x02;
    // Turn off ITCM
    ret &= ~0x01;
    MEM_WriteU32(gpr16_addr,ret);
    
    
    // Configure DTCM/ITCM size
    ret = MEM_ReadU32(gpr14_addr);
    // Mask ITCM/DTCM size bits
    ret &= ~0xFF0000;
    // Set DTCM size to 512KBytes
    ret |= 0xA00000;
    MEM_WriteU32(gpr14_addr,ret);
    
    ret = MEM_ReadU32(gpr16_addr);
    
    // FlexRAM_BANK_CFG_SEL
    ret &= ~0x04;
    ret |= 0x04;
    MEM_WriteU32(gpr16_addr,ret);
    JLINK_SYS_Report("INTRAM Init Done");
}
/* SetupTarget */
int AfterResetTarget(void) {
  JLINK_SYS_Report("Enabling i.MXRT SDRAM");
  /*Load_Dcdc_Trim();*/
  Clock_Init();
  SDRAM_Init();
  INTRAM_Init();
  JLINK_SYS_Report("Enable Power Switch On for debug");
  MEM_WriteU32(0x401BC000, 128);
}

M module-bsp/board/rt1051/common/board.cpp => module-bsp/board/rt1051/common/board.cpp +9 -1
@@ 155,7 155,11 @@ namespace bsp
         * BOARD_SDRAM_TEXT
         */
        MPU->RBAR = ARM_MPU_RBAR(7, 0x80000000U);
#if defined(PURE_SDRAM_64_MB) && (PURE_SDRAM_64_MB == 1)
        MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_RO, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_64MB);
#else
        MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_RO, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_16MB);
#endif

        /* The define sets the cacheable memory to shareable,
         * this suggestion is referred from chapter 2.2.1 Memory regions,


@@ 169,8 173,12 @@ namespace bsp
         * BOARD_SDRAM_HEAP
         */
        MPU->RBAR = ARM_MPU_RBAR(9, reinterpret_cast<std::uintptr_t>(__sdram_cached_start));
#if defined(PURE_SDRAM_64_MB) && (PURE_SDRAM_64_MB == 1)
        MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_64MB);
#else
        MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_16MB);
#endif
#endif // PURE_SDRAM_64_MB
#endif // SDRAM_IS_SHAREABLE

        /* Enable MPU */
        ARM_MPU_Enable(MPU_CTRL_PRIVDEFENA_Msk);