0x00 前言
本文针对芯片测试裸片使用GPIO进行极限的翻转测试,了解在这个单板上能实现的最快的IO翻转速度,因为实际上很多时候MCU的标准输出翻转测试的方式或者是测试的单板环境差别,理论中的数据可能会和实际显示有一定的区别,所以这里测试了这个demo单板的随机引脚的最快可靠翻转时间。
感谢兆易提供的相关环境与测试单板
0x10测试环境
- demo单板
- 电脑一台不必多讲
- IAR 9+,主要是编译器支持会好些
- 某个不愿意透露具体型号的逻辑分析仪(没打广告)
- 某个不愿意透露具体型号的手持示波表(没打广告)
其中,随机引脚的选择标准如下:
- 为标准的IO接口
- 可以用来直接测试,没有外部接入
- 不开启复用模式
测试频率通过的标准如下:
- 占空比稳定为50%±3%,波形10秒内稳定无抖动
- 示波器查看跳变边沿无畸变
0x20 测试代码与测试步骤
测试的代码使用外部输入、内部稳定的时钟定时器,使用汇编字节码进行驱动(这点也是兆易的优点,库兼容了可读性与汇编优化度,基本上不需要怎么修改就可以直接用于测试。
下面附上测试代码。
#define REG32(addr) (*(volatile uint32_t *)(uint32_t)(addr))
#define GPIO_BOP(gpiox) REG32((gpiox) + 0x00000018U) /*!< GPIO port bit operation register */
bool i = 0;
void TIM_IRQHandler()
{
i = 1-i;
if(i == 0)
GPIO_BOP(LED1_GPIO_PORT) = LED1_PIN;
else
GPIO_BC(LED1_GPIO_PORT) = LED1_PIN;
}
可以看到当前的操作基本上就是直接操作寄存器来执行,但是伪装成函数的方式,但是因为足够原子化所以不需要do_while_0的结构。所以基本上不需要改写。
使用逻辑分析仪测试稳定占空比的最大频率。随后使用示波表查看是否可以得到完整的波形。
0x30 测试结果
经过测试,笔者发现当前引脚的最大的IO翻转的频率约为6.25M,这个频率可能是仅在50%占空比下的最快频率,以保证绝大对数的普通数字协议的执行。而笔者之前做过HC32F460的基础版,最快的频率在3.33MHZ左右,两者相差的还是很大的
|