OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 44716|回复: 42

STM32F407+lwip的速度提升问题

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-11-21
在线时间
1 小时
发表于 2014-12-2 18:49:32 | 显示全部楼层 |阅读模式
5金钱
STM32F407芯片,phy是DP83848,基于Lwip协议栈的TCP服务器模式程序已经调试成功,可以发送接收数据,ping延迟也小于1ms,但就是测试发送和接收速度只有几十kbps,后来听人说要改lwip中的缓存,我也改大了,但测试后还是只有一百多kbps,求教大神,怎么改才能提升传输速度啊????

最佳答案

查看完整内容[请看2#楼]

1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。 2、尽量减少数据拷贝,数据拷贝也会浪费大量的时间。 3、就像别人说的,将缓存开大一点,你如果使用了ST的官方以太网库的话,有下面几个地方需要改打一点。 [mw_shl_code=c,true]//STM32内部MAC发送和接收BUF个数 #define ETH_RXBUFNB 10 #define ETH_TXBUFNB 10[/mw_shl_code] [mw_shl_code=c,true]#define MEM_SIZE ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-12-2 18:49:33 | 显示全部楼层
1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。
2、尽量减少数据拷贝,数据拷贝也会浪费大量的时间。
3、就像别人说的,将缓存开大一点,你如果使用了ST的官方以太网库的话,有下面几个地方需要改打一点。
[mw_shl_code=c,true]//STM32内部MAC发送和接收BUF个数 #define ETH_RXBUFNB 10 #define ETH_TXBUFNB 10[/mw_shl_code]
[mw_shl_code=c,true]#define MEM_SIZE 20000 //内存堆heap大小 #define MEMP_NUM_PBUF 30 //MEMP_NUM_PBUF:memp结构的pbuf数量,如果应用从ROM或者静态存储区发送大量数据时 //这个值应该设置大一点 #define MEMP_NUM_TCP_SEG 300 //MEMP_NUM_TCP_SEG:最多同时在队列中的TCP段数量 #define PBUF_POOL_SIZE 30 //PBUF_POOL_SIZE:pbuf内存池个数 #define PBUF_POOL_BUFSIZE 512 //PBUF_POOL_BUFSIZE:每个pbuf内存池大小 #define TCP_MSS (1500 - 40) //最大TCP分段,TCP_MSS = (MTU - IP报头大小 - TCP报头大小 #define TCP_SND_BUF (25*TCP_MSS) //TCP发送缓冲区大小(bytes). #define TCP_SND_QUEUELEN (10* TCP_SND_BUF/TCP_MSS) //TCP_SND_QUEUELEN: TCP发送缓冲区大小(pbuf).这个值最                                                                //小为(2 * TCP_SND_BUF/TCP_MSS) #define TCP_WND (8*TCP_MSS)      //TCP发送窗口[/mw_shl_code]
注意:TCP_WND是发送窗口,这个值对于LWIP的速度影响非常大。
以下是我们在STM32F407探索者开发板上的LWIP网速测试,可以给你参考一下。
平台:STM32F407+LAN8720 RMII接口
协议栈:LWIP
系统:UCOSII
测试方法:netio测试TCP速度,开发板做netio服务器。电脑端为netio客户端

下图为未经过优化的测试结果。


可以从上图中看出,发送和接收的速度基本维持在1M左右,但是按照我上面说的方法进行设置以后测试的结果如下图


    从上图可以看出这时的速度发送和接收基本快到了2M,说明效果还是很明显的,但是据我了解RTT优化到了开发板接收2.5M,发送7.5M的恐怖速度!!!

下面附上我的针对STM32F407探索者开发板的LWIP网速测试工程和netio组件,还有RTT关于netio组件的使用说明

netio组件.zip

157.61 KB, 下载次数: 3600

实验7_6TCPIP网络组件Lwip之netio网速测试.pdf

246.53 KB, 下载次数: 3715

LWIP优化测试.zip

1.39 MB, 下载次数: 7138

开往春天的手扶拖拉机
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-12-2 21:32:17 | 显示全部楼层
表示暂时慢得无所谓了。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-11-21
在线时间
1 小时
 楼主| 发表于 2014-12-3 11:59:50 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
多谢大神的回复,但是这些我都改了的,结果用TCP&UDP测试工具测试,发送和接受速度还是最多125k左右啊,1M完全没有啊,太伤感了。我没上系统,裸机跑的,而且就是用的ST的官方以太网库。请教大神,还能怎么改啊?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-12-3 12:28:54 | 显示全部楼层
回复【4楼】ransen558:
---------------------------------
你先用netio这个组件测试一下呗。
开往春天的手扶拖拉机
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-11-21
在线时间
1 小时
 楼主| 发表于 2014-12-3 14:24:52 | 显示全部楼层


这个不知怎么样用啊?
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-11-21
在线时间
1 小时
 楼主| 发表于 2014-12-3 14:26:15 | 显示全部楼层


这个不知怎么用啊?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-12-3 14:50:06 | 显示全部楼层
回复【7楼】ransen558:
---------------------------------
这个需要你在开发板上做一个netio服务器,然后RTT那个测试文档里面说明了这个工具怎么使用的啊。我给的那个例程里面使用了UCOSII操作系统,不过netio服务器用的是RAW编程方式,可以很方便的移植到无操作系统的平台上
开往春天的手扶拖拉机
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-5-30
在线时间
0 小时
发表于 2014-12-4 15:03:03 | 显示全部楼层
楼主,可以分享一下你写的程序吗,我也在学习f4+83848实现以太网,小白一个,希望楼主帮帮忙
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-11-21
在线时间
1 小时
 楼主| 发表于 2014-12-4 18:36:48 | 显示全部楼层
回复【9楼】wangjia19900909:
---------------------------------
我也是用的开发板的光盘中自带的ST库程序哈,不是自己写的(还没那水平哦),你买开发板应该都有程序的,不用我提供了吧
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2014-1-8
在线时间
41 小时
发表于 2015-1-13 10:56:24 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
您好  您对战舰版stm32+enc28j60速度进行测试过吗?我手上有战舰版
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-13 14:53:00 | 显示全部楼层
回复【11楼】lzh10620:
---------------------------------
没有对战舰stm32+enc28j60的速度进行测试
开往春天的手扶拖拉机
回复

使用道具 举报

8

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2013-5-15
在线时间
8 小时
发表于 2015-4-10 22:00:30 | 显示全部楼层
各位大侠,你们是怎么实现分包发送的呀?我每次只能发送1.5k左右大小的数据
回复

使用道具 举报

1

主题

20

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2013-11-22
在线时间
0 小时
发表于 2015-7-17 09:55:01 | 显示全部楼层
降速怎么实现,加delay?
回复

使用道具 举报

21

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
624
金钱
624
注册时间
2014-11-11
在线时间
161 小时
发表于 2015-9-1 15:07:44 | 显示全部楼层
回复【13楼】dq1601:
---------------------------------
你的问题解决了吗?我用的是STM32F407,移植原子的UDP程序,发送的最大数据还不到1.5k,我猜想的原因是PBUF_POOL类型PBUF链表中
只有第一个pbuf的payload放进了数据,而链表中的第二个没有写进数据,我把每个PBUF的大小都定义为#define BUF_POOL_BUFSIZE       1024 + 54
54是各种首部,所以真正的数据区只是1024字节,然后申请内存ptr=pbuf_alloc1(PBUF_TRANSPORT,1476,PBUF_POOL);,这里只能设置1476最大就发送不出去了 ,然后网络调试助手只能收到前1024字节,后面的1476-1024字节都是0,求指教。。。。。谢谢
回复

使用道具 举报

21

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
624
金钱
624
注册时间
2014-11-11
在线时间
161 小时
发表于 2015-9-1 15:08:35 | 显示全部楼层
回复【12楼】zuozhongkai:
---------------------------------
请您看看12楼的问题,望不吝赐教,谢谢。。。。鞠躬。。。
回复

使用道具 举报

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
发表于 2015-9-6 16:36:40 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
lz,这个netio怎么使用呢?

有没有详细的使用步骤?
回复

使用道具 举报

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
发表于 2015-9-7 10:28:36 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
lz,你的这句话说反了:但是据我了解RTT优化到了开发板接收2.5M,发送7.5M的恐怖速度!!!

正确的是:发送2.5M,接收7.5M哦



怎么提高发送的速度呢?下面是我在lpc1778上测试的效果

回复

使用道具 举报

38

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-12-7
在线时间
15 小时
发表于 2015-12-14 16:04:15 | 显示全部楼层
请问   回复【18楼】天山狐狸:
---------------------------------
回复【13楼】dq1601:
---------------------------------
回复【2楼】zuozhongkai:
---------------------------------
请问是怎么测试网口发送和接收速度的,不借助netio
每天都是新开始
回复

使用道具 举报

38

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-12-7
在线时间
15 小时
发表于 2015-12-17 15:23:55 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
STM32F107速度只有几十K,按照你的改了,怎么提高
每天都是新开始
回复

使用道具 举报

87

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2016-3-26
在线时间
116 小时
发表于 2016-7-22 16:56:52 | 显示全部楼层
刺客mfl 发表于 2015-9-1 15:07
回复【13楼】dq1601:
---------------------------------
你的问题解决了吗?我用的是STM32F407,移植原子 ...

为什么我的只能接收256字节的UDP数据?payload缓冲区里面只能容纳256字节,只有前256字节的数据,后面的数据都没有,可以帮我解析一下吗
回复

使用道具 举报

5

主题

62

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2016-3-9
在线时间
74 小时
发表于 2016-8-13 22:49:39 | 显示全部楼层
mark!!!
回复

使用道具 举报

87

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2016-3-26
在线时间
116 小时
发表于 2016-9-9 18:13:51 | 显示全部楼层
zuozhongkai 发表于 2014-12-2 18:49
1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。
2、尽量减少数据拷贝,数据 ...

我的无操作系统移植LWIP,接收速度才3KB/S是怎么回事啊?
回复

使用道具 举报

7

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2014-12-23
在线时间
39 小时
发表于 2017-4-19 13:27:12 | 显示全部楼层
马克一下
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-2-16
在线时间
23 小时
发表于 2017-6-28 20:26:11 | 显示全部楼层
zuozhongkai 发表于 2014-12-3 14:50
回复【7楼】ransen558:
---------------------------------
这个需要你在开发板上做一个netio服务器,然后R ...

您好,新手一个,请问怎么在开发板上做一个netio服务器?有具体文档步骤吗?
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-2-16
在线时间
23 小时
发表于 2017-6-28 20:45:47 | 显示全部楼层
天山狐狸 发表于 2015-9-7 10:28
回复【2楼】zuozhongkai:
---------------------------------
lz,你的这句话说反了:但是据我了解RTT优 ...

您好,请问netio这个怎么用啊?比如怎么搭建,怎么测试?新手一个,跪求。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-2-22
在线时间
7 小时
发表于 2017-8-15 21:32:49 | 显示全部楼层
经过实测,最好不要修改TCP_WND的值,只修改TCP_SND_BUF和TCP_SND_QUEUELEN就可以了,截图是我修改后实测网速
TIM截图20170815213217.png
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-2-22
在线时间
7 小时
发表于 2017-8-15 21:34:30 | 显示全部楼层
但是依旧不太清楚为什么Packet size 为1k和2k时开发板传输速度如此之慢,如果有懂的大神希望赐教一下
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-8-23
在线时间
34 小时
发表于 2017-10-19 14:17:13 | 显示全部楼层
zuozhongkai 发表于 2014-12-2 18:49
1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。
2、尽量减少数据拷贝,数据 ...

我是在F7开发板做的试验,我想要达到3M bytes/s的发送速度,裸机没有做到,除了修改这个,还有什么其他方法吗?
回复

使用道具 举报

12

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1822
金钱
1822
注册时间
2017-9-7
在线时间
501 小时
发表于 2017-10-23 10:18:30 | 显示全部楼层
依宝 发表于 2017-10-19 14:17
我是在F7开发板做的试验,我想要达到3M bytes/s的发送速度,裸机没有做到,除了修改这个,还有什么其他方 ...

请问能发下你的源代码吗  我也在做这个  带系统的  想参考下 邮箱952435103@qq.com 先谢过了
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-9-4
在线时间
0 小时
发表于 2019-9-4 15:55:26 | 显示全部楼层
您好 你是怎么测试的发送接收速度?用什么软件?
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-9-4
在线时间
0 小时
发表于 2019-9-4 15:56:33 | 显示全部楼层
MNicolas 发表于 2017-8-15 21:32
经过实测,最好不要修改TCP_WND的值,只修改TCP_SND_BUF和TCP_SND_QUEUELEN就可以了,截图是我修改后实测网 ...

您好 您是用什么测的网速呀?
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-10-16
在线时间
31 小时
发表于 2019-12-13 11:22:46 | 显示全部楼层
我现在做到9MByte/s,速度刚刚的
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-5-6 13:53:00 | 显示全部楼层
wanggong 发表于 2019-12-13 11:22
我现在做到9MByte/s,速度刚刚的

方便说一下提高到9MByts/s,解决方法吗?目前我用的外挂SRAM,是STM32F207ZET6,最快跑到2.8MByts/s,至少也得跑到4MB-5MB
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2020-5-5
在线时间
16 小时
发表于 2020-5-15 09:16:27 | 显示全部楼层
学习ing...
回复

使用道具 举报

3

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2019-8-5
在线时间
40 小时
发表于 2020-5-19 10:31:47 | 显示全部楼层
zuozhongkai 发表于 2014-12-2 18:49
1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。
2、尽量减少数据拷贝,数据 ...

你好!请问是否有用过KSZ8863这个芯片吗?
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-7-28 09:07:55 | 显示全部楼层
zuozhongkai 发表于 2015-1-13 14:53
回复【11楼】lzh10620:
---------------------------------
没有对战舰stm32+enc28j60的速度进行测试

C:\>win32-i386.exe -t 192.168.100.1

NETIO - Network Throughput Benchmark, Version 1.32
(C) 1997-2012 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  2684.33 KByte/s Tx,  6141 Byte/s Rx.
Packet size  2k bytes:  2684.67 KByte/s Tx,  15863 Byte/s Rx.
Packet size  4k bytes:  2684.90 KByte/s Tx,  4529.47 KByte/s Rx.
Packet size  8k bytes:  2684.46 KByte/s Tx,  3815.45 KByte/s Rx.
Packet size 16k bytes:  2687.56 KByte/s Tx,  4188.95 KByte/s Rx.
Packet size 32k bytes:  2690.19 KByte/s Tx,  3820.37 KByte/s Rx.
Done.
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-7-9
在线时间
8 小时
发表于 2020-9-9 21:33:38 | 显示全部楼层
楼主您好,可以将您的DP83848的调试源码给我看下吗?万分感谢
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2020-8-25
在线时间
25 小时
发表于 2020-10-10 09:18:38 | 显示全部楼层
wanggong 发表于 2019-12-13 11:22
我现在做到9MByte/s,速度刚刚的

请问能发下你的源代码吗  我也在做这个  不带系统的  想参考下 邮箱1245520043@qq.com 先谢过了
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-8-1
在线时间
2 小时
发表于 2021-1-30 10:49:19 | 显示全部楼层
调了很久,发送速度太快就会出现溢出的问题
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-5-20
在线时间
19 小时
发表于 2021-4-14 14:22:17 | 显示全部楼层
zuozhongkai 发表于 2014-12-2 18:49
1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。
2、尽量减少数据拷贝,数据 ...

lz,我咨询一下这个netio组件怎么使用呢,我打不开唉,直接闪退
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-1-6
在线时间
4 小时
发表于 2021-5-7 17:13:05 来自手机 | 显示全部楼层
象牙塔 发表于 2020-5-6 13:53
方便说一下提高到9MByts/s,解决方法吗?目前我用的外挂SRAM,是STM32F207ZET6,最快跑到2.8MByts/s,至少 ...

你的速度能够达到没,可以分享一下嘛?
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2021-5-11 16:29:43 | 显示全部楼层
3278266991 发表于 2021-5-7 17:13
你的速度能够达到没,可以分享一下嘛?

改用439了,F2达不到的,FPGA到arm用FMC,能达到43MB/s,主要是网络的参数配置,其他都没动,另外尽量少任务,少频繁中断
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 15:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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