STMCU小助手
发布时间:2021-12-22 13:22
|
25.1 初学者重要提示; L% F/ R9 [1 G4 Y u8 X TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。4 U/ X; H* o! F, C- F; z 特别注意本章25.5小节里面各块RAM的DMA操作问题。5 F0 j+ D# j1 i9 q+ T' o 9 t+ N8 N) @, \# Z 25.2 各块RAM在总线中的位置 这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。 ( S. t) f$ i8 [$ C# P b- e
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。7 |4 t) ?- k6 _( J' ^/ T6 q 3 B1 M0 P1 J: s7 d 1、 ITCM和DTCM4 k) c1 j& C; I0 Z 这两个是直连CPU的。 2、 D1 Domain2 W2 Q# r3 T% I4 |9 i. ?& Y ) @4 S1 b8 A3 F) [5 i6 f( v6 ~+ O D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。 ' Q/ p8 u+ \: r6 L6 c 6个从接口端ASIB1到ASIB6 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。 2 } X7 b: { `) g 7个主接口端AMIB1到AMIB7# S. T1 I4 I# U 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。% @9 V3 E1 m7 ] 4 v! f7 }9 T& L6 _ 3、 D2 Domain ; F0 [, C, _% _4 j3 d D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。( Z+ `# u- \/ l# d, h 10个从接口5 S6 b0 R9 b6 q' E m9 [ ` 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。1 D! B' e( Z7 c. A# }. o + y' q! I: i* f' N8 X: m; l1 ]6 i7 T 9个主接口 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。 L7 N: t4 S) j2 T/ ^ 4、 D3 Domain0 b, A l1 G2 n0 ~5 y' c D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。$ t3 x7 ^# \+ N7 B* z0 T % H/ `/ _% V+ Z( [) m: p 3个从接口1 Y* @1 o' h: U( M5 u5 K+ e 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。. Q' a; b( W* k- X) Y, Z : {) w4 V9 O; w! \- {' \ 2个主接口 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线 25.3 各块RAM特性 各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。7 V* g9 j0 i4 R- Q; Z5 P9 ~5 V ! Z9 e2 \# P" E" N TCM区4 q8 j% f: A4 K8 @% ` i/ s6 b+ @ TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。6 O& C2 d6 x# _; C* U! e 0 `$ i9 D6 v. W. q. [5 X 速度:400MHz。2 ~0 Z" i( Y" R2 J9 d DTCM地址:0x2000 0000,大小128KB。 0 {! f/ u$ {3 r+ H! K ITCM地址:0x0000 0000,大小64KB。 * L. s( P& C% k" T! B, i0 V+ B; Q: v% q AXI SRAM区) S U; d8 X" m) J$ j6 i 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。 ( D; t, U# l0 w& W: a 速度:200MHz。 ) l7 v8 R9 P3 N& x, h' E5 K 地址:0x2400 0000,大小512KB。 : }2 t8 L/ ~% V+ ^1 r+ Q 用途:用途不限,可以用于用户应用数据存储或者LCD显存。; k# x8 Q6 _+ q6 o# s9 @: {. |5 F # ?+ B/ Q0 `, k4 a/ B6 ] @ SRAM1,SRAM2和SRAM3区 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。/ @* H" k% y% u 8 l3 k# b7 J, ~' k 速度:200MHz。 1 m% b* v8 ?! }$ m+ l SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。 * ~: t+ k r; o; s SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。 SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。, m7 @& I: \& _# e- }3 \1 I# h SRAM4区 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。& d" d% ~4 [2 Y9 K! n 速度:200MHz。 地址:0x3800 0000,大小64KB。, }" c1 m( ^6 z0 M. c2 o / T. W" v+ j* \+ a 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。 4 E: |2 A7 a8 w+ t Backup SRAM区6 J5 \/ I2 O' ?( d 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。 ) r, L7 }1 R; I' J. [2 ~5 u# ^ 速度:200MHz。 地址:0x3880 0000,大小4KB。 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。 4 C' K/ {5 Y/ |0 ]. L2 {6 t8 y7 G 25.4 各块RAM的时钟问题 正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。0 S. W" o0 _1 ~ , s& |3 m/ N4 T5 a
也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。8 j' v7 l1 j( ~6 M/ T8 C% ? 对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:- E! d$ q; H; l/ c% _
25.5 各块RAM的DMA问题 了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:
加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。 访问通路(每个小方块里面的字符) 任何有数字的表示有访问通路。 5 Y7 ], L( p; s1 Z" R: m 短横杠“-”表示不可访问。 % v0 I! c+ h4 B3 y1 i! }8 e8 o6 u 有灰色阴影的表示有实用价值的访问通路。' a; h! \$ }) B7 T8 v 表格中具体数值所代表的含义 D=direct,5 O+ ~2 q) K# z 1=via AXI bus matrix,3 q7 H: Q0 g4 Y$ K 9 J3 d+ L, y# G" \& p1 p) p3 p) y 2=via AHB bus matrix in D2,% Y% `" f: i/ G# T - f+ |& W# B- G) ~7 p/ n( _2 m 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,% p* F2 `4 s2 T5 F& L, n7 e! a 5 C) s3 s! _% f 7=via AHBS bus of Cortex-M7, 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。3 a7 _8 @% Z5 Q! | $ `6 y9 h: c: t+ d. U) p3 _ 总线访问类型 普通字体表示32位总线。. W; ], G3 d- ?* f5 _ ( N# A6 s0 H8 v+ Q: c" o/ l5 d 斜体表示32位总线主机端/ 64位总线从机端。/ {/ f. s4 Y6 K% t " \% d" {, ^( k* ?2 A4 ` 粗体表示64位总线。 # [ u r8 p. v# ?" @) R- t 通过这个总线互联图,要了解到下面三个重要知识点:' W- i! l2 R& v- i1 q / o$ \9 o* ^% H F- ^0 w DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。2 F2 X8 ~; [3 @ AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。( y& L. d6 H; X; c$ q SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。 25.6 实际工程推荐的RAM分配方案 鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。 , l) z' f z3 T/ ` 本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。6 b J+ n, R! u9 B 5 |7 T' L9 b9 h8 A! Q- g" V 25.7 总结 本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。 / r2 o2 T$ u/ t1 X |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版