bps和B/s的区别,暨各种主机接口的WIFI透传模块实际透传速度的评估姿势

文章解释了WIFI模块的实际透传速度远低于理论值的原因,包括波特率与实际传输速度的关系、串行口波特率的理论值与实际系统波特率的差异、UART和SPI接口的限制等。建议评估WIFI模块时考虑实测的“实际有效”速度,而非仅依赖理论值。

【问题】 “我买的模块参数指标,明明标注为8MBPS,但是为何实际的速度还不到100K字节每秒?”

常常遇到有朋友向我们陈述这样的经历:有许多淘宝卖家依据其模块上主芯片的串口波特率的理论值可到Mbps而号称“高速”透传,或者有的SPI模块的SPI频率可以到8MHz而而号称有高速,并简单地除以8/9/10来声称其透传速度可以达到几百K字节每秒。但买回来后发现发现实际的透传速度只有小几十K甚至十几K字节每秒,远远满足不了自己做高速透传的期望要求。这是为什么呢?

【回答】因为(1)WIFI模块的主芯片波特率标称的理论最大值,不代表布线后所能达到的实际波特率;(2)所谓的“串口波特率” 或 “SPI频率”实际值,不代表数据的“有效”传输速度,不能简单地根据波特率除以8/9/10来得到实际有效的通信速度。

为什么主芯片所标称的理论最大值,不代表实际系统所能达到的波特率呢?

这是因为,当波特率提高后,走线(包括单片机主机上的和模块上的布线、连接器等)优劣对串行口(这里的串行口,包括UART串行口即常说的串口、SPI串行口等各种串行口)的高速通信会有很大的影响。另外,串行口通信是一个双向的过程,虽然模块上的主芯片理论值可能支持数Mbps的波特率,也需要主机端单片机的配合,假设主机端单片机选型最大只能支持460800bps的UART串口波特率,那么即使模块本身可以支持更高到Mbps的串口波特率,系统的串口波特率也会上不去。同样的道理,对于SPI串行数据,主板上所能支持的实际的SPI频率,也不一定是该款单片机SPI的理论数值。

那又为什么,实际系统可以达到的串口波特率(单位bps)除以8/9/10,不代表实际的有效通信速率(单位Bytes/s)呢?后者往往会远远小于前者呢? 

这是因为,所谓的“串行口波特率”(这里的串行口,包括UART串口、SPI串行口等串行数据接口),并不代表实际的“有效位流速度”,它仅仅只是对应在传输过程中每个“bit位宽"的周期,更像是一个“时钟频率”对应的概念

以UART串行口为例子,因为UART串口没有单独的时钟信号,收发双方就通过这个波特率数值约定好"bit位宽/周期”,来确保采样收发方的采样同步和正确。因此,可以近似的理解为,串口的“波特率”参数(单位bps),等效于其他带时钟的串行接口的“时钟脉冲”的频率。

我们都知道,在串行通信中,串行时钟的频率并不代表实际的有效码率,这是因为:(1)“时钟脉冲”并非占据了全部的时间区间,很多时候存在间歇,包括串口接口电路本身在内的许多环节,都需要处理很多其他的事情。(2)同时,除了有效的数据位,还有许多其他的辅助位(例如停止位、校验位、握手位等等)也需要传输通过“时钟脉冲”同步传递。这些因素,都会导致实际得到的有效速度,相较于波特率除以8会打一个很明显的折扣。

如果波特率代表的可以是那一时刻传输那一字节的“实时速度”,而不是最终的平均有效速度。假设有一辆汽车每分钟可以跑5公里(实时时速约300公里每小时),但是每跑1分钟都需要停止1分钟来加油,那么这辆汽车的实际有效速度也就只有150公里每小时了。

常见的UART串口波特率115200bps,即使每个波特位都用来传递“有效数位”,且每个字节或没几个字节传输的中间没有任何间歇,其理想的最大理论速度也只有 115200/8/1024=14K字节每秒。实际值则可能远远小于这个数值,而往往还需要进一步打上5折甚至更低的折扣。

