#RTL8306的功能简介
RTL8306具有5个PHY(PHY0、PHY1、PHY2、PHY3、PHY4)和6个MAC(MAC0、MAC1、MAC2、MAC3、MAC4、MAC5),其中PHY4和MAC5可以输出到MII/RMII2,MAC4可以输出到MII/RMII1。但是PHY4和MAC4也可以配置为UTP端口,即网口。
RTL8306是6口交换机芯片,有5个PHY和6个MAC。具有多种应用方式。
例如:
情况1:5个PHY做为网口输出,第6个MAC作为内部网口链接到FPGA或者CPU。
情况3:4个PHY作为网口输出,第5个PHY或者第5个MAC和第6个MAC作为两个MII接口连接到FPGA或者CPU。
除此之外还有很多的使用方式,可以通过5个配置管脚来选择使用方式,下面给出配置表
#我的使用场景
下面给出我的使用场景。我用的是情况1,5个PHY做为网口输出,第6个MAC作为内部网口链接到FPGA。管脚配置为01011:MII/RMII 2由MAC 5在MAC模式下使用; UTP中的端口4由MAC4/PHY4组成;或者MII/RMII 2由MAC 5在MAC模式下使用
##使用过程中遇到的问题和解决办法
问题一:FPGA没收到5个网口过来的数据,同时FPGA自己产生的数据也没有发送到网口。但是网口0到网口4都是互通的,即外部5个网口可以互通,但是和FPGA没有交互。
解决办法:MAC5和FPGA链接,但是MAC5默认是没有链接的,需要配置寄存器使能MAC5链接。
问题二:FPGA配置MAC5的reg22寄存器不成功,配完成后,读取PHY6 reg22时,返回的数据是16‘h0,说明读寄存器有问题,因为寄存器是有默认配置’h073F的。明显是没有读出数据。
解决办法:寄存器手册有坑!我读寄存器时用PHY0 reg16寄存器切换到页0读PHY6 reg22,这是错的。需要用PHY6 reg16寄存器切换到页0才可以写和读reg22。但是寄存器手册没有给出PHY6 reg16寄存器。这也是后面我在阅读网络寄存器时发现的,网络寄存器的0-15都是通用的,国际协议规定的!RTL8306的每一个PHY都有reg16寄存器,这个寄存器是用来切换本PHY的页。
寄存器的配置Port0到Port4的寄存器都是默认自协商,支持100M/10M。和FPGA连接的MAC5需要配置寄存器,打开使能就可以正常使用了,这样FPGA就能通过MAC5和5个网口交换数据了。
寄存器配置信息
port0配置,全部都是默认配置
PHY0 REG0 : 16’h3100 自协商 全双工
PHY0 REG22 : 16’h877f 禁用优先
PHY0 REG24 : 16’h0ed1 开启发送、接收、学习
port1配置,全部都是默认配置
PHY1 REG0 : 16’h3100 自协商 全双工
PHY1 REG22 : 16’h877f 禁用优先
PHY1 REG24 : 16’h1ed2 开启发送、接收、学习
//PHY1 REG24 : 16’h1ad2 开启发送、开启学习、关闭接收
port2配置,全部都是默认配置
PHY2 REG0 : 16’h3100 自协商 全双工
PHY2 REG22 : 16’h877f 禁用优先
PHY2 REG24 : 16’h2ed4 开启发送、接收、学习
port3配置,全部都是默认配置
PHY3 REG0 : 16’h3100 自协商 全双工
PHY3 REG22 : 16’h877f 禁用优先
PHY3 REG24 : 16’h3ed8 开启发送、接收、学习
//PHY3 REG24 : 16’h36d8 关闭发送、开启学习、开启接收
port4配置,全部都是默认配置
PHY4 REG0 : 16’h3100 自协商 全双工
PHY4 REG22 : 16’h877f 禁用优先
PHY4 REG24 : 16’h4edf 开启发送、接收、学习
MII2配置,与FPGA链接,管脚配置工作在MAC模式
PHY6 REG0 : 16’h2100 100M、全双工
PHY6 REG16 : 16’h2100 跳到0页
PHY6 REG22 : 16’h873f 使能链接、关闭环回、关闭优先、禁用插入和删除标签
PHY6 REG24 : 16’h8eff 开启发送、接收、学习
实际上这五个管脚配置为01011和01001都是可以的,他们唯一的区别是两个时钟的方向不同。当MAC5配置为MAC模式(01011),这两个时钟管脚作为输入;当MAC5配置为MAC模式(01001),这两个时钟管脚作为输出。