在以前的文章,咱们讲解了STM32的网络外设部分。后端
文章有《STM32网络电路设计》《STM32网络之MAC控制器》《STM32网络之DMA控制器》《STM32网络之中断》。网络
STM32只有网络外设时不能进行网络通讯的,由于STM32只提供了SMI接口,MII和RMII接口。咱们还须要与之通讯的外部网络芯片,简称PHY芯片。我熟悉的PHY型号有:RTL8201F,RTL8201E,RTL8201G,DP83848,YT8512C等,原计划讲解RTL8201F的,可是内容太多,先把PHY寄存器拿出来说一下。app
为何STM32不集成PHY呢?oop
PHY(PortPhysical Layer),中文可称之为端口物理层。测试
一、PHY芯片是模拟芯片,须要将网线的差分信号转换成数字信号,若是集成,则芯片面积增长,若是要下降功耗,还要高的芯片制造工艺,这会直接将芯片成本拉高。编码
二、并非全部的STM32使用者都须要使用到网络,集成PHY会增长成本。spa
因此,STM32不集成PHY不是技术问题,而是各方面考虑的结果。设计
难道没有集成PHY的MCU吗?3d
有的,TI的LM3S8962。调试
咱们说回PHY寄存器,外部PHY芯片寄存器分为3种类型
Basic:基础寄存器
Extended:扩展寄存器
Vendor-spcififc:厂商特殊寄存器
其中在802.3协议2012版中有以下说明。
不一样的手册,对基础寄存器有不一样的说明,按照802.3-2012上图的说明基础寄存器是控制器寄存器(寄存器0)和状态寄存器(寄存器1),在GMII(千兆网)接口中海油扩展状态寄存器(寄存器15)。
本文主要根据802.3-2012协议讲解PHY的基础寄存器,并非根据某个具体芯片讲解的。
寄存器0和寄存器1在协议文档的中位置以下图
上面提到的802.3-2012协议你们能够到ieee官网下载
或者经过百度网盘下载
连接:https://pan.baidu.com/s/1Nr_KHse32zysBKZ0btPceg
提取码:xhin
寄存器0是PHY控制寄存器,经过ControlRegister能够对PHY的主要工做状态进行设置
bit15 Rset
bit15为1时表示,PHY复位。Bit15控制的是PHY复位功能,在该位置写入1实现对PHY的复位操做。复位后该端口PHY的其余控制、状态寄存器将恢复到默认值,每次PHY复位应该在0.5s的时间内完成,复位过程当中Bit15保持为1,复位完成以后该位应该自动清零。通常要改变端口的工做模式(如速率、双工、流控或协商信息等)时,在设置完相应位置的寄存器以后,须要经过Reset位复位PHY来使配置生效。
在复位过程完成以前,不须要PHY接受对控制寄存器的写事务,而在复位过程完成以前,对控制寄存器中除bit15之外的位的写操做可能无效。
bit14 Loopback
Loopback是一个调试以及故障诊断中经常使用的功能,Bit14置1以后,PHY和外部MDI的链接在逻辑上将被断开,从MAC通过MII/GMII(也多是其余的MAC/PHY接口)发送过来的数据将不会被发送到MDI上,而是在PHY内部(通常在PCS)回环到本端口的MII/GMII接收通道上。
经过Loopback功能能够检查MII/GMII以及PHY接口部分是否工做正常,对于端口不通的状况可用于故障定位。须要注意的是,不少时候PHY设置Loopback后端口可能就Linkdown了,MAC没法向该端口发帧,这时就须要经过设置端口ForceLink up才能使用Loopback功能。
bit13 Speed Selection(LSB)
Bit13和Bit6两位联合实现对端口的速率控制功能,具体的对应关系详见下图
须要注意的是SpeedSelection只有在自动协商关闭的状况下才起做用,若是自动协商设置为Enable状态,则该设置不起做用;
而且,对SpeedSelection的修改设置,每每须要复位端口才能配置生效。所以在设置该位置的时候须要检查自动协商的设置并经过Bit15复位端口。
bit12 Auto-Negotiation Enable
自动协商(AN)开关。设置为1表示打开AN功能,端口的工做模式经过和链接对端进行自动协商来肯定。若是设置为0则自动协商功能关闭,端口的工做模式经过ControlRegister相应位置的配置决定。必须注意的是,对于1000BASE-T接口,自动协商必须打开。
bit11 Power Down
端口工做开关:设置为1将使端口进入PowerDown(低功耗状态)模式,正常状况下PHY在PowerDown模式其MII和MDI均不会对外发送数据。PowerDown模式通常在软件shutdown端口的时候使用,须要注意的是端口从PowerDown模式恢复,须要复位端口以保证端口可靠的链接。
bit10 Isolate
隔离状态开关:改位置1将致使PHY和MII接口之间处于电气隔离状态,除了MDC/MDIO接口的信号外,其余MII引脚处于高阻态。IEEE802.3没有对Isolate时MDI接口的状态进行规范,此时MDI端可能还在正常运行。Isolate在实际应用中并无用到。而且,值得注意的是,因为目前不少百兆的PHY芯片其MAC接口主流的都是SMII/S3MII,8个端口的接口是相互关联的,一个端口设置Isolate可能会影响其余端口的正常使用,所以在使用中注意不要随意更改bit10的状态。
bit9 Restart Auto-Negotiation
从新启动自动协商开关:Bit9置1将从新启动端口的自动协商进程,固然前提是Auto-NegotiationEnable是使能的。通常在修改端口的自动协商能力信息以后经过Bit9置1从新启动自动协商来使端口按照新的配置创建link。
bit8 Duplex Mode
双工模式设置:Bit8置1端口设置为全双工,置0则端设置为半双工,和SpeedSelection的设置同样,DuplexMode的设置只有在自动协商关闭的状况下才起做用,若是自动协商设置为Enable状态,则该设置不起做用,端口的双工模式根据AN结果来定。对DuplexMode的修改配置也须要复位端口才能生效。
bit7 Collision Test
冲突信号(COL)测试开关:在须要对COL信号进行测试时,能够经过Bit7置1,这时PHY将输出一个COL脉冲以供测试。实际测试操做中也能够将端口配置为半双工状态,经过发帧冲突来测试COL信号,所以该配置实用价值不大。
bit6 Speed Selection(MSB)
和Bit13两位联合实现对端口的速率控制功能。
bit5 Unidirectional enable
当第12位为1或第8位为0时,该位为忽略了。
当第12位为0且第8位为1:
1:从MII接口启用传输,无论PHY是否肯定已创建有效链路
0:仅当PHY肯定已创建有效链路时,才启用从MII接口传输
Bits 4:0 reserved
保留位,它们应写入为零,读取时应忽略;可是,PHY应返回这些位中的值零。
寄存器1是PHY状态寄存器,主要包含PHY的状态信息。
bit15 100BASE-T4
PHY使用100BASE-T4信令规范执行链路传输和接收的能力。1:具备能力;0:不具备能力。
bit14 100BASE-X Full Duplex
PHY使用100BASE-X信令规范执行全双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit13 100BASE-X Half Duplex
PHY使用100BASE-X信令规范执行半双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit12 10Mb/s Full Duplex
PHY具备以10Mb/s的速度运行时执行全双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit11 10Mb/s Half Duplex
PHY具备以10Mb/s的速度运行时执行半双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit10 100BASE-T2 Full Duplex
PHY具备使用100BASE-T2信令规范执行全双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit9 100BASE-T2 Half Duplex
PHY具备使用100BASE-T2信令规范执行半双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit8 Externded Status
1:使能寄存器15
0:不使能寄存器15
bit7 Unidirectional ability
1:PHY有能力编码和传输来自PHY的数据经过MII接口,而无论PHY是否已肯定有效链路已被链接已创建。
0:仅当PHY肯定已创建有效链路时,才启用从MII接口传输
bit6 MF Preamble Suppression
1:PHY可以接受管理帧,而无论它们前面是否有前导码模式。
0:PHY不能接受管理帧,除非它们前面有前导码模式。
前导码模式。
在官方文档中22.2.4.5.2中有描述的。你们能够自行查看。
其实这个前导码咱们在以前也是讲解到的,在文章《STM32网络之SMI接口》以下图,建议没有读过这篇文章的同窗读一下。
bit5 Auto-Negotiation Complete
AN完成状态指示位:Bit5指示的是端口AN进程是否完成的状态位。在ANEnable的状况下,Bit5=1表示自动协商进程已经成功结束,此时PHY的其余和Link状态相关的寄存器才是正确可靠的。若是AN进程没有完成,则这些状态信息多是错误的。在调试以及异常故障处理时,能够经过该位寄存器的状态判断AN是否成功,从而进一步的检查AN相关的设置是否正确,或者芯片的AN功能是否正常等。
bit4 Remote Fault
远端错误指示位:Bit4=1表明链接对端(LinkPartner)出错,至于出错的具体类型以及错误检测机制在规范中并无定义,由PHY的制造商自由发挥,通常的厂商都会在其余的寄存器(Register16-31由厂商自行定义)指示比较详细的错误类型。在与端口相关的故障查证中,RemoteFault是一个重要的指示信息,经过互联双方的RemoteFault信息(可能要加上其余的具体错误指示),能够帮助定位故障缘由。
bit3 Auto-Negotiation Ability
1:PHY使能自动协商
0:PHY不使能自动协商
bit2 Link Status
Link状态指示位:Bit2=1表明端口Linkup,0则表明端口Linkdown。实际应用中通常都是经过Bit2来判断端口的状态。并且,通常的MAC芯片也是经过轮询PHY的这个寄存器值来判断端口的Link状态的(这个过程可能有不一样的名称,好比BCM叫作LinkScan,而Marvell叫作PHYPolling。)如前所述,在ANEnable的状况下,LinkStatus的信息只有在Auto-NegotiationComplete指示已经完成的状况下才是正确可靠的,不然有可能出错。
bit1 Jabber Detect
1:检测到抖动(戳刺)状态
0:没有检测到抖动(戳刺)状态
bit0 Extended Capability
1:PHY提供了扩展的功能集,可经过扩展的寄存器集进行访问。
0:没有提供扩展寄存器。
寄存器15主要模式千兆网模式下,PHY的状态。
如上图,寄存器15主要描述,千兆网模式下PHY的状态,具体含义和寄存器1的相关位差很少。
bit15 1000BASE-X Full Duplex
PHY使用1000BASE-X信令规范执行全双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit14 1000BASE-X Half Duplex
PHY使用100B0ASE-X信令规范执行半双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit13 1000BASE-T Full Duplex
PHY具备使用1000BASE-T信令规范执行全双工链路传输和接收的能力。1:具备能力;0:不具备能力。
bit12 1000BASE-T Half Duplex
PHY具备使用1000BASE-T信令规范执行半双工链路传输和接收的能力。1:具备能力;0:不具备能力。
Bits 11:0 reserved
保留位,读取的时候忽略。
04
其余寄存器
除去基础寄存器,802.3-2012协议也提到了其余寄存器,这里简单说明下,不作重点讲解。
寄存器2、3:芯片ID寄存器
寄存器二、3分别是PHYID寄存器,从内核代码知道,寄存器2(PHYID1)为高16位,而寄存器3(PHYID2)为低16位。它们做为PHY芯片的标识,通常被认为做用不大,之前有过同一主CPU搭配不一样的PHY组合不一样的板卡,使用同一分内核,这里就能够用PHYID来作区别。
寄存器4:自动协商通告寄存器
该寄存器保存着PHY自己具有的特性、能力。如PHY支持流控、百兆全双工/半双工、十兆全双工/半双工,等。
当设置为自动协商使能状况下经过FLP在MDI上进行通告。若是不使能,则此寄存器的配置无效。
寄存器5:自动协商对端能力通告寄存器
该寄存器和寄存器4相似,它表示对端(交换机或PC)具有的特性、能力。一样要注意是的只有在自动协商使能状况下该寄存器信息才有效。因为此寄存器表示的是对端的状态,因此通常状况下寄存器的值被设计为只读,但有的芯片如dm9000的流控位5.10FCS是可读写的。
该寄存器主要用来了解对端的状况,在出现问题时,能够了解对方的信息,从而大体定位范围。而不用一味地找自身缘由。万一真的是对端的交换机出现故障,此寄存器就是有力的现场证据。
点击查看本文所在的专辑,STM32F207网络开发