打印
[STM32]

振南串行IO扩展模块速度测评【常规方式与DMA方式】含详解★

[复制链接]
1496|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znmcu|  楼主 | 2015-12-14 08:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://www.znmcu.cn/mod_sios_speed_test.html


振南的 串行IO扩展模块 性能速率测评【常规方式与DMA方式】
(详细阐述影响数据读写速度的主要因素)
振南的串行IO扩展模块,采用595+165方案实现用很少的IO(同步串行,SPI)扩展大量IO
我们比较关心串行方式扩展的IO速度如何?输出一个字节和输入一个字节需要多少时间?这将成为数据传输的瓶颈。
振南针对这一指标进行了简单的测试:回环测试10000000次,看需要多少时间。所谓回环测试是指CPU通过串行接口通过此模块输出16位并行数据,然后再通过模块将16位数据读回,如果前后的值相等,则认识回环测试成功。否则失败。
测试代码如下:
int main(void)
{
unsigned int i=0,temp=0;
unsigned int counter=0;
delay_init();                     //延时函数初始化          
uart_init(115200);
  SIO_IO_INIT;
printf("SIO test Start!!\r\n");
  while(counter++<10000000)
  {
HIGH_SPI_FOR_595;
SIO_Write_3595(i);
LOW_SPI_FOR_165;
temp=SIO_Read_2165();
if(temp!=i) {printf("SIO test Fail %04X\r\n",temp);while(1);}
i++;i%=65536;
  }
printf("SIO test Completed!!\r\n");
while(1);
}
STM32 M3平台上(基于振南的ZN-X开发板 STM32 M3版),SPI时钟频率分别为40MHz10MHz595165最高时钟频率不同,详见《回环测试实验》)。此时,实测需要的时间如下表:
回环测试次数
所用时间
核算单次回环所用时间
测试项目说明
10000000
81s
8.1us
使用8SPI
(写3595,共3个字节,读2165,共2个字节)
63s
6.3us
使用16SPI
(写3595,共2个字,读2165,共1个字)
68s
6.8us
使用8SPI+DMA
(写3595,共3个字节,读2165,共2个字节)
其实STM32 M3STM32F103RBT6)的SPI正常最高只能工作在18MHz,这里对其进行了超频(40MHz)。经过长时间的测试并没有发现问题。这里这样作只是为了测试模块的性能和速度,实际开发中不建议超频。SPI速率再高,其实意义不大,因为595165的最高时钟频率有限(595振南实测到40MHz,根据数据手册,它上到60MHz应该不是问题。165则慢一些,振南最高测到15MHz,此实验中使用10MHz)。所以,即使在STM32 M4平台上(ZN-X开发板 M4版,STM32F405RGT6),主频可以跑到240MHz,但是SPI最高也只有42MHz,这个读写模块的速率也不会有太多提升。至于51等低端单片机来说,速度就要更低一些。
此模块,在STM32平台上,振南写了3种驱动,本质上都是SPI,但是传输和实现方式不同。为什么?主要是为了评估不同的实现方式对于读写速度的影响。3种方式分别是:18SPI方式,输出的时候向模块上的35953次,共3个字节,输入的时候从21652次,共2个字节。216SPI试,输出时写2次,共2个字,即4个字节,输入时读1次,即1个字,2个字节。38SPI+DMA方式,同1
造成读写速度有差异的根本原因是:SPI通信中的时钟间隙
我们来比较一下3种方式SPI时钟的差异(以下波形拍摄于示波器):
常规情况下,使用SPI进行通信,在字节或字之间,即两次基本的最小数据单位的传输之间都会有一些间隙,也就是时钟不连续,其根本原因是CPU对传输状态的等待。更为详细的讲解请参见以下链接中的“STM32 SPI的时钟连续与非连续方式”一文
从上面的测试结果来看,同样是8SPI,使用DMA比不使用数据读写速度上提升了不少,将近25%。而使用16SPI和使用8SPI+DMA在速度上差不多,其根本原因是16SPI在读取单个字的时候,即2个字节,中间无时钟的间隙,效果同8SPI+DMA一样(16SPI甚至比8SPI+DMA更快,因为它字节间完全不需要等待)。但是16位模式每次要比8SPI模式向595多写入一个字节(因为它最小单位是16位,即字)。因此,最终的结果是这两种方式在速度差不多。
核算下来,振南的串行IO扩展模块数据读写速度至少可以达到每读写一个字节需要3-4us,单独写一个字节需要1~2us,读一个字节需要1-2us。也就是说,此模块IO的读写速度不低于5Mbps(约500KBps),它很大程度上取决于串行时钟的频率,以及数据传输方式。

相关帖子

沙发
音乐发烧友| | 2015-12-14 09:04 | 只看该作者
好资源就是拿来分享的,感谢楼主喽!
nanjinfp.wikidot.com,sjzkaifp.wikidot.com,fuzkfp.wikidot.com,chongqingkaifp.wikidot.com,cskfap.wikidot.com,010dkfp.wikidot.com,beijing007.wikidot.com,bjkaifp.wikidot.com,beijingkaifp.wikidot.com,010kfp.wikidot.com,023kaifp.wikidot.com,027kaifp.wikidot.com,028kaifp.wikidot.com,0551kaifp.wikidot.com,024kaifp.wikidot.com,010kaifp.wikidot.com,021kaifp.wikidot.com,0431kfp.wikidot.com,0531kfp.wikidot.com,0791kfp.wikidot.com,022kfp.wikidot.com,0311kfp.wikidot.com,0451kfp.wikidot.com,0574kfp.wikidot.com,0591kfp.wikidot.com,020kaifp.wikidot.com,025kfp.wikidot.com,0571kfp.wikidot.com,0731kfp.wikidot.com,0755kfp.wikidot.com,0371kfp.wikidot.com,0510kfp.wikidot.com,0512kfp.wikidot.com,0532kfp.wikidot.com,0871kfp.wikidot.com,029kfp.wikidot.com,0592kfp.wikidot.com,0771kfp.wikidot.com,0851kfp.wikidot.com,0931kfp.wikidot.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:振南的znFAT -- 单片机上上的FAT32文件系统 www.znmcu.cn

4474

主题

5195

帖子

33

粉丝