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

news2024/9/22 13:45:27

133018507890704bf9d83620e6de0280.jpeg

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

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

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

3823c38abc57eac357a9c324b4507fe4.png

4a43cbac7744a3f2d5c5e62427d54302.png

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

559540c09767449007488dd8d2db4dfb.png

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

45e34045beb6aae7cc4bbf02be2ae1cf.png

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

33772a5625d69bab63acac5aa6544039.png

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

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

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

a4af7fa3aa6a47b2d49ffae84f794c91.png

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

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

二、有关位带操作的话题

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

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

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

68b8c858417101cdb19f4a6d826b203c.png

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

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

b7d4e8fcf1b78510f4f102a5007630cd.png

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

a6356fd9ce626ce860ca516dd62ddb68.png上图来自于Cortex™ -M4 Devices Generic User Guide。

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

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

fe9bfe78cab64ea895563876873d65da.png

a9ffa1159c48d8e85c2c6bd492bd68a8.png

fda8c339f7171ad1fc80613a79b4dcd9.png

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

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

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

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

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

*************************************************

往期话题阅读链接:

1、一段MPU配置代码的几个小疑问

2、STM32定时器更新事件可暂停否

3、STM32H7 BDMA应用示例

4、话说STM32外设复位

5、SYSTICK延时函数的两个小疑问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【mmdetection系列】mmdetection之head讲解

目录 1.configs 2.具体实现 3.调用 3.1 注册 3.2 调用 配置部分在configs/_base_/models目录下,具体实现在mmdet/models/*_heads目录下。 这个heads可以是很多个目录下的。 1.configs 我们看下yolox的head吧。 https://github.com/open-mmlab/mmdetection/b…

Web前端开发技术课程大作业:基于HTML+CSS+JavaScript实现校园主题-萍乡田家炳中学校网站(1页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

详细讲解Linux物理内存初始化

说明: Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio 1. 介绍 让我们思考几个朴素的问题? 系统是怎么知道物理内存的?在内存管理真正初始化之前…

Java项目:SSM实现的校园门户平台网站系统含开题报告与需求分析

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本系统为前后台项目,后台为管理员登录,前台为社团、学生、教师角色登录; 管理员角色包含以下功能&#xff…

对称加密算法(二)(分组密码,Feistel Cipher)

文章目录Traditional Block Cipher StructureStream Ciphers and Block CiphersFeistel CipherReferencesTraditional Block Cipher Structure Stream Ciphers and Block Ciphers 序列密码也称为流密码 (Stream Ciphers), 它是指每次对数字数据流的一个比特或一个…

CSS -- CSS复合选择器总结

文章目录CSS的复合选择器1 什么是复合选择器2 后代选择器3 子选择器4 并集选择器5 伪类选择器6 链接伪类选择器7 :focus 伪类选择器8 复合选择器总结CSS的复合选择器 1 什么是复合选择器 在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器&#…

【博客554】k8s 中的 Client-Side Apply 和 Server-Side Apply

k8s 中的 Client-Side Apply 和 Server-Side Apply 背景 如果你经常与 kubectl 打交道,那相信你一定见过 kubectl.kubernetes.io/last-applied-configuration annotation,以及那神烦的 managedFields,像这样: kubectl get pods…

单元测试理论储备及JUnit5实战

概述 测试驱动开发,TDD,Test Driven Development,优点: 使得开发人员对即将编写的软件任务具有更清晰的认识,使得他们在思考如何编写代码之前先仔细思考如何设计软件对测试开发人员所实现的代码提供快速和自动化的支…

银保监机构保险许可证数据(2007-2022年)

保险是金融系统的重要组成部分,保险的经济补偿和资金融通功能对维持金融系统的稳定,维护整个社会的安定起着不可或缺的作用,因此,从现实意义上来讲,对于我国保险业系统性风险的研究是很有必要性的。 通过对保险业系统性风险的类型、传播机制的研究,可以有效防范并降低我国保险…

MATLB|基于粒子群优化算法的智能微电网调度(含风、光、微型燃气轮机、电网输入微网、储能)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

linux基本使用及服务器环境搭建

文章目录0.linux基本命令1.配置jdk环境变量2.安装tomcat3. mysql安装4.部署jar项目基本命令5. 前端项目继承到后端项目中0.linux基本命令 1.pwd 我在那里 2.who am i 我是谁 3.clear 清屏 4.ctrlc 强制停止 5.ip addr 查看地址 6.ping 是否联通网站 7.systemctl start|s…

分布式系统的解决方案,学好这个就够了

分布式、负载、消息队列等一些解决方案,在互联网公司应用已经非常普遍了,也是每一个程序员要成为技术专家、架构师必学的知识。 所以,今天给大家推荐一个开源项目,有关互联网项目常见的解决方案,通通都打包一起了。 …

10个 解放双手的 IDEA 插件,少些冤枉代码

正经干活用的 分享一点自己工作中得心应手的IDEA插件,可不是在插件商店随随便便搜的,都经过实战检验,用过的都说好。可能有一些大家用过的就快速划过就行了。 1、GenerateAllSetter 实际的开发中,可能会经常为某个对象中多个属性…

半监督下的点云

搬了这么个东东来~~ 不过他的名字有点容易叫大家混淆,所以没写标题上... 在训练阶段,只需少量的二维方框标注作为指导,本文的网络就可以从激光雷达方框中产生精确的具有三维属性的图像级长方体标注。 论文:https://arxiv.org/pdf/2211.0930…

【Dubbo3高级特性】「实战开发」自定义扩展实现Dubbo服务对外暴露的主机地址实战开发指南

内容主旨 本篇文章主要介绍了如何进行自定义Dubbo服务对外暴露的主机地址的实战技术方案,其中我们需要针对于服务提供者侧的host主机暴漏的目的以及如何进行定制化处理 特性说明 在Dubbo中,Provider启动时主要做两个事情 启动服务提供者的server端实…

基于C++实现(控制台+界面)通讯录管理系统【100010012】

个人通讯录管理系统 问题描述: 主要内容: 个人通讯录是记录了同学(包含一起上学的学校名称)、同事(包含共事的单位名称)、朋友(包含认识的地点)、亲戚(包含称呼&#…

Python小炼(2):文件操作

"一封信,写下太多如果" 如果有一定语言基础的,一定对文件操作十分得"熟悉"!当然,这种熟悉是 引起人恼怒的 也不为过。 python 也有自己的文件操作,那它跟C\C又有何不同呢? 一、文件的基本操作 (…

中国宗教活动场所数据库(数据+python代码)

通常研究,宗教活动场所与公司避税行为,社会整体信任水平以及民营企业创始资金来源等元素相关联。例如,企业注册地的宗教传统负向影响公司避税,企业注册地的宗教传统通过提高管理者的道德意识和强化管理者的风险规避倾向两条机制抑…

Swagger总结

目录 简介: openAPI Springfox: 简介 Springfox的使用 SwaggerUI的使用 Swagger配置 设置扫描的包 设置范围 Swagger常用注解: 控制类、方法生成接口信息 ApiParam ApiModel ApiModelProperty ApiIgnore ApiImplicitParam 部分图片来自百…

SpringBoot日志详解

⭐️前言⭐️ 🍉博客主页: 🍁【如风暖阳】🍁 🍉精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 …