STMCU小助手
发布时间:2021-12-22 13:22
|
25.1 初学者重要提示 TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。6 |" e+ y) @) v2 E1 n+ C* S* I$ `% V 特别注意本章25.5小节里面各块RAM的DMA操作问题。 25.2 各块RAM在总线中的位置- s0 b2 f9 g1 I; D: O 这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。2 F. v% f1 S& p 7 o: v1 p+ b2 j& |3 C2 I+ w
9 D" m- A$ D! R 这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。 " }' A4 ^1 a0 J, j, A, H6 k, h 1、 ITCM和DTCM ( M1 L9 l3 m1 e2 Z$ U# [* x 这两个是直连CPU的。 ; a1 ]' Y* @+ k5 ?, S 2、 D1 Domain D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。 & y& _% {" ~- W# Y2 g# b 6个从接口端ASIB1到ASIB60 a, m: o- y2 s6 @# t8 V& q+ | 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。9 w( Q) r9 z/ P" X 7个主接口端AMIB1到AMIB7' O J0 u; ]. N. l6 @. b0 Q 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。- O: j, V/ O' x: @- W( c / `/ N8 k5 h9 _! @4 k6 [ 3、 D2 Domain D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。/ `, F' `' }; p1 f/ I8 ^' K 10个从接口0 r' e# c8 H s" G3 o 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。 ) e% [8 R7 `) i' E4 c7 G 9个主接口 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。) ]; j- z, z6 f4 P& q# h+ B/ S" O - ^! L( [: _% R: |$ y4 T 4、 D3 Domain * x5 E" \7 x$ l& E2 b D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。- V% k4 |& d/ |, C 9 T; {9 a0 } I+ z8 e 3个从接口 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。 2个主接口4 Z" B, c R# {) \- D$ V. e6 q4 x4 u- w 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线9 f8 B2 h; r5 _, V& v' Z+ y 25.3 各块RAM特性 各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。 4 R: Z# z0 S- ?5 ^ TCM区9 M/ c$ y; ~! `* o, Q! b: o1 U TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。 速度:400MHz。 DTCM地址:0x2000 0000,大小128KB。6 Y* g$ a& y% z4 ^( k9 R ITCM地址:0x0000 0000,大小64KB。! D& }% r( K# ^: R; f, j7 g: F AXI SRAM区& l3 @# j, a) ^+ K( Q1 {. I 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。 速度:200MHz。# W6 }6 o/ G. j. ` 地址:0x2400 0000,大小512KB。 + }* q9 z- o& n+ m2 D* x 用途:用途不限,可以用于用户应用数据存储或者LCD显存。 5 p1 k: Z8 V7 K% n7 ^ SRAM1,SRAM2和SRAM3区* I/ } A z( X% H: j 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。 " M8 }5 V4 { }% {; _! G& t& o+ v 速度:200MHz。( C5 c e$ j5 ^7 \! x9 A/ K& Q4 V SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。 SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。 9 D$ x3 n( @; U SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。 9 @% P+ S3 p: n z SRAM4区3 w4 |* G* W7 G* t% C 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。 速度:200MHz。 地址:0x3800 0000,大小64KB。- P2 V0 B2 g" E" P1 ~& d. i5 T4 G J + V$ b5 G% T; z: K/ c8 ?( x3 B( _: T 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。! B8 G0 ^, g& I+ Q( J' Z0 c+ K% F & ?, ~2 b1 Q5 U Backup SRAM区 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。 9 r3 i" l5 v [7 ? P- z! k 速度:200MHz。# A! d1 @) A1 j1 c" B5 I5 C. F# Y 地址:0x3880 0000,大小4KB。 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。 25.4 各块RAM的时钟问题* C9 b' k/ u" V* W# V 正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。
9 d$ [) L; t J4 b# v8 i 也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。 对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟: " h* y+ d6 z4 v0 l d3 j* f$ j
25.5 各块RAM的DMA问题 了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联: + l6 S+ C/ @ t* O# r
加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。% |0 F' G8 J! ]% I1 M- { 访问通路(每个小方块里面的字符) 任何有数字的表示有访问通路。 ' L$ x5 \/ V0 D6 G- Y 短横杠“-”表示不可访问。 有灰色阴影的表示有实用价值的访问通路。! e6 Q7 C+ ]+ f* H* h* y0 N& @ - B, l2 }, H3 j+ a t 表格中具体数值所代表的含义 D=direct,: ~% ~9 d+ J6 t. r: N 1=via AXI bus matrix, 7 ]7 H( T" C+ N X1 E K 2=via AHB bus matrix in D2,- ^" Z& [8 l5 E, K' t 5 [: F8 }& l9 J( t 3=via AHB bus matrix in D3, \. J3 n5 p1 [, l( K: i+ Q$ u5 m 4=via AHB/APB bridge in D1, ) m5 W+ t" `. Z5 r7 w 5=via AHB/APB bridge in D2, 9 X: L& f. t" f7 h8 b/ y2 r 6=via AHB/APB bridge in D3, 7=via AHBS bus of Cortex-M7, - G+ g! F7 O" _: L& n7 Y 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。2 k. [9 e' G# I- E" I & q% X# m& C5 g' ^/ P9 |) x, c/ c9 F 总线访问类型. X1 k. \0 O9 r; X) H, D+ ^1 n 普通字体表示32位总线。' ?# ?9 B; e3 B* M1 v8 D 斜体表示32位总线主机端/ 64位总线从机端。 # v& K0 e. E, V$ z8 F: y 粗体表示64位总线。" i, _, H' p$ U: \ 4 r0 ?: c" _0 x2 q8 {& _! }" W 通过这个总线互联图,要了解到下面三个重要知识点: DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。 AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。# l1 K. t+ m5 d2 ?; m* ` SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。 25.6 实际工程推荐的RAM分配方案+ ] ^1 j% L& N 鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。8 S2 x% i' n( u) \: D 本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。 4 A# P$ {) j' C! h' F 25.7 总结 本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。& r' k0 {( b g/ s! \ * l# W5 [& T% Q p' X$ Y3 T) t: X2 ] / z& p. h5 w% R& p ' { G( s6 r& k |
【 逢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实现温度、湿度、气压数据读取
微信公众号
手机版