Stm32F103R6之以太网

时间:2024-04-10 21:15:19

目录

概述

功能介绍

站点管理接口(SMI)

独立于介质的接口:MII

精简的独立于介质的接口:RMII

精确时间协议(IEEE1588 PTP)


概述

stm32以太网模块支持两种标准接口:

1、 连接到外接的物理层(PHY)模块

2、 IEEE 802.3协议定义的独立于介质的接口(MII)和简化的独立于介质的接口(RMII)。

功能介绍

如果要详细介绍以太网,一天一夜也讲不完,这里只能大概讲讲stm32以太网模块的特点。

站点管理接口(SMI)

站点管理接口(SMI)允许应用程序通过时钟和数据两根线来访问任何的PHY寄存器。这个接口可以支持多达32个PHY。

应用程序可以选择32个PHY中的任意一个,并访问PHY的32个寄存器中的任意一个。但在任意时刻,只能访问一个PHY的一个寄存器。

在控制器内部,MDC时钟线和MDIO数据线都是作为复用(AF)功能的I/O端口:

● MDC:一个周期性的时钟信号,为数据的传输提供时钟,最高频率为2.5MHz。MDC信号的高电平和低电平的最小维持时间为160ns,MDC信号的最小周期为400ns。在空闲状态下,SMI接口将驱动MDC时钟信号保持在低电平状态。

● MDIO:数据的输入/输出线,在MDC时钟信号的驱动下,向PHY设备传递状态信息。

Stm32F103R6之以太网

图 1SMI接口信号

独立于介质的接口:MII

独立于介质的接口(MII)用于MAC子层和PHY之间的互联,允许10M位/s和100M位/s数据传输。

Stm32F103R6之以太网

图 2独立于介质的接口(MII)信号线

● MII_TX_CLK:为传输发送数据而提供连续的时钟信号,对于10M位/s的数据传输,此时钟为2.5MHz,对于100M位/s的数据传输,此时钟为25MHz。

● MII_RX_CLK:为传输接收数据而提供连续的时钟信号,对于10M位/s的数据传输,此时钟为2.5MHz,对于100M位/s的数据传输,此时钟为25MHz。

● MII_TX_EN:传输使能信号,表示MAC正在输出要求MII接口传输的数据。此使能信号必需与数据前导符的起始位同步(MII_TX_CLK)出现,并且必需一直保持到所有需要传输的位都传输完毕为止。

● MII_TXD[3:0]:由MAC子层控制,每次同步地传输4位数据,数据在MII_TX_EN信号有效时有效。MII_TXD[0]是数据的最低位,MII_TXD[3]是最高位。当MII_TX_EN信号无效时,传输的数据对于PHY无效。

● MII_CRS:载波侦听信号,由PHY控制,当发送或接收的介质非空闲时,使能此信号。当传送和接收的介质都空闲时,PHY会撤消此信号。PHY必须保证MII_CS信号在发生冲突的整个时间段内都保持有效。 不需要此信号与发送/接收的时钟同步。在全双工模式下,此信号的状态对于MAC子层无意义。

● MII_COL:冲突检测信号,由PHY控制,当检测到介质发生冲突时,使能此信号,并且在整个冲突的持续时间内,保持此信号有效。此信号不需要和发送/接收的时钟同步。在全双工模式下,此信号的状态对于MAC子层无意义。

● MII_RXD[3:0]:由PHY控制,每次同步地发送4位需要接收的数据,数据在MII_RX_DV信号有效时有效。MII_RXD[0]是数据的最低位,MII_RXD[3]是最高位。当MII_RX_EN无效,而MII_RX_ER有效时,PHY会传送一组特殊的MII_RXD[3:0]数据(请参考表194),来告知一些特殊的信息。

● MII_RX_DV:接收数据使能信号,由PHY控制,当PHY准备好卸载和解码数据供MII接收时,使能该信号。此信号必需和卸载好的帧数据的首位同步(MII_RX_CLK)出现,并在数据完全传输完毕之前,都保持有效。在传送最后4位数据后的第一个时钟之前,此信号必需变为无效状态。为了正确的接收一个帧,MII_RX_DV信号必需在整个帧传输期间内都保持有效,有效电平不能晚于数据线上的SFD位。

● MII_RX_ER:接收出错信号,保持一个或多个时钟周期(MII_RX_CLK)的有效状态,指示MAC子层在帧内检测到了错误。错误情况必须配合MII_RX_DV的状态。

 

如下图所示,为了产生TX_CLK和RX_CLK时钟信号,外接的PHY模块必需有来自外部的25MHz时钟驱动。除了使用外部的25MHz晶体提供这一时钟外,STM32F107xx微控制器也可以通过MCO引脚来提供这一时钟;此时需要合适地配置PLL,将来自外部25MHz晶体的MCU时钟从MCO引脚输出出去。

Stm32F103R6之以太网

图 3MII时钟源

精简的独立于介质的接口:RMII

精简的独立于介质接口(RMII)规范减少了与10/100M位/s通信时,STM32F107xx以太网模块和外部以太网之间的引脚数。根据IEEE802.3u标准,MII接口需要16个数据和控制信号引脚,而RMII标准则将引脚数减少到了7个(减少了62.5%的引脚数目)。同时为了保证达到与MII相同的通信速率,时钟信号需要提高到50MHz。

。RMII模块具有以下特性:

● 支持10M位/s和100M位/s的通信速率。

● 时钟信号需要提高到50MHz。

● MAC和外部的以太网PHY需要使用同样的时钟源

● 使用2位宽度的数据收发

Stm32F103R6之以太网

图 4精简的独立于介质的接口信号

精确时间协议(IEEE1588 PTP)

IEEE1588标准定义了一种协议,该协议允许通过网络通讯,本地计算和分离设备技术实现测量和控制系统精确的时钟同步。协议可以应用于通过本地局域网通讯的系统,网络要求支持多播通信,这个局域网可以是(但不限于)以太网。协议可以用来同步拥有不同精度、分辨率和稳定度时钟的系统。协议支持在占用最少网络和计算资源的情况下,系统时钟同步精度达到亚微秒级。协议名称是PTP(精确时间协议),协议的基础是以UDP/IP为载体的消息传递。整个系统或者网络的各个节点,按照发起和接收时间/时钟信息的角色,可以分为主节点和从节点。协议通过在主从节点之间交换PTP消息来把从节点时钟同步到主节点时钟,该技术如下图。

Stm32F103R6之以太网

图 5网络时钟同步

1. 主节点向所有的从节点广播PTP Sync消息。Sync消息包含主节点的时间信息。该消息从主节点发出的时间记为t1。对于以太网端口,应当在MII获取这个时间。

2. 从节点接收到Sync消息,并根据自己的时钟,记录下接收到Sync消息的时间t2。

3. 主节点随后向从节点发送follow_up消息,包含t1的信息,以备后用。

4. 从节点向主节点发送Delay_Req消息,并记录下该消息从MII发出的时间t3。

5. 主节点接收到Delay_Req消息,并记录下接收到的时间t4。

6. 主节点向从节点发送Delay_Resp消息,消息包含了t4的信息。

7. 从节点利用t1、t2、t3和t4,把它的本地时钟与主节点的时钟同步

协议的大部分是通过UDP层之上的软件实现的。不过,由上文所述,需要硬件支持记录PTP包从以太网端口MII发出和收到的准确时间。硬件需要记下该时间信息并将其返回给软件,这样才能正确,高精度地实现PTP时间同步。