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
浙公网安备 33010602011771号