Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
STM32H750XB
STM32H7 实现 BootLoader 内 SDRAM 的初始化的注意事项
发布于 2023-06-03 14:34:58 浏览:1066
订阅该版
[tocm] # Bootloader Board:STM32H750_ArtPi Function Implementation:在 ArtPi 的环境下,实现一个简单的 BootLoader,该 BootLoader 实现了 QSPI 和 SDRAM 功能的初始化,使 App 可以运行在 QSPI 中,并且可以将 SDRAM 当做普通的内部 RAM 使用(但需要注意,仍需要添加 `SCB_InvalidateDCache` 和 `SCB_CleanDCache` 等函数来更新缓存,类似于对 AXI SRAM 的操作)。 SDRAM 配置参考:[STM32H750XB-Learning/SDRAM_Config (github.com)](https://github.com/STM32H750XB-Learning/SDRAM_Config) MPU配置参考:[STM32H750XB-Learning/MPU_Cache_Config (github.com)](https://github.com/STM32H750XB-Learning/MPU_Cache_Config) App代码:[STM32H750XB-Learning/App: Applicaiton Temp For STM32H750 (github.com)](https://github.com/STM32H750XB-Learning/App) BootLoader代码:[STM32H750XB-Learning/Bootloader (github.com)](https://github.com/STM32H750XB-Learning/Bootloader) BootLoader和App实现教程:安富莱\_STM32-V7开发板_用户手册,含BSP驱动包设计(V3.5) # 注意事项 1. 在 BootLoader 中进行了 MPU 的配置,在 App 中,就无需重复配置; 2. 在 BootLoader 中,最好禁用 I-Cache 和 D-Cache(实际上,我看了一下硬汉的部分代码,实际上,并不强求一定要禁用 I-Cache 和 D-Cache,应该还是根据自己的需求来决定是开启还是关闭); 3. 在 BootLoader 中,配置了 FMC,在 App 中,需要注释以下这段代码: ```c /* * Disable the FMC bank1 (enabled after reset). * This, prevents CPU speculation access on this bank which blocks the use of FMC during * 24us. During this time the others FMC master (such as LTDC) cannot use it! */ // FMC_Bank1_R->BTCR[0] = 0x000030D2; ``` ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230603/bcd79f49f0497de6a67904b4dd1db280.png.webp) 此段代码位于 `system_stm32h7xx.h` 中,在进入 `main` 函数前执行,因此在 `main` 函数中进行 `Debug` 可能无法发现此问题。(群友发现的问题) 此寄存器地址为 `0x52004000`,对应 SRAM/NOR-Flash 片选控制寄存器 1(`FMC_BCR1`)。 ```c #define PERIPH_BASE (0x40000000UL) /*!< Base address of : AHB/APB Peripherals */ #define D1_AHB1PERIPH_BASE (PERIPH_BASE + 0x12000000UL) #define FMC_R_BASE (D1_AHB1PERIPH_BASE + 0x4000UL) /*!< FMC Banks registers base address */ #define FMC_Bank1_R_BASE (FMC_R_BASE + 0x0000UL) #define FMC_Bank1_R ((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE) ``` ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230603/a9b0d3aa94f8d3b44aa75ad6975998b8.png.webp) `FMC_BCR1 = 0x000030D2;` 的作用可以参考 RM0433 22.7.6 节,我们主要关注以下内容: - `FMCEN = 0`:禁止 FMC 控制器,`FMC_BCR2..4` 寄存器的 `FMCEN` 位为“无关”位,**只能通过 `FMC_BCR1` 寄存器使能** ; 在未注释此行代码时,FMC Bank1会被关闭(复位后启用),阻止 $$24 \mu s$$ 内的 FMC 的使用,这会导致 MemMange 错误,导致程序进入 `MemMange_Handler`(可能会被误认为是 BootLoader 未成功跳转,但其实是跳转了,然后立即产生总线错误)。有趣的是,如果在 `BootLoader` 内,对 SDRAM 进行一次读或写操作,则不会产生该报警错误。
未进行读写操作,App 进入 MemMange_Handler
![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230603/2c51f526a447d6587d1f3a84d5db49c7.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230603/ea1ae71f5f115cb95bb61dd73f1deb4e.png)
进行读写操作,App 不进入MemMange_Handler
![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230603/49152a4ca724d26cf9c02645283f9c4c.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230603/da4594d08fa7c6b111a87e9e69140d47.png) 4. 在完成以上配置后,就可以在 App 中,像内置 RAM 一样使用 SDRAM。 - 先在 LinkerScript 内添加以下内容(`UNINIT` 确保该内存区域不会被初始化为 `0`): ``` RW_IRAM7 0xC0000000 UNINIT 0x02000000 { ; RW data - 32MB SDRAM(0xC0000000) *(.RAM_SDRAM) } ``` - 使用如下: ```c uint32_t testValue __attribute__((section(".RAM_SDRAM"))); ``` 感谢群内大佬的倾情帮助,此处@各位大佬
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
喵小黑
这家伙很懒,什么也没写!
文章
5
回答
3
被采纳
0
关注TA
发私信
相关文章
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部