请选择 进入手机版 | 继续访问电脑版
查看: 1803|回复: 1

【MiCOKit3165开发套件试用体验】3、IO测试

[复制链接]

24

主题

88

帖子

478

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
478
发表于 2018-9-4 17:13:24 | 显示全部楼层 |阅读模式
*本文作者徐珂靖

今天我们要测试一下MiCOKit3165的GPIO性能。
MiCOKit3165板载的mcu是Ti的stm32F411RE。我们都知道,TI M4的GPIO翻转频率是很高的,几十兆Hz都可以。但是实际应用中电平拉高拉低的速度受很多条件影响,如使用AHB还是APB模式、总线速度、操作系统实时性等。

多线程操作系统是影响实时性的大问题,但是这个问题对于ARM cortex-M系列来说并不严重, 因为还有个ARM cortex-A来给它垫底。
Cortex-A因为要跑linux系统,即使内核打了实时补丁,也有十几微秒的延迟。这个现象我去年在ickey论坛的一篇香橙派测试实时内核的帖子里讨论过。

首先,非常感谢庆科给我们提供了一个非常友好的开发环境,软件进行了三层封装,各种库和函数都是现成的可用的,并且有详细的代码注释,使用非常方便。今天的测试将要使用SDK里提供的MicoGpioOutputLow和MicoGpioOutputHigh函数来操作GPIO。

我们要找个东西用来输出测试结果。对于这个三头六臂的micokit来说,花式就多了,可以用UART、I2C、SPI,还可以用UDP socket,甚至是板载led灯。
一个字节分前后4位亮灯,三原色led加上系统绿灯正好构成一个4bit数据。我好像发明了一种新的光纤通讯方法,一根光纤里面同时使用多种颜色的激光,带宽一下子就上去啦。
好了,跑题了,扯远了,我们收回来。

还是使用oled显示屏吧,接在spi端口上,不用白不用。

SDK里有个现成的oled例子,我们拿来做个接口就是了。
  
测试代码见附件。算法很简单,就是先测一下获取系统时间的那个函数的延迟误差,然后对io操作计一下时间,再减去那个延迟误差得到实际耗时,最后除以io操作的周期数,得到平均周期长度。

OLED屏幕显示如下

获取系统时间的函数mico_rtos_get_time()耗时0.532微秒
电平拉高拉低一个周期耗时2.255微秒
4百多kHz呢,你看多快!


好了,至此,GPIO速度测试圆满结束。

ARM Cortex-M的IO性能是非常好的。在上面的评测里,我们使用了MicoSDK的函数,虽然因为RTOS的原因,速度没达到理论的最高速度,但性能依然远超各种ARM Cortex-A平台。举个最常见的例子,基于Cortex-A的树莓派,其GPIO的控制速度不但低(无法达到微秒),而且因为定时器还不准,时间完全不可控。

在本次评测里,我们发现MicoSDK挺好用的,在后续几篇里,我们将使用该SDK的函数测试各个硬件。

最后,感谢庆科和云汉提供的这次评测机会,我会在接下来的文章里多发一点干货,与大伙儿一起学习和分享该开发板的相关知识。

回复

使用道具 举报

1

主题

26

帖子

183

积分

注册会员

Rank: 2

积分
183
QQ
发表于 2018-9-11 15:17:57 | 显示全部楼层
赞!









                                                (小手一抖,经验到手,为了升级,到处游走,纯属路过,不要介意,高抬贵手,立马飘走...)
理论上,理论和实践是没有差异的。但实践中,是有的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表