[MH22D3开发笔记]2. SPI,QSPI速度究竟能跑多快,双屏系统的理想选择

MH22D3xx系列,是兆讯公司推出的第二代芯片,主频和第一代MH2103一样,保持216Mhz的高主频,RAM 64KB,FLASH可以到512KB。依然和stm32F103保持pin to pin的高度兼容,但是在局部功能和接口上已经是青出于蓝而胜于蓝,其应用场景远远超过stm32F103能支持的场景,更重要的是价格还更香,非常适合用来开发显示控制类中小尺寸屏幕产品。
我们以一个双屏异显项目的需求为例,来深度剖析一下这款芯片的新的亮点,并对比stm32f103进行硬件需求分析:
在这里插入图片描述
这一款产品是现在比较流行的双屏异显应用,对mcu的数据读取能力,接口速度都有极高要求,我们逐步推导一下需求就会有一个理论的上的直观感受和性能需求,以正确评估芯片的选型需求。
屏幕的配置:分辨率为240x240,接口为常见的四线spi,驱动芯片采用ST77916.
显示接口的速度需求:显示像素格式采用RGB565,那么一屏数据的大小就是240x240x2=115200byte.如果我们要达到30帧的速度,那么总的数据吞吐量就需要115200x30=3456000KB=3.456Mbytes。spi接口采用8bit串行输出,那么spi的速度需求:3.4568=27.648M。这在一般的mcu上都可以达到或者满足。
看一下驱动芯片ST77916的spi接口电气特性,如下图和表格所示,SCL最大可以达到16ns,也就是说大约60M的速度,所以我们完全可以提高前面计算的spi速度,来达到更低的mcu传输数据的时间,提高系统帧率。60M/27.648M≈2,也就是说,基于这颗芯片的接口性能,大约可以提供60帧的最高理论刷新速度(考虑到线长和pcb布线等因素,可以保守到50帧)。
在这里插入图片描述
在这里插入图片描述
基于以上显示数据的传输需求计算,我们先看看同类型的stm32f103能否满足需求?
看一下如下图所示的stm32f103的时钟树,芯片的3个spi,只有spi1的速度能达超过最高帧率需求50Mhz,spi2和spi3最高只能到36M,也就是大约30帧。显然这个速度发挥不出来显示屏的最高性能。
在这里插入图片描述
以上是显示屏驱动接口的数据传输能力需求,那么我们来看看读取图片数据(不考虑压缩)的需求:前面计算得知,30帧的数据吞吐量是3.456Mbytes,但是我们是两块屏幕,那么就是3.456Mbytes
2=6.912Mbyte,换算为spi速度6.9128=55.296Mhz,基本上已经把spi1的性能拉满了。
以上是理论计算,但是。。。实际上我们来看看代码和波形,会发现根本达不到这个要求:
这是我们常规的spi接口发送或者读取一个字节接口:
在这里插入图片描述
在这里插入图片描述
上图是spi接口抓取的数据波形,我们发现在发送两个字节之间,空出来了很长一个时间,大约是和发送一个字节相当(略长),也就是说因为如上的代码方式,发送一个字节和一个字节之间有cpu运行的等待,数据读取等周期,SPI的速度几乎腰斩了。
那么悲催的事情就来了,按照前面的计算,我们对lcd输出的spi频率要求就会翻倍,达到27.648M
2≈55M,对数据读取的spi需求达到55.296Mhz*2=110Mhz,很显然,如果我们将两个显示屏接口连接到stm32f103的spi2,3,数据存储接口连接到spi1,都已经超过了物理上的最高速度36M和72Mhz,所以如果用stm32f103来实现这个方案,就行不通了。
兆讯第一代芯片MH2103和stm32f103的spi速度完全一样,所以也不适合用来做这个项目应用。我们选择了第二代芯片MH22D3来实现,那么MH22D3的spi有那些改进呢?
我们先看看MH22D3的框图:
在这里插入图片描述
在这里插入图片描述

