你见过的MCU最高GPIO翻转频率是多少?
内容提要
本文测试了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)。