如果设备想连接以太网,一般有两种方法:
- 可直接使用内部有TCP/IP协议栈的硬件模块:比如W5500,MCU直接通过SPI接口控制模块连网等操作。缺点是该模块一般价格较贵,支持的连接数比较少,最主要的对于初学者来说对于学习TCP/IP协议没有多少作用。
- 使用内部含MAC+PHY的网卡芯片或者MCU含MAC网卡芯片含PHY的组合,然后移植tcp/ip协议栈。该方式一般成本低,功能扩展性强,利于学习TCP/IP协议。
第一种联网方式的电路和普通的单片机电路基本一样:四根SPI线连接MCU和模块,一般外加一根中断Int管脚即可,W5500的电路还需注意独立变压器和集成变压器的区别,程序也相对简单,在模块厂家的例程上稍作修改就可。
主要记录一下第二种方式下的电路,如果选用内含MAC的单片机MAC层和PHY的连接可使用MII接口或者RMII接口。
其中MII接口如下(17个管脚):
MII_TX_CLK:发送数据使用的时钟信号,对于10M位/s的数据传输,此时钟为2.5MHz,对于100M位/s的数据传输,此时钟为25MHz。
MII_RX_CLK:接收数据使用的时钟信号,对于10M位/s的数据传输,此时钟为2.5MHz,对于100M位/s的数据传输,此时钟为25MHz。
MII_TX_EN:传输使能信号,此信号必需与数据前导符的起始位同步出现,并在传输完毕前一直保持。
MII_TXD[3:0]:发送数据线,每次传输4位数据,数据在MII_TX_EN信号有效时有效。MII_TXD[0]是数据的最低位,MII_TXD[3]是最高位。当MII_TX_EN信号无效时,PHY忽略传输的数据。
MII_CRS:载波侦听信号,仅工作在半双工模式下,由PHY控制,当发送或接收的介质非空闲时,使能此信号。 PHY必需保证MII_CRS信号在发生冲突的整个时间段内都保持有效,不需要此信号与发送/接收的时钟同步。
MII_COL:冲突检测信号,仅工作在半双工模式下,由PHY控制,当检测到介质发生冲突时,使能此信号,并且在整个冲突的持续时间内,保持此信号有效。此信号不需要和发送/接收的时钟同步。
MII_RXD[3:0]:接收数据线,每次接收4位数据,数据在MII_RX_DV信号有效时有效。MII_RXD[0]是数据的最低位,MII_RXD[3]是最高位。当MII_RX_EN无效,而MII_RX_ER有效时,MII_RXD[3:0]数据值代表特定的信息(请参考表194)。
MII_RX_DV:接收数据使能信号,由PHY控制,当PHY准备好数据供MAC接收时,使能该信号。此信号必需和帧数据的首位同步出现,并保持有效直到数据传输完成。在传送最后4位数据后的第一个时钟之前,此信号必需变为无效状态。为了正确的接收一个帧,有效电平不能滞后于数据线上的SFD位出现。
MII_RX_ER:接收出错信号,保持一个或多个时钟周期(MII_RX_CLK)的有效状态,表明MAC在接收过程中检测到错误。具体错误原因需配合MII_RX_DV的状态及MII_RXD[3:0]的数据值。
RMII接口如下:
精简的独立于介质接口(RMII)规范减少了以太网通信所需要的引脚数。根据IEEE802.3标准,MII接口需要16个数据和控制信号引脚,而RMII标准则将引脚数减少到了7个。RMII具有以下特性:
时钟信号需要提高到50MHz。
MAC和外部的以太网PHY需要使用同样的时钟源 。
使用2位宽度的数据收发
5.时钟源
1)MII时钟源
为了产生TX_CLK和RX_CLK时钟信号,外接的PHY模块必需有来自外部的25MHz时钟驱动。该时钟不需要与MAC时钟相同。可以使用外部的25MHz晶体或者GD32F107xx微控制器的MCO引脚提供这一时钟。当时钟来源MCO引脚时需配置合适的PLL,保证MCO引脚输出的时钟为25MHZ。
2)RMII时钟源
通过将相同的时钟源接到MAC和以太网PHY的REF_CLK引脚保证两者时钟源的同步。可以通过外部的50MHZ信号或者GD32F107xx微控制器的MCO引脚提供这一时钟。当时钟来源MCO引脚时需配置合适的PLL,保证MCO引脚输出的时钟为50MHZ。
3)总结
采用MII接口,PHY的时钟频率要求25M,不需要与MAC层时钟一致。不过该接口占用管脚太多,普通类似于LAN8720A的网卡不建议使用该接口。
采用RMII接口,PHY的时钟频率要求50M,需与MAC层时钟一致,通常从MAC层获取该时钟源。
MDC和MDIO是SMI接口,通信时候有1.9M时钟输出,不通信时候没有,其它类似于IIC总线。主要用来配置网卡的寄存器来初始化网卡的一些选项功能。
需要了解更多以太网接口说明的可以点击:http://www.cnblogs.com/duguqiuying/articles/5759932.html
如下为博主自己使用的一个STM32H7通过RMII驱动的电路,其中RMII_REF_CLK为50M时钟通向单片机,用于同步MAC和PHY。
其中需要特别注意:焊接时候的匹配单路、网卡地址、变压器、一定要硬件管脚置网卡复位,调试时候可以先看25M时钟有没有正常输入,网卡50M有没有正常稳定输出给MCU然后复位测量下SMI有没有信号。以及TX_EN,RX_CRV,最后最好硬件差分画线。如果电路上外接了交换机芯片注意网卡和交换机芯片以及交换机芯片和RJ45之间都需要变压器...
通过RMII接口时候一般驱动电路就是下面两种,读者可以自己分析一下两者的异同:
参考文献:
[1]https://blog.csdn.net/fun_tion/article/details/70270632.html