完整教程下载地址: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 初学者重要提示

  1. TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。
  2. 特别注意本章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位总线。

通过这个总线互联图,要了解到下面三个重要知识点:

  1. DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。
  2. AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。
  3. 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等五块内存基础知识的更多相关文章

  1. 【STM32H7教程】第27章 STM32H7的TCM,SRAM等五块内存的动态内存分配实现

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第27章       STM32H7的TCM,SRAM等五块内 ...

  2. 【STM32H7教程】第26章 STM32H7的TCM,SRAM等五块内存的超方便使用方式

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980  第26章       STM32H7的TCM,SRAM等五块 ...

  3. 【STM32H7教程】第28章 STM32H7时间关键代码在ITCM执行的超简单方法

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第28章       STM32H7时间关键代码在ITCM执行 ...

  4. 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章       STM32H7的TIM定时器基础知识和H ...

  5. (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识

    开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用 ...

  6. 【STM32H7教程】第33章 STM32H7的定时器应用之TIM1-TIM17的中断实现

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第33章       STM32H7的定时器应用之TIM1-T ...

  7. 【STM32H7教程】第60章 STM32H7的DAC应用之定时器触发实现DMA方式双通道波形

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第60章       STM32H7的DAC应用之定时器触发实 ...

  8. 【STM32H7教程】第13章 STM32H7启动过程详解

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章       STM32H7启动过程详解 本章教 ...

  9. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

随机推荐

  1. Shell批量SSH免交互登录认证

    脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和C ...

  2. 数据结构导论 四 线性表的顺序存储VS链式存储

    前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...

  3. Java学习笔记(9)--- 重写,重载,多态

    1.重写: a.定义: 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类能 ...

  4. 编辑器之神vim的一些常用快捷键整理

    yy:复制 光标所在的这一行 4yy:复制 光标所在行开始向下的4行 p:粘贴 dd:剪切(删除) 光标所在的这一行 4dd:剪切(删除) 光标所在行向下的4行 D:从当前的光标开始向后剪切,一直到行 ...

  5. 统计学习方法与Python实现(三)——朴素贝叶斯法

    统计学习方法与Python实现(三)——朴素贝叶斯法 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.定义 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设 ...

  6. 【bzoj5339】[TJOI2018]教科书般的亵渎(拉格朗日插值/第二类斯特林数)

    传送门 题意: 一开始有很多怪兽,每个怪兽的血量在\(1\)到\(n\)之间且各不相同,\(n\leq 10^{13}\). 然后有\(m\)种没有出现的血量,\(m\leq 50\). 现在有个人可 ...

  7. java并发编程-12个原子类

    背景 多线程更新变量的值,可能得不到预期的值,当然增加syncronized关键字可以解决线程并发的问题. 这里提供另外一种解决问题的方案,即位于 java.util.concurrent.atomi ...

  8. PalletOne调色板跨链的ETH提币实现

    实现区块链的跨链,最主要的诉求就是Token的转移,而Token的跨链转移又分为充币和提币2种操作.以PalletOne调色板来说,如果要把ETH跨链到PalletOne上来流转,就是ETH的充币操作 ...

  9. [错误]Caused by: org.apache.spark.memory.SparkOutOfMemoryError: Unable to acquire 65536 bytes of memory, got 0

    今天,在运行Spark SQL代码的时候,遇到了以下错误: Caused by: org.apache.spark.SparkException: Job aborted due to stage f ...

  10. Blazor入坑指南

    一 为什么用Blazor 原本就是后端程序员, 技术栈基于C#, 懂一点前端jQuery/Html 不管是webAssembly还是ServerSide, 就是想方便地做单页应用, 能wasm自然更好 ...