正如USB的波特率480MBPS不代表USB实际所能达到的最大传输速度(480/8=60M字节每秒),正如无线网卡150MBPS不代表网卡所能达到的最大通信速度(150/8=18.75M字节每秒),正如SPI时钟为40MHz不代表SPI写的速度就能达到40/8=5M字节每秒,UART串口实际通信的有效速度,也会远远低于设置的波特率除以8/9/10。例如,115200bps的UART串口波特率,对应的实际通信速度,往往可能只有10K字节每秒以内。反过来,如果需要UART串口型的WIFI模块,其透传速度达到100K字节每秒,意味着所需要的串口波特率速度一般不能低于(1*100*1024*8*2)/(1024*1024) = 1.5Mbps,换句话说,如果系统的UART串口可靠通信的波特率最大只能到1.5Mbps,那么串口透传的速度很难超过100K字节每秒。绝大多数系统的UART串口可靠通信的实际波特率很难超过1Mbps,所以UART串口型透传模块的速度往往都只有几十K甚至十几K字节每秒。

即使模块上主芯片的UART串口理论值号称能上40x115200bps(约为4.4Mbps),这也不代表模块外部的串口走线能支持这么高的串口波特率,也不代表外接的单片机串口及其走线能支持这么高的波特率,也不代表采用乐鑫标准SDK的透传模块内部固件的串口转WIFI的处理效果能确保这么高的速度。

虽然SPI比UART串口可以支持更高的波特率,但SPI接口的WIFI模块的“实际的有效”速度与SPI时钟或波特率也之间,也存在着与上述UART串口波特率类似的折算。而且,因为SPI比UART串口更高速,留给相关环节的裕量也就更少,如果没有处理好相关环节,可能到导致折算率比UART串口更多!

那么,我们该如何对各种WIFI透传模块的实际速度可行性做出正确的评估呢?

在评估串行口(这里的串行口,包括UART串行口即常说的串口、SPI串行口等各种串行口)透传模块的透传速度是否满足自己应用的实际要求时,当然不能简单地根据模块上芯片、单片机芯片的串口波特率的理论值除以8/9/10来评估实际所能得到的串口透传速度。在购买之前,一定要:1)咨询清楚卖家,他们实测过的UART串口模块的透传速度能到多少字节每秒(也注意一下单位,因为位每秒和字节每秒还有至少8倍的关系),不能单凭他们给出一个理论值,因为他们提供的理论值可能是错误的按照芯片的最大理论波特率除以8得到的,然后提供给了我们,而造成了评估误导;(2)同时,还得评估自己的单片机主机板的串口速度实际能到多少。如果他们无法提供这样的参数值,那么在经验上(大拇指原则)可以按照“实际电路”中的“瓶颈环节”所能达到的波特率(单位bps,位每秒),除以8再打5折(即除以16)得到大致的实际有效的透传速度(单位B/s,字节每秒)。如果这样估算后,和自己需要的实际有效通信速率相差不大,或者留有足够的裕量,则基本可以放心使用。

产品指标不宜只提频率(MHz)或波特率(bps),而应该提"实测"所能达到的“实际有效”的速度(Bytes/s,字节每秒)

买家也应与上面的UART串口评估方法一样,了解清楚该WIFI模块实测得到的有效速度。曾有一个客户买过其他某款标注有多少“M SPI”的WIFI模块,但实测速度不到100K字节每秒,根本无法传输视频。因此,后来找到我们时起初也将信将疑。但改选用了我们的模块后,在比STM32F1略弱的该款国产单片机上进行了集成,得到的速度超过了600K字节每秒,实时传输视频的效果就很理想了,参加比赛还得了大奖。

这里有一个该8266WIFI模块在STM32上实现高速透传的演示视频,可以看到实测速度超过M字节每秒了(注: 单位不是M位每秒即MBPS):
    ANYLINKIN_M8266WIFI模块高速透传速M字节秒_腾讯视频  (直接复制URL打开请选择超清或以上查看)

这里有一个基于8266WIFI模块的演示视频,在这个模块上做的WEB服务器(直接复制URL打开):    AnylinkinM8266WIFI模块内嵌WEB服务器_腾讯视频 (请选择超清或以上查看)。
在这个视频里,可以看到,一旦连接上模块后,手机上会自动弹出一个网页,可以在里面配网并提示配网进展状态、查看连接状态,以及很多其他的工作。
 

在某宝关键字搜索 "SPI 高速 多链接"可以找到上述高速WIFI模组产品化案列的详细说明。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值