STM32 SDRAM 程序运动
STM32 SDRAM 程序运动
在STM32微控制器上运行程序于SDRAM中(也称为XiP,eXecute in Place),需要以下关键步骤和注意事项:
核心步骤:
-
硬件初始化:
- 通过FSMC/FMC控制器配置SDRAM的时序参数(地址线、数据线、时钟、刷新周期等)。
- 使用STM32CubeMX生成初始化代码,或手动编写SDRAM初始化函数(如
MX_SDRAM_Init())。
-
MPU配置 (Cache一致性关键):
- 为SDRAM区域配置MPU属性,确保指令可执行:
- 类型设置为
Normal Memory。 - 权限设置为
Read/Write/Execute。 - 缓存策略(如
Write-back, Read/write allocate)。// HAL库示例(H7系列) MPU_Region_InitTypeDef mpu; HAL_MPU_Disable(); mpu.Enable = MPU_REGION_ENABLE; mpu.BaseAddress = 0xD0000000; // SDRAM起始地址 mpu.Size = MPU_REGION_SIZE_32MB; mpu.AccessPermission = MPU_REGION_FULL_ACCESS; mpu.IsExecutable = MPU_INSTRUCTION_ACCESS_ENABLE; mpu.TypeExtField = MPU_TEX_LEVEL1; mpu.IsShareable = MPU_ACCESS_NOT_SHAREABLE; mpu.IsCacheable = MPU_ACCESS_CACHEABLE; mpu.IsBufferable = MPU_ACCESS_BUFFERABLE; HAL_MPU_ConfigRegion(&mpu); HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
- 类型设置为
- 为SDRAM区域配置MPU属性,确保指令可执行:
-
链接脚本修改:
- 在链接脚本(
.ld文件)中定义SDRAM区域,并将特定代码段(如.text)映射到SDRAM。MEMORY { SDRAM (rwx) : ORIGIN = 0xD0000000, LENGTH = 32M /* 假设SDRAM地址空间 */ } .sdram_text : { *(.sdram_section) /* 将.sdram_section段放入SDRAM */ } >SDRAM
- 在链接脚本(
-
代码重定位:
- 将编译后的代码从Flash复制到SDRAM(需在main()前完成):
extern uint32_t _ssdram_text, _esdram_text, _sisdram_text; void CopyCodeToSDRAM(void) { uint32_t *src = &_sisdram_text; // Flash中的代码起始地址 uint32_t *dst = &_ssdram_text; // SDRAM目标地址 while (dst < &_esdram_text) *dst++ = *src++; } // 在SystemInit()后、main()前调用
- 将编译后的代码从Flash复制到SDRAM(需在main()前完成):
-
函数定位到SDRAM:
- 使用
__attribute__指定函数/变量到SDRAM段:__attribute__((section(".sdram_section"))) void RunInSDRAM(void) { // 此函数将在SDRAM中执行 }
- 使用
关键注意事项:
- 启动顺序:SDRAM初始化必须在任何SDRAM访问之前完成(通常在
Startup_*.s调用SystemInit()后立即执行)。 - 缓存一致性:启用Cache时,必须通过MPU正确配置缓存策略,否则可能导致指令取指错误。
- 性能影响:SDRAM延迟高于内部RAM,可能影响实时性,需评估时序。
- 供电稳定性:SDRAM需持续供电保持数据,断电后代码丢失(需每次启动重加载)。
调试技巧:
- 检查SCB->VTOR寄存器,确认向量表地址正确。
- 使用调试器查看SDRAM内容,确认代码已正确复制。
- 若HardFault,检查MPU配置和SDRAM时序参数。
通过以上步骤,STM32即可从SDRAM中安全执行代码,适用于需要大容量内存的算法(如图像处理、音视频缓冲等场景)。
STM32H750如何使用IAR调试运行在外部SDRAM的程序?
正在使用STM32H750开发应用。 我的用户程序,储存在QSPI Flash中,运行在SDRAM中,采用了Bootloader来复制
sdram容量改大后,程序hardfault异常怎么解决?
sdram型号:IS42S16160J 256MB bsp里面的sdram是32M的,我的板子是256M的,当SDRAM_SIZE为32M时,板
如何使用SDRAM bank1从引导加载程序加载QSP应用程序呢?
(0X30000000)。在我的 MCU STM32H750XBH6U 单核 M7 中。在引导加载程序中,将图像从 QSPI 复制到 SDRAM
STM32H750_FMC_SDRAM 初始化流程总结
STM32H750_FMC_SDRAM使用STM32CUBEMX 初始化FMC部分,SDRAM 关于延时部分参数模式寄存器#define
资料下载
佚名
2021-12-29 18:49:01
FPGA作为ARM的SDRAM使用的LPC3250与FPGA接口程序
FPGA作为ARM的SDRAM使用的LPC3250与FPGA接口程序(华为嵌入式开发工程师拉勾网)-FPGA作为ARM的SDRAM使用的LPC3
资料下载
佚名
2021-08-04 12:09:30
SDRAM存储器模块的简介
SDRAM与 Flash不同,它不具有掉电保持数据的特性,但其存取速度大大高于 Flash存储器,且具有读/写的属性,因此 SDRAM在系统中主要用作程序
资料下载
佚名
2020-12-18 16:13:16
使用FPGA读写SDRAM存储器的实例工程文件和程序免费下载
本文档的主要内容详细介绍的是使用FPGA读写SDRAM存储器的实例工程文件和程序免费下载。
资料下载
佚名
2020-12-18 16:13:13
SDRAM它是怎么工作的?
结构体一、SDRAM 同步动态随机存储器(也是一个芯片)问题:它出什么地方来的呢?为什么会用到它?它怎么工作的?stm32控制芯片内部有一定大小的SRAM和FLASH作为内存和
关于STM32F429控制SDRAM
关于STM32F429控制SDRAM(FMC—扩展外部SDRAM )(1)原理介绍:》为什么是FMC 不是 FSMC ?区别在那里!
STM32F429 使用外扩 SDRAM 运行程序 的方法分享~
,因此,需要在 IAR 链接前(数据的拷贝)完成 SDRAM 控制器的初始化工作,ST 已经提供相关代码供客户参考(初始化程序在system_stm32
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机