Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1595954
  • 博文数量: 92
  • 博客积分: 2002
  • 博客等级: 大尉
  • 技术积分: 4717
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-01 17:09
文章分类

全部博文(92)

文章存档

2013年(1)

2012年(6)

2011年(85)

分类: LINUX

2011-05-11 11:35:43

最近搞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的话,再读一次才行
阅读(3775) | 评论(0) | 转发(2) |
0

上一篇:内核抢占实现(preempt)

下一篇:net-snmp

给主人留下些什么吧!~~