rt1050 sdram 问题

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

rt1050 sdram 问题

Jump to solution
3,452 Views
chenyulong3313
Contributor II

你好:

    我在用 imxrt1050-evk,  sdk 版本是2.4.2,  ide是iar,  我发现如果使用flexspi_nor_debug配置的话sdram是没有支持起来的, 能使用的内存就很小了, 如果我想程序存储在flash上, 启动后sdram可用, 应该如何修改呢?

Labels (1)
0 Kudos
1 Solution
2,479 Views
chenyulong3313
Contributor II

已解决. 只修改icf文件还不够, 还要修改C/C++ Compiler->Preprocessor中的Defined symbols:

DEBUG
SKIP_SYSCLK_INIT
XIP_EXTERNAL_FLASH=1
XIP_BOOT_HEADER_ENABLE=1
XIP_BOOT_HEADER_DCD_ENABLE=1
CPU_MIMXRT1052DVL6B
FSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE
FSL_SDK_ENABLE_DRIVER_CACHE_CONTROL=1
PRINTF_ADVANCED_ENABLE=1
USE_RTOS=1
FSL_RTOS_FREE_RTOS

就可以了.

View solution in original post

0 Kudos
4 Replies
2,479 Views
jeremyzhou
NXP Employee
NXP Employee

Hi c yl ,

非常感谢使用NXP产品,很高兴为你提供技术支持!
假设你还是想让代码从QSPI启动,而在这基础上SDRAM也在启动时,一并被初始化的话,你需要配置Bootable image中的DCD(Device Configuration Data),主要用于SDRAM接口控制器(SEMC)的配置。所以我建议参考此篇文章(i.MX RT系列MCU启动那些事(6)- Bootable image格式与加载 )了解一下Bootable image的结构内容,同时参考现成的应用:SDK软件包中的queue工程(在\SDK_2.4.2_EVKB-IMXRT1050\boards\evkbimxrt1050\driver_examples\pxp文件下)
Have a great day,
TIC

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos
2,479 Views
chenyulong3313
Contributor II

感谢您的回复, 现在有这样一个问题, 我在lwip_tcpecho_freertos工程里使用如下的icf文件, 程序会运行异常, 客户端连不上. 用工程自带的flexspi_nor.icf或者sdram.icf, 程序都能正常运行,  搞不清问题出在哪里, 您可以帮我分析一下吗?


define symbol m_interrupts_start = 0x60002000;
define symbol m_interrupts_end = 0x600023FF;

define symbol m_text_start = 0x60002400;
define symbol m_text_end = 0x63FFFFFF;

define symbol m_data_start = 0x20000000;
define symbol m_data_end = 0x2001FFFF;

define symbol m_data2_start = 0x20200000;
define symbol m_data2_end = 0x2023FFFF;

define symbol m_data3_start = 0x80000000;
define symbol m_data3_end = 0x81DFFFFF;

define symbol m_ncache_start = 0x81E00000;
define symbol m_ncache_end = 0x81FFFFFF;

define exported symbol m_boot_hdr_conf_start = 0x60000000;
define symbol m_boot_hdr_ivt_start = 0x60001000;
define symbol m_boot_hdr_boot_data_start = 0x60001020;
define symbol m_boot_hdr_dcd_data_start = 0x60001030;

/* Sizes */
if (isdefinedsymbol(__stack_size__)) {
define symbol __size_cstack__ = __stack_size__;
} else {
define symbol __size_cstack__ = 2048;
}

if (isdefinedsymbol(__heap_size__)) {
define symbol __size_heap__ = __heap_size__;
} else {
define symbol __size_heap__ = 25600;
}

define exported symbol __VECTOR_TABLE = m_interrupts_start;
define exported symbol __VECTOR_RAM = m_interrupts_start;
define exported symbol __RAM_VECTOR_TABLE_SIZE = 0x0;

define memory mem with size = 4G;
define region TEXT_region = mem:[from m_interrupts_start to m_interrupts_end]
| mem:[from m_text_start to m_text_end];

define region DATA_region = mem:[from m_data_start to m_data_end];
define region DATA2_region = mem:[from m_data2_start to m_data2_end];
define region DATA3_region = mem:[from m_data3_start to m_data3_end-__size_cstack__];
define region CSTACK_region = mem:[from m_data3_end-__size_cstack__+1 to m_data3_end];
define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];

define block CSTACK with alignment = 8, size = __size_cstack__ { };
define block HEAP with alignment = 8, size = __size_heap__ { };
define block RW { first readwrite, section m_usb_dma_init_data };
define block ZI with alignment = 32 { first zi, section m_usb_dma_noninit_data };
define block NCACHE_VAR with size = 0x200000 , alignment = 0x100000 { section NonCacheable , section NonCacheable.init };

initialize by copy { readwrite, section .textrw };
do not initialize { section .noinit };

place at address mem: m_interrupts_start { readonly section .intvec };

place at address mem:m_boot_hdr_conf_start { section .boot_hdr.conf };
place at address mem:m_boot_hdr_ivt_start { section .boot_hdr.ivt };
place at address mem:m_boot_hdr_boot_data_start { readonly section .boot_hdr.boot_data };
place at address mem:m_boot_hdr_dcd_data_start { readonly section .boot_hdr.dcd_data };

keep{ section .boot_hdr.conf, section .boot_hdr.ivt, section .boot_hdr.boot_data, section .boot_hdr.dcd_data };

place in TEXT_region { readonly };
place in DATA3_region { block RW };
place in DATA3_region { block ZI };
place in DATA3_region { last block HEAP };
place in CSTACK_region { block CSTACK };
place in NCACHE_region { block NCACHE_VAR };

0 Kudos
2,479 Views
jeremyzhou
NXP Employee
NXP Employee

Hi c yl ,

感谢回复。

请最好介绍一下代码到底出了什么样的错误,比如有什么具体表现,还有你有进入debug模式下测试过吗?
Have a great day,
TIC

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

2,480 Views
chenyulong3313
Contributor II

已解决. 只修改icf文件还不够, 还要修改C/C++ Compiler->Preprocessor中的Defined symbols:

DEBUG
SKIP_SYSCLK_INIT
XIP_EXTERNAL_FLASH=1
XIP_BOOT_HEADER_ENABLE=1
XIP_BOOT_HEADER_DCD_ENABLE=1
CPU_MIMXRT1052DVL6B
FSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE
FSL_SDK_ENABLE_DRIVER_CACHE_CONTROL=1
PRINTF_ADVANCED_ENABLE=1
USE_RTOS=1
FSL_RTOS_FREE_RTOS

就可以了.

0 Kudos