admin 发表于 2023-5-15 22:11:56

RTL8211EG-VB芯片自动协商时协商为百兆或十兆的原因




在RTL8211EG-VB的手册中,说明了其各个IO在不同阶段,可能复用为不同的功能。手册以字母组合来指示该IO的各种属性,
I: Input
LI: Latched Input During Power up or Reset
O: Output
IO: Bi-Directional Input and Output
P: Power
PD: Internal Pull Down During Power On Reset
PU: Internal Pull Up During Power OnReset
OD: Open Drain
G: Ground

如下图所示





而对于RX_ER的管脚,其管脚属性为O/LI/PU,也就是默认作为输出,上电时该引脚的值会被锁存。同时该IO内部有上拉电阻。所以该管脚上电默认应该为高电平。如下图所示。



对于RX_ERR管脚,手册里说了,其复用为AN脚,当该脚和AN(RXD7的复用功能)电平组合为
AN = 11:,自动协商到最优速率
AN = 01:,在100M半双工和10M全双工之间协商一个最优速率
如下图所示。(pdf第25页,手册页码第16页)


所以,如果不给RX_ERR一个确定的管脚,该信号又接到了FPGA上,就有可能复位上电时,该管脚被FPGA的管脚拉到低电平,导致最终无法协商为千兆速率。

解决方法,在程序中添加一个input类型的RX_ERR端口并分配正确的IO,避免FPGA随意分配错误的信号到该管脚上,以避免此问题。

当然,部分用户会发现,我们在vivado的工程的xdc管脚约束文件中,加入了下面这句话,也同样可以用。
set_property BITSTREAM.CONFIG.UNUSEDPIN Pullnone

这是因为,pullnone意思是悬空,意思就是让FPGA对没有使用的管脚不做任何上下拉处理。由于RX_ERR这个管脚在phy内部是上拉,所以只要fpga不去下拉就不会有问题,不加pullnone,fpga默认可能应该是pulldown

具体大家可以查阅芯片的数据手册。




页: [1]
查看完整版本: RTL8211EG-VB芯片自动协商时协商为百兆或十兆的原因