由于项目要求,使用GD32F107 作为MCU,选用了一款SR8201G的PHY芯片,
SR8201G这个PHY芯片,支持10M/100M自适应,使用标准的RMII接口配置,
由于所有的PHY芯片都遵循相同的协议(0到15寄存器都是一样的)所以,配置驱动基本不需要修改,只是修改了一下特殊状态寄存器来正确读取PHY配置完成的状态(GD32F107开发板使用的PHY芯片是DP83848,特殊状态寄存器是16 ,SR8201G 的特殊状态寄存器是24)。配置完成以后,接上网线,板子上电,读取各个寄存器的状态都正常,全双功,100M自协商成功,
但是ping 的时候,ping不通,这个时候不要重启把板子,把电脑的速度改为10M 就可以ping通了,而且收发数据正常,
好像就是,板子跟电脑自协商成功以后,读取板子PHY芯片寄存器状态显示100M,但是板子实际收发数据的时候是以10M的速度收发的,
如果在板子上电前,把电脑强制改成10M全双功,给板子上电,读取PHY芯片寄存器状态显示10M全双工,但是ping 的时候,ping不通,这个时候不要重启把板子,把电脑的速度改为100M 就可以ping通了,而且收发数据正常,
从读出的状态来看,自协商没有问题,就是实际发送数据的速率正好是反着得,不知道是什么问题
|