近期工作上的bug比较多,故整理一下。
PMON 下的便捷调试命令
因为PMON 下没有内建 mii 命令,所以有些读 PHY 内部寄存器的操作很不容易实现。
读 d4 0xc0000000
写 m2 0xc0000000 0x080c
龙芯2K1000的 MAC 控制器是 DesignWire 设计的,驱动是 stmicro 编写的,查询dw手册得知:
MAC 寄存器基址 + 0x10
是 MAC 控制器通过 MDIO 读取 PHY 内部寄存器的 控制寄存器,例如:
PMON> d4 0xc0000010
ffffffffc0000010 0000080c
MAC 寄存器基址 + 0x14
是 MAC 控制器通过 MDIO 读取 PHY 内部指定寄存器的值的 数据寄存器,例如:
PMON> d4 0xc0000014
ffffffffc0000014 00000141
读 PHY 寄存器流程
设置你要读的 PHY 的地址、总线时钟、寄存器号,另外要使能写入位和总线忙位。
m2 0xc0000010 0x080d
0x080d 的10~6位为寄存器号,共32个 。
11~15位为当前 PHY 的地址、也是32个,最后一位为1
如,此时输入上述数据,会读出:
PMON> d4 0xc0000014
ffffffffc0000014 00001140
有些高级的 PHY 会有两个特殊的寄存器 EXT_PAGE 和 EXT_STAT,一个是额外页面寄存器,一个是额外页面状态寄存器,这个具体的写入就要看具体的 PHY 了。
UBOOT 下的便捷调试命令
uboot 下可以使用mii read [地址] [寄存器]
进行读取
PHY的通用寄存器定义
REG0 [Control Register]
寄存器0是PHY控制寄存器,通过Control Register可以对PHY的主要工作状态进行设置。重点关注的有以下几位:
Bit15 Reset
该位控制的是PHY复位功能,在该位置写入1实现对PHY的复位操作。复位后该端口PHY的其他控制、状态寄存器将恢复到默认值,每次PHY复位应该在0.5s的时间内完成,复位过程中Bit15保持为1,复位完成之后该位应该自动清零。一般要改变端口的工作模式(如速率、双工、流控或协商信息等)时,在设置完相应位置的寄存器之后,需要通过Reset位复位PHY来使配置生效。
Bit14 Loopback
该位是一个调试以及故障诊断中常用的功能,Bit14置1之后,PHY和外部MDI的连接在逻辑上将被断开,从MAC经过MII/GMII(也可能是其他的MAC/PHY接口)发送过来的数据将不会被发送到MDI上,而是在PHY内部(一般在PCS)回环到本端口的MII/GMII接收通道上,通过Loopback功能可以检查MII/GMII以及PHY接口部分是否工作正常,对于端口不通的情况可用于故障定位。需要注意的是,很多时候PHY设置Loopback后端口可能就Link down了,MAC无法向该端口发帧,这时就需要通过设置端口Force Link up才能使用Loopback功能。
Bit12 Auto-Negotiation Enable
自动协商(AN)开关。设置为1表示打开AN功能,端口的工作模式通过和连接对端进行AN来确定。如果设置为0则AN功能关系,端口的工作模式通过Control Register相应位置的配置决定。必须注意的是,对于1000BASE-T接口,自动协商必须打开。
Bit11 Power Down
电源失能开关,置1,一般用于写完寄存器配置后,和Bit15同时置位进行保存配置操作。
Bit9 Restart Auto-Negotiation
重启自协商,一般用于初始化完成后的自协商网络链接。
REG1 [Status Register]
寄存器1是PHY状态寄存器,主要包含PHY的状态信息,大多数bit的值都是由芯片厂家确定的,不过也有公用的值,需要注意的有以下几位:
Bit5 Auto-Negotiation Complete
AN完成状态指示位。Bit5指示的是端口AN进程是否完成的状态位。在AN Enable的情况下,Bit5=1表示自动协商进程已经成功结束,此时PHY的其他和Link状态相关的寄存器才是正确可靠的。如果AN进程没有完成,则这些状态信息可能是错误的。在调试以及异常故障处理时,可以通过该位寄存器的状态判断AN是否成功,从而进一步的检查AN相关的设置是否正确,或者芯片的AN功能是否正常等。
Bit2 Link Status
Link状态指示位。Bit2=1代表端口Link up,0则代表端口Link down。实际应用中一般都是通过Bit2来判断端口的状态。而且,一般的MAC芯片也是通过轮询PHY的这个寄存器值来判断端口的Link状态的(这个过程可能有不同的名称,比如BCM叫做Link Scan,而Marvell叫做PHY Polling。)如前所述,在AN Enable的情况下,Link Status的信息只有在Auto-Negotiation Complete指示已经完成的情况下才是正确可靠的,否则有可能出错。
REG2 [PHY ID Register]
REG3 [PHY ID Register]
寄存器2、3是PHY ID寄存器,如果你需要对特定类型的 PHY 进行单独配置,可以将这两个寄存器读出来进行校验。
REG4 [Auto-Negotiation Advertisement Register]
REG5 [Auto-Negotiation Link Partner Base Page Ability Register]
REG6 [Auto-Negotiation Expansion Register]
REG7 [Auto-Negotiation NEXT Page Register]
REG8 [Auto-Negotiation Link Partner Received NEXT Page Register]
寄存器4、5、6、7、8是自协商寄存器,这五个寄存器值一般会跟随具体的环境进行改变,需要参考具体的芯片手册。
REG9 [1000 BASE-T Control]
寄存器9保存的是1000BASE-T模式的配置信息,控制PHY的AN信息中与1000BASE-T相关的协商信息,以及PHY在1000BASE-T模式下的工作模式。