你没有看错,他和你熟悉的stm32f103依然一样,只是spi3的接口也可以配置为QSPI。但是,一个重中之重的改进来了,APB2的最大时钟已经突破了72Mhz的限制,可以达到216Mhz(系统主频216Mhz),APB1可以达到108Mhz,仅仅以这个硬件能力,采用前面同样的方式,就可以轻松达到30帧的数据传输能力。
如果我们仅仅这样使用,那就太浪费这款芯片的硬件能力了,通过如下改进,我们可以进一步大大提升系统性能:
系统硬件连接:spi1和spi2驱动双屏,spi3切换为QSPI模式,连接Norflash。
第一步:启用DMA
MH22D3有两个DMA控制器,一共12个通道,如下表:
在这里插入图片描述
在这里插入图片描述

SPI1和SPI2的接口,我们可以采用DMA方式向屏幕传输数据,以消除前面我们看到的每一个字节后面的等待和仲裁时间(因为DMA方式,只需要在给定的数据传输完成后才做一次判断),使spi的传输速度提约1倍,同时SPI硬件的时钟我们也可以提高到54M(216Mhz四分频),使其接近显示驱动芯片的最高频率60M,在硬件上将性能逼近到稳定的上限。
如下图所示,采用DMA后,我们看到CLK源源不断,再也没有字节过后的“休眠期”了,速度几乎翻倍。
在这里插入图片描述
第二步:启用QSPI
我们使用QSPI接口来从flash读取数据,实测数据如下(Norflash的接口最大速度一般为133Mhz,所以我们在该接口上最高可以跑108Mhz,通常兼顾mcu最高运行速度和接口的稳定性已经对批量芯片一致性的考虑,以及考虑到环境温度变化的影响,我们把QSPI接口跑72Mhz是比较好的配置):
在这里插入图片描述
表中的实测数据表明,我们以72M的dma方式运行,读数据的速度已经相当于280M的spi速度了,是以前spi读取的5-6倍了。
读取前述显示屏一屏需要的数据只需要大约3.3ms,大约330帧,也就是说读取数据已经没有任何瓶颈了,最后传输的速度完全取决于显示屏能接受的最高速度了。
第三步:启用异步传输
根据前面DMA的配置,我们可以计算出来传输一屏显示数据的时间大约是18ms(每秒可以到50帧),读一屏数据大约需要3ms。
如果我们按照常规逻辑来显示:读显示屏1数据->写显示屏1数据->读显示屏2数据->写显示屏2数据,那么大约需要耗时3+18+3+18=42ms,帧率约25帧,而且这样来的话,mcu几乎被占满了。速度还是不是很高,如何解决?
解决的方案就是采用异步DMA方式(数据准备好,启动传输后就不需要再耗费mcu时间,传输完成后会产生中断通知)。
我们可以读取完第一个显示屏需要的数据后(不一定是一整屏,因为RAM不够),立即启动第一个显示屏的DMA的传输。然后MCU可以立即读取第二个显示屏的数据,然后启动第二个显示屏的DMA传输,使两个显示屏的传输同时进行。如此一来,虽然是两个显示屏的数据,但是几乎和一个显示屏的数据差别不大。
在这里插入图片描述
我们用图示来看看上述过程:
只有第一次启动显示需要一个额外的3ms读取数据时间,以后的读取数据时间,完全“掩盖”在lcd的传输时间里面了,而且双屏的刷新几乎是同步的(差大约3ms),这样的好处是非常明显的:一来是提高了显示刷新的帧率到50帧(接近显示屏的上限),二来由于双屏的同步时间很接近(3ms,约300帧),左右眼的数据几乎在人眼看起来是同步显示的,不会出现一前一后的现象,显示效果相当nice!

通过以上的硬件改进和软件优化,我们最大化的利用了MH22D3提供的硬件能力,将双眼显示的效果完美的逼近到理论的极限,提供了非常好的显示效果,从而发挥出来这颗芯片的最佳性能,提供给客户最高的性价比。

