RTL8376芯片提供了8个10/100/1000Mbps的端口,同时提供2个RSGMII-PLUS接口,每个RSGMII-PLUS提供了5Gbps的带宽,共10Gbps。去除20%的编码开销,正好是8Gbps,可以用2个RSGMII-PLUS接口连接RTL8218B,从而扩展出额外的8个千兆网口。
MDI接口的设计
:这个没有什么花头,直接连接到网络变压器或者带有网络变压器的网口:
RSGMII-PLUS接口的设计
:主要是要串个100nF的电容,另外收发和正负不要搞反了。
配置
:所谓配置,就是一些需要上拉或者下拉的信号处理。
79号引脚的输出是25M时钟,这个时钟将会提供给RTL8218B使用。
这个是68号引脚Disable_loop引脚的配置,上拉处理。二层交换如果用网线把两个端口连接起来形成环回,会导致广播风暴。这个有可能是用来环回检测的。拉高处理,禁止检测。
69号引脚用来控制是否使用内部的8051,70号引脚用来控制是否自动加载EEPROM的内容。看手册,外接EEPROM有2种可能的用途,1是使用8051时,作为内部8051的指令存储器。2是不使用8051时,作为内部寄存器的镜像,用来加载到内部寄存器中。因为我没办法搞到如何使用EEPROM的相关信息,因此从海鲜市场花几十元重金搞了个二手的使用该方案的交换机,“参考”了它的EEPROM内容和使用方法。这里,69和70引脚都拉低,使用内部8051,同时使能EEPROM自动加载,作为8051的指令存储器。
17号引脚MDIREF,这个引脚直接接2.49K电阻到地,没什么说的。手册里写得很清楚。
123号引脚没啥用。接个测试点,也可以不管。
94和95引脚用来接25M晶振或者谐振器。我用的是有源晶振,因此94号引脚就不管了。一般低成本方案都会用一个谐振器,参考一般单片机谐振器的电路就好了。
100和101引脚用来接EEPROM。我们使用24LC128的EEPROM。参考一样画就好了。
98和99引脚是MDIO的控制引脚。RTL8376作为一个主设备,将会配置RTL8218B和控制LED的RTL8231。
注意:MDC这个引脚,还有个额外的功能,是EE_MOD。它用于告知RTL8376,外接的EEPROM是16Kbit以上的还是16Kbit或16Kbit以下的。因为我们用的式128Kbit的,因此需要接一个上拉电阻。RTL8376上电的时候将会采样这个引脚并锁定值。
复位电路。低电平复位,高电平使能芯片工作。
65、66、71和72引脚没啥用,不过66引脚需要上拉。其他三个浮空不接。
剩下的就是一堆供电引脚。简单描述一下:
-
DVDDIO、SVDDH、AVDDH这些信号是3.3V的。
-
DVDDL、SVDDL、AVDDL、PLLVDD这些信号是1.0V的。
-
最好供电都超过3A以上(因为还要考虑RTL8218B和RTL8231,以及降额),我用的是6A。
-
最好都用磁珠+电容滤波。
MDI接口没啥说的,和8376一样处理即可。
RSGMII-PLUS的处理,其实和RTL8376一样。
PHYADDR0~PHYADDR4这几个引脚,除了PHYADDR3做上拉,其他的都下拉。注意:PHYADDR应该是用来设定RTL8218B的MDIO地址的。RTL8376将会访问RTL8218。然而,RTL8376的访问由8051决定,8051又由外部EEPROM中的指令控制。我们直接使用别人的EEPROM,如果这几个电阻上下拉不对,访问应该会失败。所以这里建议不要改。
70号引脚EN_PHY上拉即可。
67引脚和68引脚都上拉,这样配置RTL8218B使用RSGMII-PLUS模式。该芯片还支持QSGMII。这里不用这种模式。
75和76号引脚接到前面的MDIO接口。参考前面图。
78号引脚不接。
98号引脚和RTL8376使用同一个复位源。
17号引脚同样用2.49K电阻接地。
123和45号引脚不接。96号引脚接RTL8376送过来的25M时钟,不需要再接晶振了。注意:根据以往SerDes的设计经验,这里最好不要画蛇添足地增加一个晶振。RTL8376和RTL8218使用不同的时钟源,SerDes不排除会丢包。
19、20、66、73引脚都没啥用,但是19、20、66引脚上拉,73引脚下拉。
80引脚是NC,不接。
电源引脚:
-
DVDDIO、SVDDH、AVDDH这些信号是3.3V的。
-
DVDDL、SVDDL、AVDDL、PLLVDDL这些信号是1.1V的。
-
最好供电都超过3A以上(因为还要考虑RTL8218B和RTL8231,以及降额),我用的是6A。
-
最好都用磁珠+电容滤波。
RTL8231-GR是用来驱动网口的灯的。这个芯片很坑,它是扫描各个端口的,大概是为了节约引脚数,但是连线时候就稍微麻烦一些,而且引脚命名有点不好理解,容易搞错,我就搞错了一回。那么它必然需要由RTL8376通过MDIO来控制。
参照这个图来设计。
RESET这个引脚使用RTL8376一样的复位源。
14、15引脚用1K电阻拉到地。
2号引脚用249电阻接地,同时并联1nF电容。手册上写得很清楚。
17和18引脚是MDIO引脚,同RTL8218B一样,接到RTL8376上。
5、6、7、8、9、10、11、12这些用不到,悬空处理即可。
现在我们在RTL8231芯片上得到了如下信号:
-
STA_P0~STA_P15共计16个信号;
-
Bicolor_A共计1个信号;
-
Port_0_5_Scan、Port_6_11_Scan、Port_12_17_Scan共计3个信号;
-
SSTA_A、SSTA_B、SSTA_C、SSTA_D、SSTA_E、SSTA_F共计6个信号。
根据实测效果,EEPROM中的代码,支持这样一种模式的接口:
接口上具有2个LED,其中之1:当网络接通时,会亮起,通信时会闪烁,我们约定这个灯叫LINK灯;其中之2:亮起时表示1000M,熄灭表示10M或者100M,我们约定这个灯叫SPD灯。在这样的前提下,需要按照如下方式接线(重要提示:端口编号:RTL8376上的MDI端口0至7分别为全局端口的0至7,RTL8218B的MDI端口0至端口7分别为全局端口的8至15):
-
对于SPD二极管的负极,端口0至端口11,都使用使用Bicolor_A引脚连接。
端口12至端口15,使用Port_12_17_Scan连接。
-
对于SPD二极管的正极,按照端口0至端口15,用对应的STA_P0至STA_P15连接。
-
对于LINK二极管的负极,端口0至端口5,都使用Port_0_5_Scan连接。端口6至端口11,使用Port_6_11_Scan连接。端口12至端口15用Port_12_17_Scan连接。
-
对于LINK二极管的正极,端口0至端口15,循环使用SSTA_A、SSTA_B、SSTA_C、SSTA_D、SSTA_E、SSTA_F这6个信号连接。所谓循环,举例:0、6、12端口用SSTA_A,1、7、13使用SSTA_B,以此类推。
-
由于二极管是扫描驱动的,因此串电阻不要太大,否则会不够亮。我用的是100欧姆电阻。