ILD

phy registers
作者:YuanJianpeng 邮箱:yuanjp89@163.com
发布时间:2020-3-23 站点:Inside Linux Development

Phy寄存器及其每一位的宏,定义在内核的include/uapi/linux/mii.h,下面介绍一些重要的寄存器位。


0 Basic mode control register (MII_BMCR)

15位,RESET位,写1开始复位,复位完成后,自动变成0。

12位,自动协商开启位,设置1,开启自动协商,设置0,关闭自动协商。

8位,设置自动协商关闭情况下的Duplex双工模式。1: Full Duplex,0: Half Duplex

6, 13位,高低两位,设置自动协商关闭情况下的speed,00: 10MBps,01: 100Mbps, 10: 1000Mbps

9位,restart autonegotiation,重新开始协商。


1 Basic mode status register (MII_BMSR)

2位,链路状态指示。1: Link UP, 0: Link down

5位,自动协商完成指示,1: 自动协商完成,0: 自动协商未完成。

其它的很多位,表示这个phy的能力,比如是否支持自动协商。是否支持10M/100M在本寄存器表示。

8位,Extended Status,如果为1,表示支持扩展寄存器15,那个寄存器表明了是否支持千兆。


4 Auto-negotiation Advertisement Control register (MII_ADVERTISE)

设置自动协商支持的能力,比如支持哪些speed,是否支持pause。千兆不在本寄存器设置。在9号寄存器设置。


5 Link Partner ability register (MII_LPA)

对方的自动协商能力。千兆的能力在10号寄存器。


9 1000Base-T Control Register

12位,1,手动设置Master/Slave配置,0:Automatic Master/Slave configruation

11位,如果12位是1,则1: 手动配置为Master,0: 手动配置为Slave。

10位,如果12位是1,则1: prefer multi-port device (MASTER),0:prefer signle port device (Slave)

9位,1 Advertise 1000Base-T Full duplex, 0 not advertised

8位,1 Advertise 1000Base-T Half-duplex,0 not advertised


0xa 1000Base-T status Register

11位,Link patner是否支持1000Base-T Full duplex

10位,Link patner是否支持1000Base-T Half duplex


自动协商情况下,如何获得当前速度,双工模式:

读取自己的advertisement,和link parter的,进行与,从高到低,如果两个都设置了,那么就是那个速度和双工模式。


参考:

drivers/net/phy/phy_device.c



Copyright © insidelinuxdev.net 2017-2021. Some Rights Reserved.