0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32H7实现BootLoader内SDRAM的初始化注意事项

冬至子 来源:喵小黑 作者:喵小黑 2023-06-07 15:51 次阅读

Bootloader

Board:STM32H750_ArtPi

Function Implementation:在 ArtPi 的环境下,实现一个简单的 BootLoader,该 BootLoader 实现了 QSPI 和 SDRAM 功能的初始化,使 App 可以运行在 QSPI 中,并且可以将 SDRAM 当做普通的内部 RAM 使用(但需要注意,仍需要添加 SCB_InvalidateDCache 和 SCB_CleanDCache 等函数来更新缓存,类似于对 AXI SRAM 的操作)。

BootLoader和App实现教程:安富莱_STM32-V7开发板_用户手册,含BSP驱动包设计(V3.5)

注意事项

在 BootLoader 中进行了 MPU 的配置,在 App 中,就无需重复配置;

在 BootLoader 中,最好禁用 I-Cache 和 D-Cache(实际上,我看了一下硬汉的部分代码,实际上,并不强求一定要禁用 I-Cache 和 D-Cache,应该还是根据自己的需求来决定是开启还是关闭);

在 BootLoader 中,配置了 FMC,在 App 中,需要注释以下这段代码:

/*

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;

1.jpg

此段代码位于 system_stm32h7xx.h 中,在进入 main 函数前执行,因此在 main 函数中进行 Debug 可能无法发现此问题。(群友发现的问题)

寄存器地址为 0x52004000,对应 SRAM/NOR-Flash 片选控制寄存器 1(FMC_BCR1)。

#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)

1.jpg

FMC_BCR1 = 0x000030D2; 的作用可以参考 RM0433 22.7.6 节,我们主要关注以下内容:

FMCEN = 0:禁止 FMC 控制器,FMC_BCR2..4 寄存器的 FMCEN 位为“无关”位,只能通过 FMC_BCR1 寄存器使能 ;

在未注释此行代码时,FMC Bank1会被关闭(复位后启用),阻止 24 \\mu s24μs 内的 FMC 的使用,这会导致 MemMange 错误,导致程序进入 MemMange_Handler(可能会被误认为是 BootLoader 未成功跳转,但其实是跳转了,然后立即产生总线错误)。有趣的是,如果在 BootLoader 内,对 SDRAM 进行一次读或写操作,则不会产生该报警错误。

未进行读写操作,App 进入 MemMange_Handler

1.jpg

进行读写操作,App 不进入MemMange_Handler

1.jpg

在完成以上配置后,就可以在 App 中,像内置 RAM 一样使用 SDRAM。

先在 LinkerScript 内添加以下内容(UNINIT 确保该内存区域不会被初始化为 0):

RW_IRAM7 0xC0000000 UNINIT 0x02000000 { ; RW data - 32MB SDRAM(0xC0000000)

*(.RAM_SDRAM)

}

使用如下:

uint32_t testValue attribute ((section(".RAM_SDRAM")));

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FMC
    FMC
    +关注

    关注

    0

    文章

    74

    浏览量

    19548
  • SDRAM控制器
    +关注

    关注

    0

    文章

    28

    浏览量

    8075
  • 控制寄存器
    +关注

    关注

    0

    文章

    34

    浏览量

    11432
  • QSPI接口
    +关注

    关注

    0

    文章

    14

    浏览量

    3277
  • stm32h7
    +关注

    关注

    0

    文章

    36

    浏览量

    1753
收藏 人收藏

    评论

    相关推荐

    转:Kbootbootloader工程应用注意事项总结

    了基于各种MCU的bootloader工程(图1所示),每种芯片都提供了IAR、KDS两类IDE工程,在本篇中,以K64F120的IAR工程为例(图2所示),介绍各个bootloader工程使用步骤,及注意事项,具体内容小伙伴可
    发表于 08-19 14:17

    STM32H7配备512MB SDRAM

    的问题是:我可以在非DDR控制器上使用DDR芯片吗?尝试将512MB外部SDRAM添加到STM32H7是否很疯狂?或者为什么很难找到符合这些标准的内存模块?或许Quad-SPI Flash更合适吗?我担心它对于音频延迟应用来说太慢了。
    发表于 09-25 16:57

    介绍STM32H7内置的系统bootloader的基础知识

    第67章 STM32H7的系统bootloader基础知识本章为大家介绍STM32H7内置的系统bootloader的基础知识。目录第67章 STM
    发表于 08-11 08:10

    STM32H7系列芯片及bootloader引导程序

    最近公司开发的一个项目使用到STM32H7系列芯片,由于该系列芯片内部flash只有128k,为了方便产品的远程升级,需要开发对应的升级协议及bootloader引导程序。由于片flash容量不够
    发表于 08-13 08:47

    STM32H7的系统bootloader之串口IAP固件升级

    第69章 STM32H7的系统bootloader之串口IAP固件升级本章节为大家讲解使用系统bootloader做程序升级的方法,即使不依赖外部boot引脚也可以方便升级。IAP的全称是In Application Progr
    发表于 08-20 06:04

    STM32H7是如何启动的

    STM32H7的启动过程分析启动文件不同编译器对应的启动文件不同,在MDK下,以startup_stm32h743xx.s为例,这是一个汇编文件,启动文件中主要做了如下事情:设置堆栈指针 SP
    发表于 08-20 06:07

    Stm32bootloader和App的编写注意事项有哪些?

    Stm32bootloader和App的编写注意事项有哪些?如何使用STM32F4的BootLoader和APP程序?
    发表于 10-29 07:35

    如何对AVR的bootloader进行设置?有什么注意事项

    如何对AVR的bootloader进行设置?有什么注意事项
    发表于 11-01 07:01

    关于STM32F103C8T6 Systick的一些注意事项

    开发板:普中A7开发板STM32核心板:STM32F103C8T6关于Systick的一些注意事项都在下面的备注中。/*********************************
    发表于 01-07 07:52

    STM32H750_FMC_SDRAM初始化流程是怎样的?

    STM32H750_FMC_SDRAM初始化流程是怎样的?
    发表于 02-22 06:59

    RTT LVGL软件包在STM32H7上移植大体步骤

    初始化内容放到borad.c中即可。至此,保证,rcc,clock,mpu,ltdc的初始化能在rtt初始化完成,即可。3、移植内容lv_port_disp.clv_conf.
    发表于 08-02 16:03

    STM32H7技术详解

    STM32H7 系统架构 • 单核及双核STM32H7系统框图 • AXI 总线及互联 • ART 加速器 • STM32H7 存储器 结构 • STM32H7 Cache •
    发表于 09-07 06:01

    stm32 fft库使用注意事项

    stm32 fft库使用方法 与 注意事项
    发表于 11-02 10:55 0次下载

    STM32H750_FMC_SDRAM 初始化流程总结

    STM32H750_FMC_SDRAM使用STM32CUBEMX 初始化FMC部分,SDRAM 关于延时部分参数模式寄存器#define SDRAM
    发表于 12-29 18:49 2次下载
    <b class='flag-5'>STM32H750_FMC_SDRAM</b> <b class='flag-5'>初始化</b>流程总结

    STM32H7双核CM4作为Master初始化系统

    电子发烧友网站提供《STM32H7双核CM4作为Master初始化系统.pdf》资料免费下载
    发表于 09-20 09:13 0次下载
    <b class='flag-5'>STM32H7</b>双核CM4作为Master<b class='flag-5'>初始化</b>系统