困扰了N天的PCI网卡问题,无意间找到了方向
现象: linux启动PCI枚举时,初次读PCI网卡82546的寄存器空间,有一定概率会卡死,内核无法执行下去
出问题时,测量PCI总线上的各个管脚,发现 FRAME# IDSEL# DEVSEL# 居然都有周期性的波形!
由此可以推断,此时CPU和PCI网卡间正不断进行着PCI硬件时序。
但测量发现FRAME#的有效时间只保持两个CLK,太短了(导致进入PCI硬件时序死循环?)
解决: 出问题时用探针接触PCI网卡的LAN_PWR_GOOD管脚,PCI硬件时序马上恢复正常,内核正常跑下去了
最终解决方法是,每次上电时,CPLD先拉低再拉高82546GB的LAN_PWR_GOOD管脚
原因:读82546GB的datasheet,拉高LAN_PWR_GOOD管脚,会导致N多resettable寄存器重置。
那为什么有时候启动,有时候启动不了呢?
PCB布线的问题?
TODO....
阅读(2921) | 评论(0) | 转发(0) |