最近搞bcm5461 PHY寄存器,遇到一个怪问题:
网口明明已经up了,读取phy寄存器居然是link fail,再读一次就变成link up了。

问了问牛人,看了看datasheet,原来是低锁存搞的鬼。

低锁存(Latched low,LL) 当寄存器的相关bit为0后,就会“锁住”不更新此bit,直到连续读两次才更新
高锁存(Latched High,LH) 当寄存器的相关bit为1后,就会“锁住”不更新此bit,直到连续读两次才更新

搞这套坑爹玩意的目的:
    让用户在读取寄存器时,寄存器bit能够保持一个相对稳定的状态,不会实时更新频繁变动
    更重要的是,它也可以用来记录某些“重要的事情”发生过
    在以上例子中,link fail就是比较“重要的事情”,此bit设置低锁存,就要要告诉你:在这次读动作之前,link曾经down过 !!!

读取寄存器的锁存bit,记住操作方法就OK了:
       低锁存(LL)的bit,读到0的话,再读一次才行
       高锁存(LH)的bit,读到1的话,再读一次才行
01-04 02:11