STM32外设之DP83848芯片问题摘录

  • Post author:
  • Post category:其他



问题1、DP83848 跑10M能行,跑100M不行 的原因

1: 我用DP83848 做网络通讯,一开始10M/100M都能通(2013年3月之前能上100M,总共做过1百多块都能上100M),但去年上半年一次焊装了一批新板子,100M不通(全部都不通),只能跑10M,一开始认为是这批DP83848有问题,换了几个批次都不行,然后又重做PCB,还是不行,后来找了能上100M的块老板子做芯片交叉测试,发现新的芯片都不能跑100M,难道是芯片的问题,都换了好几个批次的DP83848了(不能上100M的也做过1百多块),还是不行,难道真的是现在的芯片跑不了100M?(能跑100M是一年半前购买的芯片)。

2: 又做了一个测试:今天又焊接了一块新板子(新板子与老板子PCB图一样,只是生产批次不同),将老芯片DP83848安上去了,成功的跑了100M,如此说明上不了100M的确与芯片有关。难道 TI 的芯片越做越差了?难道新的芯片与老芯片需要PCB做一些调整?现在的DP83848 跑上100M是个问题?

3:现在的DP83848 需要PCB 做怎样的调整才能跑上100M ?

之上的问题困扰了我一年多,实际中一直使用10M状态。

工程的需要不得不解决这个问题,这今天由于采用替换法排除了PCB、晶振、网络变压器、MCU、以及DP83848周边电阻电容的原因。

最后还是把问题锁定在DP83848的管脚特性上了。

用示波器检查发现DP83848的P25脚25MHZ_OUT 的波形与正常的总有些不对,于是尝试着再此脚与地之间加一个22P的电容调整波形,

不加不要紧,一加100M就能PING通了,但多PING 几次后有掉包的现象,方向找到了立马来了精神,调整电容容量,经过多次调整发现此电容在5P-20P之间总有一个值最为合适,改变此容量可达到长时间PING不掉包的理想状态。此后又改造了此前不能上100M的二十多块板子,全部能跑100M了,一年多的困惑终于得到了解决。

现可以做出如下总结:

1:去年1月之前的DP83838 不需加此电容即可跑100M,此后的需要加此电容,说明不同批次DP83848前后的25MHZ_OUT引脚的输出特性有变化,去年之前的芯片在我的PCB上能保证25MHZ的信号,之后的就存在问题了。

2:也许此问题与DP83848 P25脚与MCU之间的布线距离有关,由于我用的是双面板,布线密度较大,DP83848与MCU之间距离不可能太近,因此两者之间布线的长度大概在3.5CM-5CM,如果此距离<=2CM也许就不会出现此问题了(此为推测如有网友能验证请告知我)。

路径:

https://blog.csdn.net/xin_6059/article/details/51308031


问题2、DP83848不能与一部分电脑直连的问题

前面在论坛提过DP83848不断进入中断(插拔网线,实际上没有插拔),后来查找原因是匹配电阻搞错了,本来是50欧姆匹配 搞成用了1.2k的  所以导致信号线不匹配 从而导致网卡不能成功自适应  一直在100M和10M切换  才会有上面提到的进中断  希望后面的同志可留一下 …

现象描述:

有些电脑直连板子(带DP83848网卡芯片),有的电脑可以连上,但是有的电脑时钟连接不上,但是连接路由器就一点问题都没有,很正常。后来通过打印寄存器值发现在10M和100M速率上面来回切换。后面决定强制10M速率,不知适应。果然可以连接上了。然后就怀疑硬件电路问题,检查发现是匹配电阻弄错了。按照手册要求是50欧姆的,搞错成1.2K了,导致网卡不能正常识别,最终导致不能连接一些驱动能力较差的电脑。

路径:

https://blog.csdn.net/bobbat/article/details/44348233


问题3、STM32F407+DP83848硬件设计注意事项