文章原创,欢迎转载,请注明出处,未经书面允许,不得用于商业用途。

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

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

相关文章

一文速通 Python 并行计算:教程总结

一文速通 Python 并行计算:教程总结 摘要: 本教程是一个系统性的 Python 并行计算实战指南,它从并行计算的基本概念出发,循序渐进地深入讲解了 Python 中实现并发的三大核心范式:多线程、多进程和异步编程。它不仅详细…

针对EV充电路径优化问题的研究探讨与思考

针对EV充电路径优化问题的研究探讨与思考 在本研究中,我们提出了一种基于深度强化学习的k-Hop neighborsPPO框架,用于解决电动汽车(EV)的充电路径优化问题。尽管该框架展现了良好的性能,但在深入研究过程中&#xff0c…

GPT-5国内免费体验

[免费体验GPT-5) 免费体验GPT-5 使用以下链接注册 免费体验GPT-5 入口地址:https://askmany.cn/login?if5014c45 注册后能够免费使用一些基础模型,其中GPT-5 nano是可以免费使用,其余模型有些是免费有些是收费。

自由学习记录(88)

frag里的数据哪来的 顶点阶段把想传下去的量(UV、法线、颜色、自定义 floatN…)写在带语义的输出上; 固定功能光栅器用重心坐标做透视正确插值,逐像素生成这些值,片元阶段按你声明的语义“接收” 顶点着色器唯一强制…

Vue 3 defineOptions 完全指南:让组件选项声明更现代化

&#x1f4d6; 概述 defineOptions() 是 Vue 3.3 版本中引入的一个编译器宏&#xff0c;用于在 <script setup> 中声明组件选项。它解决了在 <script setup> 语法糖中无法直接声明组件选项&#xff08;如 name、inheritAttrs 等&#xff09;的问题。 核心价值&…

Unknown Kotlin JVM target: 21

从老Android Studio版本升级到新版Android Studio Meerkat | 2024.3.1gradle版本从8.0升到8.9&#xff0c;complieSdk版本从33升到34编译报错Unknown Kotlin JVM target: 21原因&#xff1a;原版本中jvm版本是17而新版studio自带的版本就是21。解决&#xff1a;将jvm版本降回17…

如何实现效率与便利?

---  ## 如何使用AI大语言模型解决生活中的实际小事情&#xff1f;  ### 一、引言  在日常生活和工作中&#xff0c;我们常常会遇到各种琐碎事务&#xff0c;如名单排序、批量整理会议记录、快速生成学习笔记等。这些小事情虽然不复杂&#xff0c;但却会耗费我们大量的时…

动态稀疏注意力加速YOLOv11推理-(减少注意力计算复杂度,提升实时性)

文章目录一、动态稀疏注意力机制基础理论1.1 注意力机制的计算瓶颈与稀疏化必要性1.2 动态稀疏注意力的数学表述1.3 稀疏注意力在YOLO系列中的演进二、YOLOv11中的动态稀疏注意力实现2.1 模型架构修改与集成方案2.2 动态稀疏注意力的训练策略2.3 与YOLOv11其他优化技术的协同三…

强化学习核心概念与算法详解-马尔可夫决策过程(MDP)+贝尔曼方程(Bellman Equation)

本文系统梳理强化学习(Reinforcement Learning, RL)的核心理论,从基本概念到贝尔曼方程,再到动态规划、蒙特卡洛和时间差分三大求解方法,构建清晰的知识脉络。特别地,我们将深入探讨马尔可夫性质与贝尔曼方程的内在联系,揭示它们如何共同构成强化学习问题建模与求解的理…

您的连接不是私密连接问题解决

您的连接不是私密连接问题解决 点击页面空白处&#xff0c;虽然没反应&#xff0c;但是你直接输入thisisunsafe,然后回车就可以访问页面

