但要正确的接收到loopback的数据,还需要注意一下几个地方:
l MAC loopback模式下,MII接口的接收时钟(RX_CLK)和发送时钟(TX_CLK)还需要外部PHY来提供,所以PHY的初始化不能省。 l 以太网帧中的目标MAC地址应该和源MAC地址一样,或者设定为广播地址(FF:FF:FF:FF:FF:FF),否则MAC默认将会过滤接收到的数据。或者将ETH_MACFFR寄存器的RA置位,以接收所有的以太网帧。 l 对于F7,H7这类带有cache的MCU型号,需要注意接收/发送描述符和接收/发送buffer的地址,以及cache属性。因为这部分存放在SRAM的数据CPU和以太网DMA都会去读写,如果使能cache(回写)可能会出现数据不一致的情况。也不能将其定义在STM32F769的DTCM RAM区域。 MAC loopback例程 例程说明 本文基于STM32F769I-EVAL板提供了一个以太网外设测试工程。工程中没有用到TCP/IP协议栈,只通过STM32F7的HAL驱动层,实现了以太网MAC层的数据收发,同时也实现了MAC loopback的功能。这个测试工程的目的是,检测STM32以太网外设的配置是否正确,工作是否正常。 这个例程提供两种工作模式: l 正常模式 在这种模式下,可以正常与另一个设备(PC或者其他的开发板)通信,也就是可以发送和接收以太网帧。用户可以发送自定义的以太网帧数据,程序会自动构建以太网帧并发送。因为没有实现任何TCP/IP协议,如果想发送IP包或者TCP/UDP包,就需要自己先按照这些包的格式构建好数据。 l MAC loopback模式 在这种模式下,STM32F769I-EVAL板子发送的数据被直接送回到MII接口的接收端。如果此时网口还连接到另一个设备的话,该设备也是可以接收到数据的。 例程配置 打开例程后,先要做以下的配置: l 设置目标MAC地址(dst_addr) 如果发送广播,dst_addr设置为FF:FF:FF:FF:FF:FF。如果在MAC loopback模式下,dst_addr设置成和src_addr一样。 l 定义帧数据的类型(frame_type) 可以发送自定义的帧数据类型,或者通用的预先定义好的帧数据类型。比如,如果发送的是IPv4的数据,frame_type就是0x0800;如果发送自定义的类型,则可以使用未被分配的数值。在这个demo中,用的是0x0601。 l 初始化要发送的数据buffer 要发送的数据保存在teststring数组中。请注意,这个数组里只保存应用层要发送的数据,也就是以太网帧格式的数据段,不包括目标/源MAC地址,以太网帧数据类型和CRC校验码。 l 如果不使能MAC loopback功能,则在main.h中注释掉MAC_LOOPBACK_ENABLE宏
|