你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F7 LWIP协议栈TCP速度测试

[复制链接]
STMCU小助手 发布时间:2021-12-17 12:05
和我最近测试的结果大致相同,STM32F7 上TCP 速率3Mbps左右。而之前我测试UDP,可以到30Mbps 以上。
9 s, z% \; T2 s2 k5 |% v# p# I  A( ~
9 g; b$ u* o& y* m% t0 E4 f5 ?1、测试目的" A  x4 o( y, N. x$ p6 |/ U
    在尽量保持硬件和软件一致的前提下,测试LWIP和DJYIP两个协议栈的TCP接收不同包的速度。
7 k+ R1 O$ i9 P; X3 A2、测试方法3 ?- @7 P6 m6 n4 n1 t+ Q' R
     用一块STM32F7的发送板,应用层无延迟调用TCP发送函数send(),不断发送不同大小的数据包,数据包大小范围64 ~ 1460byte,接收端每1秒统计接收到的数据包,交终端上显示接收的速度。(当然,运行LWIP和DJYIP的两块接收板,运行在相同的主频,协议栈的pbuf缓冲、TCP接收窗口大小、优先级等一致。)   
; B. k3 d( {" \3、软硬件平台
* a, z  U; E/ B* c" n: N     硬件平台
5 n: u: O" v1 r9 O) g1 e1 @LWIP        DJYIP
6 F7 ~& u6 C, {5 M, J: }4 h$ {6 I# E运行板件        ST官方板STM32756G-EVAL2        STM32F7核心板
8 a; E8 m% x& k+ d* M运行主频        200MHz        200MHz0 N& `# v5 k2 I) X4 D) u
连接方式        与发送板直连        与发送板直连
. h' S7 z- u  ?6 {编译调试        MDK        eclipse1 B4 h5 [6 ]$ J' a/ J
     软件平台
$ G/ q: }. d& R, T2 k4 ^LWIP        DJYIP
* j$ ?& n: M7 E3 g网络驱动接收方式        中断        中断
9 \1 g3 y) a$ y$ K+ fpbuf大小        16kbytes        16kbytes! L& S- R+ d7 ^! [
TCP窗口       & p$ n' V9 w+ \. U( g5 {) N
2048' y: q; n0 I$ a2 ~& @
2048. T0 V0 j) q' k1 `
    其中,运行在STM32756G-EVAL2的LWIP的软件代码,是直接从ST官方下载的STM32Cube_FW_F7_V1.6.0版本固件库,
3 ?5 Y% u: R$ Q) ]9 a编译运行在MDK5.12.
) k6 g% j# s. B7 |' q
: J. u4 W/ ~" _/ \$ V; n) d* K4、测试步骤
$ t  N0 S8 p% A: f. N
    (1)源码编写及修改
3 `* @4 c9 i* J5 w# e7 K; d$ j             主要是比较基础的socket编程,发送板作为TCP客户端,两块接收板作为TCP服务器,客户端板建立TCP连接后,一直
: k$ h( _5 _0 ^发送程序,服务器一直接收TCP数据,并统计接收速度。
9 ~9 ~. T6 q# r5 ?7 }' j; R) |              对STM32Cube_FW_F7_V1.6.0源码中LWIP的配置,需要修改lwipopts.h,主要修改了如下两行代码* l6 b! b- X( ]$ P3 h7 R# \% E2 J/ s
  1. #define PBUF_POOL_SIZE          11//8! M) e/ [/ |4 Z% B" D( P, _
  2. #define TCP_WND                 2048//(2*TCP_MSS)
    7 }3 \/ T3 |7 e# X1 z5 M
  3.     (2)客户端发送
    7 X, K7 m5 K: c3 n
  4.        while(1)   1 o8 D" N. u* e8 a- ~) Y0 y
  5.       {/ W- P9 d- y0 x8 v6 ~( ?
  6.             byMsgBuf[0] = byMsgBuf[0] + 1;- S8 q( v: f0 ?* W# Y
  7.             if(ClientSndRand)
    ( H1 N" p6 n8 d5 q7 _$ p
  8.             {
    . k8 O. N/ _6 |' j/ d; m0 [' p
  9.                        iMsgLen =  (int)(drand48() * TCP_PKG_LEN_MAX);  |5 ^* K2 C; M0 L; Y! ~. e( x
  10.             }& ~/ w1 _/ A) R/ x5 Y% N" y
  11.             else5 X# V. m% @) A8 Q
  12.             {
    $ e9 F. F) N& N+ Z  ~0 `0 O: }- L2 j
  13.                     iMsgLen = ClientSndLen;
    & P& K: ^6 o1 f  \3 E1 r% S  a# |
  14.             }
    " _% L8 l" w% C+ l8 \
  15.             if(iMsgLen)) G. G: Z; g8 k
  16.                     iMsgLen = send(sockfd, byMsgBuf, iMsgLen, 0);
    + P# u" L8 v" K+ o+ i2 N! W: i
  17.     }
    , d0 \' t; L& ]/ n" |
  18.     (3)服务器接收
    + c2 N6 \5 A7 N& M* y
  19.           while(1): l  w  Y& k& ?9 d0 ?6 [, F5 N0 A
  20.          {+ ^; i% w( W1 @8 e
  21.                  iMsgLen = recv( sFd, byMsgBuf, SvrRcvLen, 0);
    5 i# _  b9 |, q9 j) }9 H+ v
  22.                  iMsgCnt += iMsgLen;! m0 x/ W% K" Q' ^; g3 F
  23.           }
复制代码
% _% ~2 _2 }% h5 P9 T
5、测试结果" d5 Z" {, Y5 Y7 U" e) n
       测试结果如下表所示
* v2 \  G3 t% j' x+ o0 z4 o9 ~+ u! J/ T) u
发送包(byte)        LWIP(Mbytes/s)        DJYIP(Mbytes/s)
% k* E) G# d* l; O2 J! K( j1400                      3.02                                 3.187 Q3 g( y2 o$ {; b' l3 m+ j" \
1024                       4.22                                3.16
* j2 s+ `0 B5 D/ V512                        3.07                                    3
! h/ W6 P' ]$ ?2 ?+ t2 m' k* t256                        2.02                                    2.51 b# z+ A$ Z: g- N' M
128                       0.2±0.2                              1.76; q% p7 |# H4 O8 R7 q
64                          0.2±0.2                             1.12
% z. J6 r0 T; {9 `- l% \4 zrand*1460        1M内变动        2.52
+ k5 c; f: Y% o2 W      其中,rand是产生0~1的随机数。LWIP这组数据中,1024的速度大于1400,有可能是( X9 |$ O! X! n
因为1024是2的整数次幂的原因(可能猜测)。
# l" u8 W2 v8 Z1 y* r5 D
. s% n' z! P3 g0 l- k
* j# p3 X) x2 [7 Z. X
赞 收藏 评论0 发布时间:2021-12-17 12:05

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版