【栈 - LeetCode】739.每日温度

739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 题解 暴力技巧 官网给的一个暴力遍历的方式&#xff0c;技巧点在于&#xff0c;温度的最大值是 100&#xff0c; 因此里面的 for 循环可以通过控制最大是到 100 来降低时间复杂度。 class Solution { public:vector&…

【无标题】对于11维拓扑量子色动力学模型来解决纳维尔-斯托克斯方程(N-S方程)全局光滑解存在性的论证可行性,从数学和物理角度进行的严谨、系统性论证与分析。

对于11维拓扑量子色动力学模型来解决纳维尔-斯托克斯方程&#xff08;N-S方程&#xff09;全局光滑解存在性的论证可行性&#xff0c;从数学和物理角度进行的严谨、系统性论证与分析。评价与核心思想该证明的核心思想是将三维流体的湍流动力学视为一个更高维&#xff08;11维&a…

朴素贝叶斯三大概率模型学习总结与手写数字识别实践

一、朴素贝叶斯模型分类与核心原理朴素贝叶斯算法的核心是基于 “特征条件独立性假设”&#xff0c;通过贝叶斯公式计算后验概率实现分类。根据特征数据类型的差异&#xff0c;衍生出三大经典模型&#xff0c;分别适用于不同场景&#xff0c;其核心区别在于对 “特征条件概率”…

学习Java26天(线程方法和线程安全)(synchronized)

170/199线程安全问题同步代码块同步方法以及lock锁同步方法Lock锁finally不管上面是否异常都会执行

网络协议---TCP

一、UDP协议1. 核心特点数据传输方式&#xff1a;面向数据包传输。连接特性&#xff1a;无需建立连接即可通信。可靠性&#xff1a;尽最大努力交付&#xff0c;存在数据丢包、乱序等问题&#xff0c;安全性和可靠性较低。传输范围&#xff1a;支持一对一、一对多的传输模式。资…

构建AI智能体:十三、大数据下的“搭积木”:N-Gram 如何实现更智能的语义搜索

一、什么是 N-gram核心定义&#xff1a;N-gram 是来自给定文本或语音序列的 N 个连续项&#xff08;如单词、字符&#xff09; 的序列。它是一种通过查看一个项目的前后文来建模序列的概率模型。N&#xff1a; 代表连续项的数量。项&#xff08;Item&#xff09;&#xff1a; 通…

嵌入式系统学习Day22(进程)

无人机运行程序&#xff0c;时间贴合阻塞态&#xff1a;程序运行到scanf或gets时的状态linux是抢占式操作系统&#xff0c;优先级高的调度高&#xff0c;优先级相同在同样时间内调度相同ip为指针&#xff0c;指向目前已读到进程的位置&#xff0c;回写到磁盘&#xff0c;进行下…

【51单片机】【protues仿真】基于51单片机冰箱系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、LCD1602液晶显示冷藏冷冻温度值 2、按键设置温度阈值​ 3、冷藏或冷冻温度高于阈值启动制冷片 4、限位器开关检测门状态&#xff0c;开门过长蜂鸣器警报 5、状态指示灯&#xf…

征程 6X 常用工具介绍

一、采集/设置系统信息的工具集 获取开发板 SOM 状态工具 [LINUX] hrut_somstatus 是用来获取当前开发板SOM状态的工具&#xff0c;包含温度、 cpu频率、bpu状态。 用法&#xff1a; hrut_somstatus [-n count] [-d second]获取开发板boardid工具 [LINUX] hrut_boardid 是用来获…

数字隔离器:新能源系统的安全与效能革命

在新能源技术高速发展的浪潮中&#xff0c;高压、高频、高可靠性的需求对系统设计提出全新挑战。传统隔离器件受限于响应速度、抗干扰能力及体积限制&#xff0c;逐渐难以满足光伏发电、电动汽车、储能系统等场景的严苛要求。数字隔离器以创新的半导体技术为核心&#xff0c;通…