搜索
bottom↓
回复: 32

请问 STM32+W5500 传输至PC,速率可以最高到多少?

[复制链接]

出0入0汤圆

发表于 2019-3-25 15:52:32 | 显示全部楼层 |阅读模式
请问 STM32+W5500 传输至PC,速率可以最高到多少???

曾经,论坛也有人做过这样的一个板子,请问,如果使用W5500传输ADC采集的模拟量数据,数据最快能到多少?

最高到每秒多少字节?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出10入12汤圆

发表于 2019-3-25 16:32:14 | 显示全部楼层
小包网络开销很大可能不到10K, 大包可以达到1.5MB

出0入0汤圆

发表于 2019-3-25 17:08:48 | 显示全部楼层
wowangru 发表于 2019-3-25 16:32
小包网络开销很大可能不到10K, 大包可以达到1.5MB

1.5MB/s?那还是有点慢的啊,我记得USB2.0是能做到30M~40M的

出0入0汤圆

 楼主| 发表于 2019-3-25 17:10:53 | 显示全部楼层
这个 小包,大包,是怎么说?一次性传输的控制吗?

出10入12汤圆

发表于 2019-3-25 18:14:46 | 显示全部楼层
阿豪博士 发表于 2019-3-25 17:10
这个 小包,大包,是怎么说?一次性传输的控制吗?

是的, 单次传输越多越快

出0入0汤圆

发表于 2019-3-25 18:42:10 | 显示全部楼层
W5500的瓶颈是在SPI接口,多个SOCKET做到1MByte/S是没问题(目前在开发产品),之前同事测试只有一个SOCKET的时候能做到2.5-3MB,这个时候CPU基本上干不了其他事情了,处于实时轮询,实时填数据, MCU:STM32F405

出0入0汤圆

发表于 2019-3-25 18:51:53 | 显示全部楼层
wiznet网站上描述的 最大 15Mbps

出40入42汤圆

发表于 2019-3-25 20:09:14 | 显示全部楼层
这个片子的速度瓶颈如6楼所说,在SPI的限制

出0入0汤圆

发表于 2019-3-25 20:21:51 | 显示全部楼层
STM32F103RE+W5500  硬件spi ,wireshark抓包最大测得2.93MB/S

出0入0汤圆

 楼主| 发表于 2019-3-25 20:45:36 | 显示全部楼层
那 请问一下,这个该搞大的封包如何传输啊?比如,把DMA 方式的ADC,放入一个数组,然后一次性发送出去吗?比如每次发送1000个字节的 可以吗?

出0入0汤圆

发表于 2019-3-25 21:22:43 来自手机 | 显示全部楼层
mangoes 发表于 2019-3-25 18:42
W5500的瓶颈是在SPI接口,多个SOCKET做到1MByte/S是没问题(目前在开发产品),之前同事测试只有一个SOCKET ...

w5500spi 可以用dma模式,这样减轻mcu的压力

出0入17汤圆

发表于 2019-3-26 07:42:50 来自手机 | 显示全部楼层
曾经一个数据包大于2k, 传输的数据出现异常。有的包尾部自动补00

出0入0汤圆

发表于 2019-3-26 09:10:03 来自手机 | 显示全部楼层
HZKJ 发表于 2019-3-26 07:42
曾经一个数据包大于2k, 传输的数据出现异常。有的包尾部自动补00

不支持大针  只能1472吧

出0入17汤圆

发表于 2019-3-26 11:08:53 | 显示全部楼层
huangqi412 发表于 2019-3-26 09:10
不支持大针  只能1472吧

怪我没仔细看手册, 以为TCP会自动划分数据块传输,但是5500不支持那么大的数据包。
但是后来好像改为2048字节,传输正常了。
请问这个1472字节的限制 在数据手册的那一部分有说明。
谢谢。

出0入0汤圆

发表于 2019-3-26 11:18:09 | 显示全部楼层
W5500  不支持 IP 分片

出0入0汤圆

发表于 2019-3-26 11:32:15 | 显示全部楼层
麻烦问下,能够支持modbus tcp的主流 MAC+PHY的芯片是那些,谢谢

出330入0汤圆

