CH390 强制PHY工作模式说明

对于CH390 PHY的操作,我们根据例程的流程一起看一下:

首先,例程中的main主函数里,在 ch390_default_config();函数中有对PHY的工作模式配,默认都是配置为自协商模式

那么实际进入到ch390_set_phy_mode();这个函数中看一下:

 可以看到这个函数中主要是对CH390_PHY_BMCR(0x00)、CH390_PHY_ANAR(0x04)、CH390_GPR(0x1F)这三个寄存器进行操作

 

以自协商为例,例程中

BMCR_value = 0x1000 = 0001 0000 0000 0000
ANAR_value = 0x01E1 = 0000 0001 1110 0001

对照CH182手册中的寄存器描述,可以看到在:

《控制寄存器(BMCR寄存器)》中开启了自协商功能并且在《自动协商功能寄存器(ANAR)》开启了PHY的对应协商功能;最后将通用寄存器(GPR)的bit[0]置0,即启动PHY的电源开始工作。

 

再比如有些情况,CH390对端接的设备必须要求强制为百兆全双工,那么390端就不能用自协商模式,因为由于并行检测的机制,这样做最终会协商为半双工的模式,影响通信,细节此处不做过多描述,感兴趣可以自行查找并行检测相关资料。

所以我们就需要将390端也设置为强制百兆全双工的模式去和对端进行PHY的协商。

 

那么是如何操作的呢?如下:

BMCR_value = 0x2100  //代表将自协商关闭,设置PHY的工作速度为100M,工作模式为全双工

ANAR_value = 0x101   // 代表将支持10M的功能关掉,仅开启支持百兆全双工

此种设置下,就已经将390的PHY设置为强制百兆全双工的模式。

 

但是这样设置后,PHY的极性和线序并不会自动翻转,可能会导致PHY有出现会link不上的情况,此时就需要手动去翻极性和线序,用来匹配对端从而达到PHY协商link成功的目的

如下,出现link不上的现象后,定期执行下方的四组代码进行手动翻转即可。

 1     ch390_write_phy(0x1f, 0);
 2     ch390_write_phy(28, 0x00);//MDIX 极性置0
 3 
 4     ch390_write_phy(0x1f, 0);
 5     ch390_write_phy(28, 0x02);//MDIX 极性置0
 6 
 7     ch390_write_phy(0x1f, 0);
 8     ch390_write_phy(28, 0x08);//MDI 极性置1
 9 
10     ch390_write_phy(0x1f, 0);
11     ch390_write_phy(28, 0x0A);//MDI 极性置1

 

posted on 2025-04-30 13:33  Lqqq123  阅读(186)  评论(0)    收藏  举报

导航