早在还没有毕业前,就调试过STM32F407+DP83848,这次又调试了一次,居然花了2天时间。STM32支持两种工业级标准的接口,来与外部物理层 PHY模块相连,分别是独立于介质的接口(MII)和简化的独立于接口的接口(RMII)。之前PHY芯片使用的MII模式,现在的这次调试是使用的RMII模式(参考了各方原理图,主要还是以官方开发板的MB786为主)。我还是以一个ST官方手册上的图来说说我的使用情况吧。




1.     如果我们按照这个图上来画原理图,这个肯定没有错,但是对于一般使用(我们用的都是全双工的),CRS和COL这两根线使用的不多,至于为什么,我也说的不是很清楚,了解的同学们,可以补充下。

2.     对于连接DP83848和stm32时,在电路上是否要串行电阻,串接多大的问题。借网友的回答是这样的:串接电阻这是用来做阻抗匹配,防止信号反射的。一般PCB走线控制为50欧姆,在这样接收端高阻的情况时,可以通过源端串联50欧姆来做匹配,将终端反射回来的信号吸收,防止在源端再次发生发射。至于,串接多大的电阻,由信号驱动的内阻(大约20欧)决定,与PCB走线匹配。所以这个电阻在PCB上的位置要和信号驱动端靠近。要不要做匹配就取决于信号的速度和走线长度,规则一般是走线长度大于信号波长的1/10就要匹配了,50M的时钟最好是接一下了,不然会看到明显的过冲。参考各方资料,一般接上33欧到50欧的电阻都可以接受。

3.     这里对于MII模式加以说明哪些引脚需要上拉和下拉。

MDIO需要1.5K的上拉电阻,MDC不需要上拉电阻,DP83848的LED_ACT、LED_SPEED、LED_LINK都需要2.2K的上拉电阻;

DP83848的RD-、RD+、TD-、TD+需要上拉49.9欧1%的电阻,并且还需要两个0.1uf的电容接地;

DP83848的20, 21引脚RESERVED必须要接2.2K上拉电阻,和24引脚RBIAS需要一个4.87K欧1%的电阻接地,引脚18、23、37需要电容接地,这些都需要严格按照DP83848的手册来连接电路。

另外,39引脚不需要上拉电阻,如果是RMII模式,就需要2.2K的电阻,这样就选择了我们是使用的RMII模式。

其中,有个重要的信号一定要注意,这个也是我在使用RMII模式没有注意的,stm32 的ETH_RMII_REF_CLK / ETH_MII_RX_CLK 信号线PA1没有连接,使用RMII模式的时候,PA1应该连接到时钟源上面。

最后,DP83848的7引脚,一般还是建议上拉2.2K电阻,并且,将其连接到STM32的IO引脚,因为我们一般还是需要使用一些中断来处理事件,比如,网线热插拔问题。

在硬件调试过程中,stm32的外部时钟是否起振,DP83848的25引脚应该能输出25MHz(MII)或50MHz(RMII)的信号,在RMII模式,TX_CLK应该有25MHz的信号。注意,PHY的复位信号最好不要与stm32的复位信号连接到一起,因为当PHY没有通电使用时,stm32的复位引脚一直会被拉低,导致stm32不能正常使用。

在软件调试过程中,这里以官方例程来说。首先,stm32的外部时钟频率要设置正确;然后,考虑使用哪种模式,相应开启哪种模式的宏定义;再则,如果使用MCO提供DP83848的时钟信号,需要注意stm32 的PA8引脚的初始化,如果是使用的外部时钟源,可以不用考虑MCO信号(但是不用连接PHY),在软件GPIO初始化的时候,要注意,注释PA8的初始化部分,只需要注释该引脚的初始化,引脚状态初始化不要注释,因为后面的引脚初始化都会用到。

路径:

https://blog.csdn.net/lijing198997/article/details/40653845



版权声明:本文为qq1017973409原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。