1.芯片型号及平台
BCM54XX是博通公司的一个系列的PHY芯片,这里是BCM54616
芯片所在平台为zynq7000系列的自制ZC7045板卡,要支持两路网卡,一路光口一路电口
2.问题
电口的配置,大同小异,不管是哪一个Phy芯片,主要就是以下寄存器:
Auto-negotiation advertisement register
1000BASE-T control register
Control register
一般就是设置速率,自协商,然后读取协商状态和link状态,可能需要注意的就是扩展寄存器的读写方法,有的是通过22号寄存器,有的是自己特有的方式,这个需要阅读手册。
现在在配置千兆光口的时候,总是出问题,怎么配置都无法达到千兆光口的速率,乍一看博通的手册,都看不出支持千兆光口,如下:
一度使得我的配置陷入了僵局。
3.解决办法
其实这个很简单,BCM54616的寄存器组当中有一个0X1C号寄存器如下:
这是个影子寄存器,意思就是说,一个寄存器根据指定位写入的数值不同,可以切换到不同的寄存器模式,这里有一个Mode control register
在最后这几位可以看到选择phy芯片的工作模式,这里
0位置1,选择1000-x register 00-0FH
2:1位为[0:1],选择RGMII TO fiber
这样配置之后,其实前面的寄存器组就变成了光口的寄存器组,但是不能参照前面电口的00-0F的寄存器,要在手册的后面
有个serdes register descripter,在这里有对光口寄存器的描述,如下图:
其实打开看一下,第0x00号寄存器,乍一看和电口的一样的,仔细对比下发现还是有一些差别,这就导致如果按照电口的地址和位去配置光口,注定是不会成功的,对比如下:
左边为光口右边为电口:
能够找到光口配置的入口已经对应的配置寄存器组,其实就成功了,剩下的对着手册一步步配置即可。