发表于 2019-3-26 11:48:35 | 显示全部楼层
楼上几个坛友所谈到w5500的数据包限制问题,是由于W5500硬件收、发寄存器各有16K大小。而它一共有8各socket,平均每个socket就是2K大小。如果想要突破2K大小的限制,就必须要改W5500的初始化参数。比如我搞的一个产品里,2K不满足要求,我改为了4K。

  1. /**@brief  W5500初始化函数
  2.         *@param  None
  3.         *@ret    None
  4.         */
  5. void W5500_init(void)
  6. {
  7.         //uint8_t memsize[2][8] = {{2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}};    //默认每个SOCKET分配2K空间
  8.         uint8_t memsize[2][8] = {{4,4,4,4,0,0,0,0},{4,4,4,4,0,0,0,0}};       //改TX的 socket0 - 4 容量从默认2K到4K, 改RX的 socket0 - 4 容量从默认2K到4K
  9.         uint8_t tmp;
  10.         // First of all, Should register SPI callback functions implemented by user for accessing WIZCHIP
  11.         /* Critical section callback */
  12.         reg_wizchip_cris_cbfunc(SPI_CrisEnter, SPI_CrisExit);              //注册临界区函数
  13.         /* Chip selection call back */
  14. #if   _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_
  15.         reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);        //注册SPI片选信号函数
  16.                        
  17. #elif _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_
  18.         reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);  // CS must be tried with LOW.
  19.                        
  20. #else
  21.         #if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SIP_) != _WIZCHIP_IO_MODE_SIP_
  22.         #error "Unknown _WIZCHIP_IO_MODE_"
  23.                        
  24. #else
  25.         reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
  26.         #endif
  27.                        
  28.         #endif
  29.                        
  30.         /* SPI Read & Write callback function */
  31.         reg_wizchip_spi_cbfunc(SPI_ReadByte, SPI_WriteByte);        //注册读写函数

  32.         /* WIZCHIP SOCKET Buffer initialize */
  33.         if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1)
  34.         {
  35.                 printf("WIZCHIP Initialized fail.\r\n");
  36.                 while(1);            //没有配置成功
  37.         }
  38.         /* PHY link status check */
  39.         do
  40.         {
  41.                 if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1)
  42.                 {
  43.                         printf("Unknown PHY Link stauts.\r\n");
  44.                 }
  45.         }
  46.         while(tmp == PHY_LINK_OFF);
  47. }
复制代码


出0入0汤圆

 楼主| 发表于 2019-3-26 12:45:43 | 显示全部楼层
zcllom 发表于 2019-3-26 11:48
楼上几个坛友所谈到w5500的数据包限制问题,是由于W5500硬件收、发寄存器各有16K大小。而它一共有8各socket ...

非常感谢这位朋友的指点!

出0入0汤圆

 楼主| 发表于 2019-3-26 12:46:23 | 显示全部楼层
qq11qqviki 发表于 2019-3-26 11:32
麻烦问下,能够支持modbus tcp的主流 MAC+PHY的芯片是那些,谢谢

日系 瑞萨的有的!

但是估计很贵!

自己用MCU写一个

我现在用的就是MCU+W5500 采集的数据 很慢。。。

出0入0汤圆

发表于 2019-3-26 13:05:18 | 显示全部楼层
msp432有mac+phy的型号

出0入0汤圆

发表于 2019-3-26 13:16:10 | 显示全部楼层
zcllom 发表于 2019-3-26 11:48
楼上几个坛友所谈到w5500的数据包限制问题,是由于W5500硬件收、发寄存器各有16K大小。而它一共有8各socket ...

感谢指点!

出330入0汤圆

发表于 2019-3-26 13:21:19 | 显示全部楼层
本帖最后由 zcllom 于 2019-3-26 13:50 编辑
阿豪博士 发表于 2019-3-26 12:45
非常感谢这位朋友的指点!

当然还需要指明的是:如果接收端设备比较老旧的话,或者路由器设置的MTU(最大传输单元)、MRU(最大接收单元)的值沿用传统的1500字节的话,你的数据超过1472(1472怎么来的呢?那是因为TCP传输过程中添加了28字节,1500-28=1472就是你的数据包限制),那么多余的部分就会直接默默丢弃。而现在新设备一般MTU可以达到9K。
如何得知路由器的MTU大小限制呢?可以在windows系统里,通过cmd指令调出dos界面。
用ping命令发送1472字节,格式为:ping -f -l 1472 192.168.3.1     (我手头上路由器网关地址是192.168.3.1,大家根据自己实际网关地址填写)
发送成功:




用ping命令发送1473字节,格式为:ping -f -l 1473 192.168.3.1     (我手头上路由器网关地址是192.168.3.1,大家根据自己实际网关地址填写)
发送失败,要求我分包发送:




可以看到,在某个路由器上,我发送1472字节成功了,而发送1473字节失败了。为什么呢?
因为这个路由器的MTU设置为1500:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出330入0汤圆

发表于 2019-3-26 13:25:18 | 显示全部楼层

也要注意我在22楼指明的问题。
我之前弄那个W5500的产品,和电脑直连,发送4k字节的数据,一点问题没有。而挂在某些路由器上,会出现包不完整现象。于是花时间搞明白了是怎么回事。

