STM32G4系列存储访问的两个小话题

发布时间:2023-08-30  

一、有关CCM访问地址的话题

有用过STM32F4系列部分芯片或STM32F334芯片的人,可能知道片内有个CCM【Core Coupled Memory】区域,从芯片系统框图结合文字说明,可以清晰知道这个区域仅能被CPU访问,常用来存放些对执行效率敏感的关键性的代码或数据。也就是说对于这两个系列的CCM区域,DMA是访问不了的。


下面截图分别来自STM32F42X/STM32F43X器件和STM32F334器件的参考手册。

bfd482ba-7885-11ed-8abf-dac502259ad0.png

c00c6a90-7885-11ed-8abf-dac502259ad0.png

到了STM32G4系列,里面依然也有CCM这个区域。见下面STM32G4系统框架图。

c0388986-7885-11ed-8abf-dac502259ad0.png

从框架图上看,这个CCM区域不仅可以被CPU访问,也可以被DMA访问。关于它的起始地址也有相关描述:

c060a722-7885-11ed-8abf-dac502259ad0.png

从上面描述来看,CCM的地址起始于0x1000 0000和SRAM2结尾的地方。至于SRAM2结尾的地址还跟STM32G4具体的子系列或型号有关,见下面截图资料:

c0990efa-7885-11ed-8abf-dac502259ad0.png

那么这两个地址空间怎么用,或者说区别是什么呢?

当为了充分发挥CPU对这块区域的访问效能时就使用0x1000 0000开始的地址空间,此时CPU通过ICode总线访问这个区域。这块地址空间DMA是访问不了的,属CPU专访区。

若希望DMA访问这块物理区域,DMA要通过总线矩阵来访问,所用的空间则是0x20005800或0x20018000(视具体系列而定)开始的一段地址。此时,这个CCM区域在DMA眼里,不过是SRAM2区域延伸出来的一块别名区。当我们试图让DMA访问这个区域时,地址别给错了,不要使用CPU的专用地址,而要给0x20005800或0x20018000开始的地址。

c0e4ab8a-7885-11ed-8abf-dac502259ad0.png

也就是说同一个物理空间,不同的主体通过走不同的地址路线而实现不同的访问、执行性能。这样的设计更具灵活性,以满足五彩斑斓的实际应用需求。就像我们要到达某个地方完成某事,有人走正门,有人走侧门,甚至有人飞檐走壁,各用所便,各尽所能,各取所需。

当然,G4系列的CCM除了上面因访问主体不同采样不同地址空间的灵活特性外,还加强了很多安全特性,比方奇偶校验、读写保护等,有兴趣可以进一步阅读相关参考手册。

二、有关位带操作的话题

有人问起STM32G4系列是否支持位带操作方面的相关话题。

要问STM32某个系列是否支持位带操作,首先得看看相关STM32系列所用ARM内核是否支持位带操作。如果内核本身就不支持位带功能,STM32是不会支持该功能的。反之,如果相关ARM核支持位带操作,基于该核的STM32系列一般都会支持位带操作,而且在相关STM32参考手册里一定会明确说明。【其实,第三方芯片设计者在基于ARM核设计、集成芯片时,对于内核的部分功能或者核外设是有取舍权的。】

具体到STM32G4系列芯片,它属于cortex M4核,该核内置位带功能,STM32G4芯片也集成了该功能,在STM32G4参考手册上也有明确描述。【下图截取于STM32G4参考手册】

c109dab8-7885-11ed-8abf-dac502259ad0.png

这里的位带区特指一段片内SRAM空间和外设寄存器空间。位带区的SRAM里的每一位或外设寄存器的每一位都可以通过访问相应的另外一段地址空间的一个字实现读写操作,这个另外一段地址空间就称之为位带区的别名区。

不过,在STM32参考手册里,针对位带操作的介绍相对比较简单,主要是因为ARM内核相关手册有较为详细的描述。STM32参考手册里主要就如何计算别名区的地址做了个演示,并提示阅读相关ARM 内核手册。

c1440ac6-7885-11ed-8abf-dac502259ad0.png

上图截取于STM32G4参考手册RM0440。有人纳闷示例中的0x2200,0000是从哪里来的?翻遍整个G4系列参考手册也不知它怎么冒出来的。其实,这个地址是在Arm cortex M4内核手册里明确的。见下图:

c18b8270-7885-11ed-8abf-dac502259ad0.png

上图来自于Cortex -M4Devices Generic User Guide。

上图清晰了给出两块位带区【SRAM区和外设寄存器区】以及对应的别名区的地址边界和对应关系。图中浅紫色表示位带区,绿色表示别名区。显然,位带区字节地址为0x2000,0000的bit0对应别名区的字地址就是0x2200,0000;位带区字节地址为0x2000,0000的字节的bit1对应别名区的字地址就是0x2200,0004,这样依此类推。

关于位带操作的介绍,除了上面的Memory框图外,在内核手册里还有更多包括地址计算在内的详细介绍。下面三副截图均来自M4内核用户手册。

c1d70024-7885-11ed-8abf-dac502259ad0.png

c2211e20-7885-11ed-8abf-dac502259ad0.png

c26156ca-7885-11ed-8abf-dac502259ad0.png

关于位带操作的介绍就聊到这里,顺便给几点提醒:

1、不是所有STM32系列都支持位带操作,是否支持终究由内核决定;

2、执行位带操作的主体只能是CPU,而不能是别的,比方DMA;

3、位带操作只支持针对数据,而不能针对指令;

上面主要分享了STM32G4系列中有关CCM和Bit Banding应用方面的话题,做了些提醒及分享,以供参考。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>