单片机系统中扩展SDRAM的几个配置步骤
关注+星标公众号,不错过精彩内容
编排 | strongerHuang
微信公众号 | 嵌入式专栏
1概述
在使用MCU的嵌入式系统设计中,当程序或者数据内存占用太大而无法放入片上闪存或SRAM时,开发者通常考虑使用SDRAM。通过文章《SRAM、DRAM、SDRAM的区别》你就能理解他们之间的区别。
2SDRAM初始化
SDRAM必须在使用前进行配置,SDRAM初始化分为6个步骤。
配置EMC寄存器的SDRAM时钟频率、字节顺序和时序参数。
SDRAM的时序比较复杂,用户需要通过查阅相关SDRAM芯片的手册获得时序参数(如刷新周期、预充电命令周期、自刷新退出时间、写恢复时间等等)。发送NOP命令 发送预充电命令 发送两次自动刷新命令 设置SDRAM模式 发送正常运行命令
由于SDRAM初始化函数使用系统堆栈或全局变量,开发者必须确保系统堆栈或全局变量所在的物理内存上电及时钟使能。 在程序跳转到主程序启动之前,全局变量未清零或初始化,如果在主函数之前执行SDRAM初始化,开发者必须手动初始化变量。
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
; clock control SRAM1/SRAM2/SRAM3 for stack
LDR r0, = 0x40000220 ; AHBCLKCTRLSET0
MOV r1, #0x38
STR r1, [r0]
LDR r0, =SystemInit
BLX r0
LDR r0, =__main
BX r0
ENDP
3SDRAM存储器布局
当使用SDRAM时,外部存储控制器(EMC)分配SDRAM一定的地址空间。开发者可以使用链接描述文件将代码或数据分配到SDRAM中。值得注意的是,链接器脚本编程在不同IDE之间是不同的。
SDRAM片选 | 地址范围 |
0 | 0xA0000000 - 0xA7FFFFFF |
1 | 0xA8000000 - 0xAFFFFFFF |
2 | 0xB0000000 - 0xB7FFFFFF |
3 | 0xB8000000 - 0xBFFFFFFF |
定义SDRAM区域,从0xA0000000开始,大小为0x80000。定义SPI FLASH区域,大小为0x80000(SPI FLASH存储器的起始地址为0x10000000)。 在C源码中使用“SDRAM_Data” 和 “SDRAM_Function”属性,标记放在SDRAM区域中的数据或程序。(SDRAM_Data和SDRAM_Function只是文本名字)。 也可以将整个目标文件的数据和程序段配置到SDRAM
#define m_spifi_start 0x10000000
#define m_spifi_size 0x800000
#define m_sdram_start 0xA0000000
#define m_sdram_size 0x80000
LR_m_text2 m_spifi_start m_spifi_size { ; load to SPIFI
LR_m_sdram_text m_sdram_start m_sdram_size {
*(SDRAM_Data) *(SDRAM_Function) core_list_join.o core_matrix.o core_state.o
core_util.o
}
4配置MPU
在SDRAM中运行程序,开发者可能需要配置ARM内核内存保护单元(MPU)。
MPU->RNR = 0; //Region number 0
MPU->RBAR = 0xA0000000; //Region base address
/* Full Access | TEX: 000 | S: 0 | C: 0 | B:0 (No cacheable, no shareable)| 1M SIZE | ENABLE */
MPU->RASR = (0 << 28) | (0x3 << 24) | (0x0 << 19) | (0 << 18) | (0 << 17) | (0 << 16) | (0xFF < 8) | (0x13 << 1) | (1 << 0); //Region size and enable
MPU->CTRL = MPU_CTRL_ENABLE_Msk | MPU_CTRL_PRIVDEFENA_Msk;
5SDRAM性能基准
最后,作者在LPC5460x经过程序运行CoreMark性能基准测试,总结了一点点经验,分享给大家
SDRAM(16位带宽)中的代码执行效率仅为在内部SRAM中执行效率性能40%,大约是内部FLASH中运行代码性能的50%; 代码在SDRAM中运行时,较高的CPU频率(CPU没有Cache)不能改善执行效率,这时SDRAM带宽成为系统性能的瓶颈。
后台回复『单片机』『嵌入式软件设计与开发』阅读更多相关文章。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。