你见过的MCU最高GPIO翻转频率是多少?

💡 原文中文,约4000字,阅读约需10分钟。
📝

内容提要

本文测试了i.MXRT1010上普通GPIO和高速GPIO的极限翻转频率,并讨论了系统时钟配置的影响。通过选择合适的测试板卡和测试点,并修改测试代码,得到了不同配置下的翻转频率结果。最终得出了普通GPIO和高速GPIO的极限翻转频率,并总结了测试结果。

🔎

延伸解读

普通GPIO与高速GPIO的时钟源差异

普通GPIO的时钟源是IPG Bus,而高速GPIO的时钟源是AHB Bus。在i.MXRT1010上,IPG Bus最高仅支持150MHz,且只能从AHB/Core时钟分频得到。因此,当AHB/Core为500MHz时,IPG最高只能到125MHz(四分频),导致普通GPIO翻转频率受限;而高速GPIO直接使用AHB时钟,可达更高频率。这解释了为何高速GPIO极限翻转频率远高于普通GPIO。

翻转方法对极限频率的影响

测试了三种GPIO翻转方法:异或GPIO->DR、直接写入GPIO->DR和置位GPIO->DR_TOGGLE。在极限频率下,异或操作因需LDR回读、EOR异或、STR写入三条指令,耗时较长,翻转频率较低;而直接写入和置位TOGGLE均只需一条STR指令,翻转频率最高可达250MHz。因此,追求极限性能时应优先使用置位TOGGLE或直接写入方法。

PAD配置与波形幅值的关系

测试中将PAD配置为200MHz运行频率,但实际翻转频率可超过200MHz(如250MHz)。此时波形频率值不受影响,但电压幅值响应表现无法保证,实测波形从标准方波变为减半幅值的正弦波。这表明PAD的运行频率配置并不限制最终输出翻转频率,只影响高频下的波形质量。

插入DSB指令的显著影响

在500MHz AHB/Core时钟下,高速GPIO翻转代码中插入DSB指令后,翻转频率从250MHz骤降至35.8MHz。这是因为DSB指令强制等待所有先前内存访问完成,而GPIO寄存器写入速度远低于CPU执行速度,导致CPU频繁等待,极大降低了翻转效率。这提醒在涉及GPIO回读的场景中需权衡同步与性能。

❓

Q&A

i.MXRT1010上普通GPIO和高速GPIO的极限翻转频率分别是多少?

普通GPIO最大翻转频率为20.614MHz,高速GPIO最大翻转频率为250MHz。

为什么高速GPIO的翻转频率比普通GPIO高很多?

因为普通GPIO的时钟源是IPG Bus,而高速GPIO的时钟源是AHB Bus,AHB Bus频率更高,因此高速GPIO能达到更高的翻转频率。

在i.MXRT1010上,哪种GPIO翻转方法能达到最高频率?

使用置位GPIO->DR_TOGGLE寄存器的方法可获得最佳I/O翻转性能,高速GPIO下可达250MHz。

PAD配置的运行频率对GPIO翻转频率有什么影响?

PAD配置的运行频率并不限制最终输出翻转频率,但会影响波形幅值响应表现。超过设置频率后,波形频率值不受影响,但电压幅值响应不能保证。

在高速GPIO翻转代码中插入DSB指令会有什么影响?

在500MHz AHB/Core时钟频率下,插入DSB指令后,高速GPIO翻转频率从250MHz降至35.8MHz,显著降低。

测试i.MXRT1010 GPIO翻转频率时使用了什么开发板和引脚?

使用了恩智浦官方的MIMXRT1010-EVK开发板,测试引脚为GPIO_11(可配置为普通GPIO或高速GPIO)。

🏷️

标签

➡️

继续阅读