Stage0 : 背景
前段时间,做了一个外包项目,在通信设备的背板上,设计16端口的交换机,实现网络数据包在背板上的交换功能。
网上搜索了一下,有人提示用RTL8376+RTL8218B,可以实现16端口的千兆网线速。
在这个基础上做开发,开发阶段遇到的问题:
- 芯片资料非常少。基本上只能找到datasheet,还是必须付费下载的。这些文档一般厂家甚至都不放出,必须签了协议才会给,能找到Datasheet就不错了。
- 芯片内部有大量的寄存器(可能)需要配置,而datasheet上给的信息是非常少的。说可能,是我没有测试过不配置这些寄存器是否能够正常工作(关于寄存器的配置下面还有描述)。
- Datasheet上有某些非常显而易见的错误。
Stage1 : 设计
Stage1.1 :原理图设计
Stage1.1.1:RTL8376-GR的设计
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。
- 最好都用磁珠+电容滤波。
Stage1.1.2:RTL8218B的设计
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。
- 最好都用磁珠+电容滤波。
Stage1.1.3:RTL8231-GR的设计
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欧姆电阻。
Stage1.1 :PCB设计
- 阻抗控制。差分线阻抗控制到100。
- RTL8376和RTL8218工作时发热厉害,需要散热片,因此需要考虑留出空间。
Stage2 : 调试
略。文章来源:https://www.toymoban.com/news/detail-489228.html
Stage3 : 挖坑与填坑
注意以下几点:文章来源地址https://www.toymoban.com/news/detail-489228.html
- 24LC128这个EEPROM需要事先烧录。需要去某宝买个24系列下载器。烧录之后才能焊接。(需要固件请留言)
- 我看到立创商城有RTL8218D,想都没想直接买回来焊接上,结果不通。查手册发现8218D和8218B有很大不同,具体不细说,一定使用8218B。
- 速度显示二极管的负极,我错误地都接了Bicolor_A,导致端口12至15工作不正常。端口12至15的速度灯的负极要用Port_12_17_Scan连接。
- RTL8376和RTL8218一定要加散热片,否则工作时间一长,功能会异常。
到了这里,关于基于RTL8376+RTL8218B的16端口千兆非网管交换机设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!