出0入17汤圆

发表于 2019-3-26 13:26:08 来自手机 | 显示全部楼层
zcllom 发表于 2019-3-26 11:48
楼上几个坛友所谈到w5500的数据包限制问题,是由于W5500硬件收、发寄存器各有16K大小。而它一共有8各socket ...

感谢指点!      

出330入0汤圆

发表于 2019-3-26 13:35:07 | 显示全部楼层

我在22楼指出的问题也要重视,那个地方解释了TCP传输最大1472字节的来由。

出0入0汤圆

发表于 2019-3-26 13:39:50 | 显示全部楼层
zcllom 发表于 2019-3-26 13:21
当然还需要指明的是:如果接收端设备比较老旧的话,或者路由器设置的MTU(最大传输单元)、MRU(最大接收 ...

简直在乱说。全靠猜就得出结论了,还在这传播误导别人。用ping来得出TCP的最大长度,服了。好好查查TCP头有多长,ICMP头多长。。。

出330入0汤圆

发表于 2019-3-26 13:44:01 | 显示全部楼层
caixiuwen 发表于 2019-3-26 13:39
简直在乱说。全靠猜就得出结论了,还在这传播误导别人。用ping来得出TCP的最大长度,服了。好好查查TCP头 ...

全靠猜就得出结论了?
我发上面的回复,是做完测试了的,以上图片全是我刚刚亲手截取。

出0入0汤圆

发表于 2019-3-26 13:47:06 | 显示全部楼层
zcllom 发表于 2019-3-26 13:44
全靠猜就得出结论了?
我发上面的回复,是做完测试了的,以上图片全是我刚刚亲手截取。 ...

哦,知道了,你的原创研究做得非常好。

出0入0汤圆

发表于 2019-3-27 09:26:51 | 显示全部楼层
之前实测,最大就只能到1M多点

出0入0汤圆

 楼主| 发表于 2019-3-27 11:20:22 | 显示全部楼层
我这边的应用是这样的。通过STM32C8T6的SPI2接的W5500,然后STM32的8个AD通道,使用DMA采集!

哪位高手可以指点迷津,使用SPI2的DMA发送数据,最好是数据传输最快。

100红包奉上。

如果少了,请笑一笑。

出0入0汤圆

发表于 2019-3-27 11:38:03 | 显示全部楼层
本帖最后由 ma_xiang 于 2019-3-27 11:46 编辑
HZKJ 发表于 2019-3-26 07:42
曾经一个数据包大于2k, 传输的数据出现异常。有的包尾部自动补00


这个速度是不是不太可能是由于硬件造成的什么问题

出0入0汤圆

发表于 2019-3-27 11:39:47 | 显示全部楼层
HZKJ 发表于 2019-3-26 11:08
怪我没仔细看手册, 以为TCP会自动划分数据块传输,但是5500不支持那么大的数据包。
但是后来好像改为204 ...

可以人为划分socket的空间吧 总共16k

出0入0汤圆

发表于 2019-3-27 16:16:03 | 显示全部楼层
看了楼上各种实测速度,感觉有点慢啊。我用STM32自带的MAC试了一下发小包,测了一下iperf:
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[316]  0.0- 1.0 sec  2.79 MBytes  23.4 Mbits/sec  0.000 ms    0/162761 (0%)
[316]  1.0- 2.0 sec  2.79 MBytes  23.4 Mbits/sec  0.000 ms    0/162359 (0%)
[316]  2.0- 3.0 sec  2.75 MBytes  23.1 Mbits/sec  0.000 ms    0/160490 (0%)
[316]  3.0- 4.0 sec  2.79 MBytes  23.4 Mbits/sec  0.000 ms    0/162598 (0%)
[316]  4.0- 5.0 sec  2.79 MBytes  23.4 Mbits/sec  0.000 ms    0/162300 (0%)
[316]  5.0- 6.0 sec  2.79 MBytes  23.4 Mbits/sec  0.000 ms    0/162355 (0%)
[316]  6.0- 7.0 sec  2.79 MBytes  23.4 Mbits/sec  0.000 ms    0/162361 (0%)
[316]  7.0- 8.0 sec  2.79 MBytes  23.4 Mbits/sec  0.000 ms    0/162358 (0%)
[316]  8.0- 9.0 sec  2.81 MBytes  23.6 Mbits/sec  0.000 ms    0/163762 (0%)
[316]  0.0-10.0 sec  27.8 MBytes  23.4 Mbits/sec  0.000 ms    0/1619549 (0%)

一次发18字节的UDP包,一秒可以发十几万个包。速度2.78兆字节一秒。

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 17:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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