【STM32H7教程】第25章 STM32H7的TCM,SRAM等五块内存基础知识
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980
第25章 STM32H7的TCM,SRAM等五块内存基础知识
本章教程为大家介绍STM32H7带的ITCM,DTCM,AXI SRAM,SRAM1,SRAM2,SRAM3,SRAM4和备份SRAM的基础知识。
25.1 初学者重要提示
25.2 各块RAM在总线中的位置
25.3 各块RAM的特性
25.4 各块RAM的时钟问题
25.5 各块RAM的DMA问题
25.6 实际工程推荐的RAM分配方案
25.7 总结
25.1 初学者重要提示
- TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。
- 特别注意本章25.5小节里面各块RAM的DMA操作问题。
25.2 各块RAM在总线中的位置
这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。

这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。
1、 ITCM和DTCM
这两个是直连CPU的。
2、 D1 Domain
D1域中的各个外设是挂在64位AXI总线组成6*7的矩阵上。
- 6个从接口端ASIB1到ASIB6
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。
- 7个主接口端AMIB1到AMIB7
外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由AXI总线分支出来的,然后再由AHB3分支出APB3总线。
3、 D2 Domain
D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。
- 10个从接口
外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
- 9个主接口
外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。
4、 D3 Domain
D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。
- 3个从接口
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。
- 2个主接口
外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线
25.3 各块RAM特性
各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。
- TCM区
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
速度:400MHz。
DTCM地址:0x2000 0000,大小128KB。
ITCM地址:0x0000 0000,大小64KB。
- AXI SRAM区
位于D1域,数据带宽是64bit,挂在AXI总线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
速度:200MHz。
地址:0x2400 0000,大小512KB。
用途:用途不限,可以用于用户应用数据存储或者LCD显存。
- SRAM1,SRAM2和SRAM3区
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。
速度:200MHz。
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
- SRAM4区
位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
速度:200MHz。
地址:0x3800 0000,大小64KB。
用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。
- Backup SRAM区
备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
速度:200MHz。
地址:0x3880 0000,大小4KB。
用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。
25.4 各块RAM的时钟问题
正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。

也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:
#if 0
__HAL_RCC_D2SRAM1_CLK_ENABLE();
__HAL_RCC_D2SRAM2_CLK_ENABLE();
__HAL_RCC_D2SRAM3_CLK_ENABLE();
#endif
25.5 各块RAM的DMA问题
了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:

- 加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。
- 访问通路(每个小方块里面的字符)
任何有数字的表示有访问通路。
短横杠“-”表示不可访问。
有灰色阴影的表示有实用价值的访问通路。
- 表格中具体数值所代表的含义
D=direct,
1=via AXI bus matrix,
2=via AHB bus matrix in D2,
3=via AHB bus matrix in D3,
4=via AHB/APB bridge in D1,
5=via AHB/APB bridge in D2,
6=via AHB/APB bridge in D3,
7=via AHBS bus of Cortex-M7,
多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
- 总线访问类型
普通字体表示32位总线。
斜体表示32位总线主机端/ 64位总线从机端。
粗体表示64位总线。
通过这个总线互联图,要了解到下面三个重要知识点:
- DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。
- AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。
- SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。
25.6 实际工程推荐的RAM分配方案
鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。
本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。
25.7 总结
本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。
【STM32H7教程】第25章 STM32H7的TCM,SRAM等五块内存基础知识的更多相关文章
- 【STM32H7教程】第27章 STM32H7的TCM,SRAM等五块内存的动态内存分配实现
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第27章 STM32H7的TCM,SRAM等五块内 ...
- 【STM32H7教程】第26章 STM32H7的TCM,SRAM等五块内存的超方便使用方式
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第26章 STM32H7的TCM,SRAM等五块 ...
- 【STM32H7教程】第28章 STM32H7时间关键代码在ITCM执行的超简单方法
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第28章 STM32H7时间关键代码在ITCM执行 ...
- 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章 STM32H7的TIM定时器基础知识和H ...
- (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识
开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用 ...
- 【STM32H7教程】第33章 STM32H7的定时器应用之TIM1-TIM17的中断实现
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第33章 STM32H7的定时器应用之TIM1-T ...
- 【STM32H7教程】第60章 STM32H7的DAC应用之定时器触发实现DMA方式双通道波形
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第60章 STM32H7的DAC应用之定时器触发实 ...
- 【STM32H7教程】第13章 STM32H7启动过程详解
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章 STM32H7启动过程详解 本章教 ...
- 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章 STM32H7的HAL库框架设计学 ...
随机推荐
- MySQL语句使用。
目录 MySQL的DDL.DML.DQL语句和单表增.删.改.查 实验准备: 实验开始: DDL语句 DML语句 DQL语句 单表操作的分组统计 MySQL的DDL.DML.DQL语句和单表增.删.改 ...
- 分组排序函数——row_number()
1.MySQL8.0以上版本 用法1:无分组排序 Row_number() OVER(ORDER BY 字段 DESC)例如:Row_number() OVER(ORDER BY 学生成绩 DESC) ...
- Python网络爬虫_Scrapy框架_2.logging模块的使用
logging模块提供日志服务 在scrapy框架中已经对其进行一些操作所以使用更为简单 在Scrapy框架中使用: 1.在setting.py文件中设置LOG_LEVEL(设置日志等级,只有高于等于 ...
- php 重复问题
结果: 结论: 尽量在方法内用变量去接受重复的参数或重复的方法/结果,消耗的时间积少成多
- 如何用css实现太极图
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>太 ...
- Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例
1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...
- Winform中封装DevExpress的MarqueeProgressBarComtrol实现弹窗式进度条效果
场景 在Winform中实现弹窗式进度条 就是新建一个窗体,然后在窗体中加入进度条控件,然后在触发进度条的事件中将加载进度报告给 进度条控件. 注: 博客主页: https://blog.csdn.n ...
- 剑指offer笔记面试题13----机器人的运动范围
题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它每次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子.例如,当k为18时,机器人能够进入方格( ...
- 松软科技web课堂:SQLServer之LEN() 函数
LEN() 函数 LEN 函数返回文本字段中值的长度. SQL LEN() 语法 SELECT LEN(column_name) FROM table_name SQL LEN() 实例 我们拥有下面 ...
- 微信小程序 wxml 文件中如何让多余文本省略号显示?
废话不多说,之前写小程序碰到了一个问题,如何在 wxml 页面中截取数据? 1.wxs 取数据想必大家都会,不就是 substring 吗?但是这种方法在 wxml 页面中是无效的. 那还有 cs ...