STM32以太网MACLoopback实施序言在STM32以太网调试中,会出现诸如“设备无法接收数据”之类的问题。或“对等设备无法接收由设备发送的数据”。在STM32以太网调试过程中经常遇到。遇到此类问题时,第一件事就是找到发生问题的位置。这样做的好处是可以指出下一步调试的方向,并缩小分析范围。下图是一个示例。让我们做一个简短的描述。设备A和设备B通过以太网进行通信。现在发现设备B无法接收设备A发送的消息。问题可能在以下几个地方发生:应用层程序或协议栈错误,数据根本没有到达STM32以太网外围设备。在调试这种情况时,可以通过在以太网输出函数low_level_output中命中断点来进行检查。 STM32以太网MAC出现问题,并且未发送数据。在这种情况下,您可以使用STM32以太网的MAC回送功能来检查MAC是否正常发送和接收。 STM32以太网MAC与外部PHY之间的通信存在问题。可以通过PHY提供的环回功能进行检查。设备A的发送和接收没有问题。此问题可能发生在线路或设备B上。可以通过在网络端口连接上连接网络电缆来进行检查,即连接TX +和RX +,以及TX-和RJ-45接口中的RX-。本文将主要介绍上述STM32MACloopback方法。 MACloopback模式MACloopback模式的启用非常简单,只需将ETH_MACCR寄存器中的LM位置1。使能MACloopback模式后,MAC发送的数据帧通过MII接口发送到外部PHY,也发送到MAC接收端。这里应该注意,STM32MACloopback模式仅支持在MII接口下工作。但是要正确接收环回数据,您需要注意以下几点:在MACloopback模式下,还需要由外部PHY提供MII接口的接收时钟(RX_CLK)和发送时钟(TX_CLK)。 PHY无法保存。以太网帧中的目标MAC地址应与源MAC地址相同,或设置为广播地址(FFFFFF:FF),否则MAC将默认过滤接收到的数据。或在ETH_MACFFR寄存器中设置RA以接收所有以太网帧。对于具有高速缓存的MCU型号(例如F7和H7),您需要注意接收/发送描述符,接收/发送缓冲区的地址以及高速缓存属性。由于存储在SRAM中的这部分数据将由CPU和以太网DMA进行读写,因此,如果启用了高速缓存(回写),则可能会出现数据不一致的情况。也不能在STM32F769的DTCMRAM区域中定义它。 MACloopback例程例程说明本文提供了基于STM32F769I-EVAL板的以太网外围设备测试项目。本项目不使用TCP / IP协议栈,仅使用STM32F7的HAL驱动层实现以太网MAC层的数据发送和接收,并实现MAC回送功能。该测试项目的目的是检查STM32以太网外围设备的配置是否正确以及是否工作正常。该例程提供两种工作模式:正常模式在此模式下,您可以与另一设备(PC或其他开发板)正常通信,即可以发送和接收以太网帧。用户可以发送自定义的以太网帧数据,程序将自动构造并发送一个以太网帧。由于未实现TCP / IP协议,因此,如果要发送IP数据包或TCP / UDP数据包,则需要根据这些数据包的格式自己构造数据。 MACloopback模式在这种模式下,STM32F769I-EVAL板发送的数据将直接发送回MII接口的接收端。如果此时网络端口仍连接到另一台设备,则该设备也可以接收数据。例程配置打开例程后,应首先进行以下配置:设置目标MAC地址(dst_addr)。如果发送广播,请将dst_addr设置为FFFFFF:FF。如果处于MACloopback模式,则dst_addr设置为与src_addr相同。定义帧数据的类型(frame_type)可以发送自定义帧数据类型,也可以发送常规的预定义帧数据类型。例如,如果要发送IPv4数据,则frame_type为0x0800;否则,为0x0800。如果要发送自定义类型,则可以使用未分配的值。在此演示中,使用0x0601。初始化要发送的数据缓冲区要发送的数据存储在teststring数组中。请注意,此数组仅保存要由ap发送的数据