完整教程下载地址: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. YourSQLDba的共享路径备份遭遇重启问题

    如果YourSQLDba设置过共享路径备份(具体参考博客YourSQLDba设置共享路径备份),有时候服务器重启后,备份就会出错,具体错误信息类似如下所示: Date        2019/9/25 ...

  2. MySQL 学习笔记 (一)

    1.InnoDB and Online DDL ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE; ...

  3. unittest---unittest中verbosity参数设置

    我们在做自动化测试的时候,有时候想要很清楚的看到每条用例执行的详细信息,我们可以通过unittest中verbosity参数进行设置 verbosity参数设置 verbosity表示在只执行用例的过 ...

  4. sublime相关操作

    装插件 1,安装过Package Control ctrl + shift + p 输入install package 选择 Package Control: Install Package 搜索自己 ...

  5. 11-《Node.js开发指南》-模块和包

    什么是模块? 一个node.js文件就是一个模块,这个文件可能是js代码,json或者编译过的C/C++扩展 创建及加载模块 //a.js var name; exports.setName = fu ...

  6. js中call、apply、bind到底有什么区别?bind返回的方法还能修改this指向吗?

     壹 ❀ 引 同事最近在看angularjs源码,被源码中各种bind,apply弄的晕头转向:于是他问我,你知道apply,call与bind的区别吗?我说apply与call是函数应用,指定thi ...

  7. idea中导入别人的vue项目并运行

    1. 下载node.js 在搭建vue的开发环境之前,先下载node.js,下载地址:https://nodejs.org/en/ https://blog.csdn.net/antma/articl ...

  8. 【Java基础】Java中你必须知道的知识点

    目录 Java中面向对象的基础知识 1. 什么是面向对象  2. 三大基本特征和五项基本原则 3. Java的平台无关性 4. 值传递和引用传递 5. 方法重载和重写 6. 基本数据类型 7. 包装类 ...

  9. java获取当前年份、月份和日期字符串等

    Java获取当前年份.月份和日期是通过Calendar类的实例对象来获取的. 首先创建一个Calendar类的实例对象,Calendar类属于java.util包. Calendar calendar ...

  10. css样式优先级计算规则

    css样式的优先级分为引入优先级和声明优先级. 引入优先级 引入样式一般分为外部样式,内部样式,内联样式. 外部样式:使用link引入的外部css文件. 内部样式:使用style标签书写的css样式. ...