如何提高W5100S的传输速度(STM32F407+W5100S SPI CLIENT)?

本文介绍了在STM32F407与W5100S以SPI模式通信时,如何通过调整时钟频率、增大缓冲区和优化驱动程序来提升传输速度。作者分享了通过增大SOCKET缓冲区、修改SPI发送接收映射和使用DMA技术的实践经验和教训。
摘要由CSDN通过智能技术生成

在使用STM32F407+W5100S使用SPI模式的情况下,如何提高W5100S的传输速度?在使用官方驱动的情况下,实测速度只有800kb/s左右,离以太网动则几兆十几兆的速度相去甚远。经过不断试错,总结出提高W5100S在SPI模式下传输速度的几个要点:

(1)直接影响传输速度的,首当其冲是STM32与W5100S的SPI的通信速率,WIZCHIP下属的W5500支持高速SPI,最高时钟频率可达80MHz,而W5100S不支持高速SPI ,实验中最高做到了42MHz仍能稳定运行。最终采用的是21MHz的时钟,需要说明的是,实测42MHz与21MHz在网口端的传输速度相差不大,大约5.6Mb/s。这说明在SPI端21Mhz的时钟,已经能满足网口端的速度。

(2)驱动的影响。官方给的驱动程序,用于低速传输问题不大。但是驱动仍然有提升空间。

a)提升SOCKET的发送和接收缓冲区,实测采用8KB的缓冲和4KB的缓冲区,速度相差4倍左右,所以,将缓冲区加大,是提高W5100S传输速度的关键。这里需要提醒一个坑,作者前期也是踩到坑中而不自知。

官方驱动给的默认缓冲区分配使用的是 :

sysinit(0x55,0x55); ,即默认是2KB的发送缓冲和接收缓冲。

作者为了提升发送和接收缓冲区,想当然的使用了:

sysinit(0xff,0xff); 即每个SOCKET分配8KB的缓存空间

速度相对于2KB的缓存提升太多,达到0.66MB/S,即5.28Mb/s。但是收到的数据全是乱码,作者刚开始以为是SPI时钟太高导致的干扰,将故障源定位在SPI,最终一无所获,通过逻辑分析仪发现SPI传输的数据没有问题。

最终在W5100S的datasheet中找到答案,是4个独立的SOCKET共享8KB的发送或接收缓存,而不是每个SOCKET可以配置到8KB,如果将每个socket都分配8KB的缓冲区,就会出现乱码的情况。所以很多人接触一些芯片的时候总喜欢直接上马调试,其实仔细翻一下datasheet也是很重要的,有时候可以避坑,节省很多时间。

最终作者采用:

 sysinit(0x0c,0x0c); 

即将SOCKET1的发送和接收缓冲区设置为8KB,乱码现象消失。

b)除了修改缓冲区,还需要修改SPI发送接收的映射函数。在官方驱动中,使用的是单字节发送

即一次性发送和接收一个字节。如果想一次发送多个字节,需要修改驱动程序,主要修改地方有:

1、映射批量发送接收函数:

将批量发送和接收的函数分别映射为SPI_ReadDatas和SPI_WriteDatas。对应的HAL库实现为:

这里使用了HAL库的阻塞式发送函数。当然也可以采用DMA的方式,采用DMA的方式需要注意的是DMA是非阻塞式的,也就是说MCU调用DMA发送后就开始运行下一条指令了,至于SPI的发送就交给DMA了。如果需要循环发送有可能导致DMA发送函数卡死,为啥?因为DMA速度虽然快,但是SPI速度慢,前一包还没发完,后一包就来了,需要用中断来判断发送完成。实测采用DMA方式对于速度大约有15%的加成。

修改批量发送函数的映射之后,对于底层的发送也需要修改,该代码位于w5100s.c中,将源驱动中的for循环发送和接收替换成一条语句:

(3)经过步骤1-2的修改后,需要注意调整tcp_client.c中的发送函数,将一个发送包最好填充完8KB的缓冲区,这样效率最高。8192个字节的发送,通过wireshark抓包发现,拆成了6包,前面5包每包1460字节(W5100S一包能发送的最大字节数),最后一包892字节。

完成以上步骤后速度能稳定在0.66MB/S左右,但是通过wireshark抓包发现,前几次发送会有偶发的spurious retransmission以及断线重连,但是多连接几次后后面会稳定下来,而且将一次发送的字节数改成256(不用8192或其它大于256的值),连接是稳定的,不会有spurious retransmission和断线重连的情况,但是代价是速度大打折扣。作者一度以为这个速度(0.66MB/S)差不多是极限了,但是一个偶然的机会,发现了一个大家都极度容易忽略的影响因素,因为有一次测试板怎么也连接不上电脑的服务器,当时觉得是网线出了问题,于是换了一根超5类网线,然后奇迹发生了:

速度直接飙升到1.5MB/s(12Mb/s),整整提升了2倍多,之前的断线问题也没有了,持续运行24小时,连接和传输速度都很稳定。

本文提出的1点和2点,大多数人通过测试都能找到,而第三点,大部分人可能会忽略,毕竟网线太常见,平时用着也没问题。

最后附上源码,该源码已经经过测试,有需要的朋友可以参考。

https://download.csdn.net/download/weifengbo0302/88884734

  • 18
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值