24小时咨询热线

+86 0000 88888

emc动态

News Center
您的位置: emc体育 > emc动态

MCU如何在扩展的SDRAM上运行程序?

发布日期:2022-06-01 13:02浏览次数:

  在使用MCU的嵌入式系统设计中,当程序或者数据内存占用太大而无法放入片上闪存或SRAM时,开发者通常考虑使用SDRAM。

  SDRAM是同步动态随机存取存储器的缩写。在微控制器应用中,微控制器通过使用外部存储控制器(EMC)操作访问SDRAM ,SDRAM时钟频率通常为100MHz或133MHz。

  外部存储控制器通常不支持DDR SDRAM, 数据只是单边沿采样,即并行数据总线可以接受一个命令并在每个时钟周期传输一个数据字。

  在SDRAM中执行程序是使用SDRAM的一种典型用法, 小编这里就介绍一下SDRAM中执行程序的方法和SDRAM执行程序的性能基准。

  SDRAM的时序比较复杂,用户需要通过查阅相关SDRAM芯片的手册获得时序参数(如刷新周期、预充电命令周期、自刷新退出时间、写恢复时间等等)。

  系统启动时,SDRAM尚未初始化。理论上,程序在系统启动后的任何时刻都可以进行SDRAM初始化。然而,由于SDRAM初始化过程比较复杂,使用的系统资源较多,SDRAM初始化必须在所需的系统资源初始化完成后再进行。

  具体上讲,开发者在芯片刚刚启动时(如Reset_Handler中)初始化SDRAM需要留心以下细节:

  由于SDRAM初始化函数使用系统堆栈或全局变量,开发者必须确保系统堆栈或全局变量所在的物理内存上电及时钟使能。

  在程序跳转到主程序启动之前,全局变量未清零或初始化,如果在主函数之前执行SDRAM初始化,开发者必须手动初始化变量。

  当使用SDRAM时,外部存储控制器(EMC)分配SDRAM一定的地址空间。开发者可以使用链接描述文件将代码或数据分配到SDRAM中。值得注意的是,链接器脚本编程在不同IDE之间是不同的。

  以LPC5460x系列微控制器为例,SDRAM支持4个片选区,每个片选区最大支持256MB空间。

  在SDRAM中运行程序,开发者可能需要配置ARM内核内存保护单元(MPU)。

  内存保护单元(MPU)是一个可编程单元,用于定义内存访问权限。当MPU没有使能时,内存地址空间具有默认的访问权限。

  如ARM Cortex™-M4器件通用用户指南中所述,当程序执行SDRAM中的代码且SDRAM内存影射地址的默认属性为禁止执行时, 内核就会产生HARDFAULT异常,且指令访问冲突标志SCB-CFSR为 1,该异常表示处理器尝试从不允许执行的位置获取指令。

  最后,小编在LPC5460x经过程序运行CoreMark性能基准测试,总结了一点点经验,分享给大家

  SDRAM(16位带宽)中的代码执行效率仅为在内部SRAM中执行效率性能40%,大约是内部FLASH中运行代码性能的50%;

  代码在SDRAM中运行时,较高的CPU频率(CPU没有Cache)不能改善执行效率,这时SDRAM带宽成为系统性能的瓶颈。

  基于这样的测试结果,建议大家在要求较高性能时,把程序代码放在内部SRAM执行,而用片外大容量的SDRAM存放海量的数据。

  融创芯城(专业服务小批量的采购和配单要求, 提供一站式电子元器件,PCB,PCBA购买服务,在苏州也有自己的PCBA工厂; 并提供项目众包、方案共享平台、商家免费入驻、工程师交流论坛、共享电子圈、行业最前沿、人才招聘!