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

STM32 以太网 MAC Loopback 的实现

[复制链接]
STMCU小助手 发布时间:2022-7-29 15:59
前言
9 g; T. `! e6 W9 I* h3 l在 STM32 以太网调试中经常会遇到“设备接收不到数据”,或者“设备发出的数据对端设备收不到”之类的问题。遇到这类: h1 L$ p2 u0 O8 k4 ~
问题首先要做的是定位问题发生的部位,这样做的好处就是可以指明下一步调试的方向,缩小分析的范围。以下图为例我们做个简单的说明,设备 A 和设备 B 通过以太网通信,现发现设备 B 无法接收设备 A 发送的消息,问题可能出现在几个地方:/ n% K( Y- v' t$ G
应用层的程序,或者协议栈出错,数据根本没有到 STM32 以太网外设。这种情况我们在调试的时候,在以太网输出函数 low_level_output 中打个断点就可以检查出来。$ w+ z# w# h9 n2 f# _
STM32 以太网 MAC 出现问题,没有把数据发送出去。对于这种情况,可以通过 STM32 以太网的 MAC loopback 能来检查 MAC 的收发是否正常。1 A3 M8 U) a1 L7 E
STM32 以太网 MAC 和外部 PHY 之间的通信出现问题。可以通过 PHY 提供的 loopback 功能来检查。
4 `# ^/ Z' G4 J% q0 B设备 A 端的收发没有问题,问题可能出现在线路上或者设备 B。可以通过在网口的接线上做网线交叉,也就是将 RJ-45 接口中 TX+RX+连接,TX-RX-连接,来进行检查。$ G9 \. \$ |" d( m8 e+ h7 _
0 z1 x' X* D7 D: I5 s: B2 o
: y6 c( o1 Z3 q" q6 Q1 J
K[@CIK(4{U4@P`QXH6W6UB8.png
2 ?6 j2 K9 y- ^- L' [
) W2 ^9 z3 ?! v5 E2 i" t4 u
) g5 ]  |; Q  S
本文将主要介绍上面提到的 STM32 MAC loopback 方法。7 X6 u+ k5 J; y- g/ [/ e* `1 k

! ^7 t! w7 S4 u

% ^* g) y  N; {' ]7 a. g+ `MAC loopback 模式
4 q. `6 s+ q( @9 X5 ^5 tMAC loopback 模式的使能很简单,将 ETH_MACCR 寄存器的 LM 位置位就可以了。/ o) Q( N" w& W, _
MAC loopback 模式使能后,MAC 发送的数据帧通过 MII 接口发送给外部 PHY 的同时也发送到 MAC 接收端。这里需要注意的是 STM32 MAC loopback 模式只支持在 MII 接口下工作。9 k1 p9 }7 g6 I7 c
* T$ R2 ^. R  T5 I8 r; F
6 X) B' K+ J, f' n' m1 G2 M
76)JS8V8GTL}CY18@~WSJ_W.png
' V1 N  ?3 @+ G2 ]9 x, I! a6 l1 \8 |, T# l( `+ d- h

# }3 m) A* l/ E  ?# L但要正确的接收到 loopback 的数据,还需要注意一下几个地方:2 E* V: G3 Z7 o4 e
MAC loopback 模式下,MII 接口的接收时钟(RX_CLK)和发送时钟(TX_CLK)还需要外部 PHY 来提供,所以PHY 的初始化不能省。6 T7 o) q, V' C8 u0 f- Z
以太网帧中的目标 MAC 地址应该和源 MAC 地址一样,或者设定为广播地址(FF:FF:FF:FF:FF:FF),否则 MAC 认将会过滤接收到的数据。或者将 ETH_MACFFR 寄存器的 RA 置位,以接收所有的以太网帧。4 W5 ~, Y5 f, y* G( q2 O
• 对于 F7,H7 这类带有 cache 的 MCU 型号,需要注意接收/发送描述符和接收/发送 buffer 的地址,以及 cache 属性。因为这部分存放在 SRAM 的数据 CPU 和以太网 DMA 都会去读写,如果使能 cache(回写)可能会出现数据不一致的情况。也不能将其定义在 STM32F769 DTCM RAM 区域。
; h% y* ?! s6 m; E! u3 q( J
( [  g2 `7 R$ \- m& v! x

" A5 y# w; y9 Y0 g  fMAC loopback 例程
7 w" X) _! k" A, q例程说明
; O, S  i0 |- L& X7 Y3 L+ t0 z. d& Y本文基于 STM32F769I-EVAL 板提供了一个以太网外设测试工程。工程中没有用到 TCP/IP 协议栈,只通过 STM32F7 的 HAL驱动层,实现了以太网 MAC 层的数据收发,同时也实现了 MAC loopback 的功能。这个测试工程的目的是,检测 STM32 ) ^9 V' h1 ~  r) z* r0 Z- Y* y0 e
太网外设的配置是否正确,工作是否正常。! G" h/ [/ S1 t7 ]8 ?% ]$ V" G" o, B
这个例程提供两种工作模式:. W# ?' k7 r+ m. q$ j9 X; G
正常模式
& _. {& Z" [, F# M9 V在这种模式下,可以正常与另一个设备(PC 或者其他的开发板)通信,也就是可以发送和接收以太网帧。用户可以发送自定义的以太网帧数据,程序会自动构建以太网帧并发送。因为没有实现任何 TCP/IP 协议,如果想发送 IP ) D' g/ H6 C+ C. q0 s4 T0 Y8 t
或者 TCP/UDP 包,就需要自己先按照这些包的格式构建好数据。. z  D5 V8 a7 R! Z) d" T: \
MAC loopback 模式$ L4 _: C6 N/ J/ l& G% P" S
在这种模式下,STM32F769I-EVAL 板子发送的数据被直接送回到 MII 接口的接收端。如果此时网口还连接到另一个设备的话,该设备也是可以接收到数据的。
- i9 a$ S4 o9 T" B& n% g8 t/ o+ c
- r) W  ]2 j+ H0 Y. A

* N: [) r! T$ i! u' e例程配置
1 l1 G( ?0 X% G2 y* O* Y3 d4 d打开例程后,先要做以下的配置:) J. G0 [) d- _
设置目标 MAC 地址(dst_addr
8 S# H- Z0 M: P如果发送广播,dst_addr 设置为 FF:FF:FF:FF:FF:FF。
9 x( {6 o1 I4 b$ w: _0 G7 W. |* `; [如果在 MAC loopback 模式下,dst_addr 设置成和 src_addr 一样。
6 z! ^7 `* A2 e( d: R, F. o. C定义帧数据的类型(frame_type
6 i, N- i3 v% J6 A可以发送自定义的帧数据类型,或者通用的预先定义好的帧数据类型。比如,如果发送的是 IPv4 的数据,frame_type 就是 0x0800;如果发送自定义的类型,则可以使用未被分配的数值。在这个 demo 中,用的是7 w! S' F- v0 y! p- e, ^5 Q1 L
0x0601。
4 L! X) N5 p/ u/ ?- L: s初始化要发送的数据 buffer
7 N6 o% {5 W3 P0 M0 w" r要发送的数据保存在 teststring 数组中。请注意,这个数组里只保存应用层要发送的数据,也就是以太网帧格式的数据段,不包括目标/MAC 地址,以太网帧数据类型和 CRC 校验码。
0 n# ^! }) I( h1 Y如果不使能 MAC loopback 功能,则在 main.h 中注释掉 MAC_LOOPBACK_ENABLE 修改好以上的参数后,重新编译烧录后运行。5 t0 d" C0 t/ I1 v( H
每次按下 USER 按键,触发一次数据发送。接收到的数据保存在 rxbuffer,并且板子上的 LD1 灯会改变一次状态。
: L0 X( }3 H$ f$ l& @/ @1 z9 p6 Y4 P: B; ]% j0 A( |6 X, A# E
完整版请查看:附件
% S) @  s6 |6 j5 M  D3 d6 s4 @8 k/ d) a1 M, r4 B7 @

! d$ ~) k7 c$ Q7 w/ V- V

' s5 x2 F; b/ ?9 n0 p+ V' L' z$ t( s" H0 s5 N$ _6 a1 g5 U

STM32以太网MAC Loopback的实现_V1.pdf

下载

445.91 KB, 下载次数: 44

收藏 评论2 发布时间:2022-7-29 15:59

举报

2个回答
wzhigen11 回答时间:2023-1-18 11:19:29
HAO DE 6 X& }" ]  L0 X4 e8 Z
zxy309 回答时间:2024-10-30 11:16:01

好的 先看看

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版