NUC972 + rtl8306sd vlan 调试记录。

RTL8306SD 芯片支持VLAN功能,但网上资料太少,datasheet 规格书看了一遍又一遍,慢慢清晰起来。由于先前对这个芯片不了解,直接参考了原理图,导致设计有些错误。调试过程也走了不少弯路,在此记录。

先来看一下框图:

NUC972 + rtl8306sd vlan 调试记录。

该芯片有5路 phy接口,其中第5口 phy 具有复用功能。 另外有两路 mii/rmii 接口,可以通过不同的配置工作在不同模式下。 这里的配置有点复杂。经过这几天调试,基本摸清楚了。

接下来说一下可以配置为哪些模式。

1.先说一下 phy4(第五个phy), phy4可以与 mac4 一起工作在 UTP模式,什么是UTP模式??就是正常的工作模式 和上面几路phy 一致。除此外 phy4还可以配置为独立的phy,通过mii/rmii 接外部 mac 如图。此时 phy4 与其他phy是独立的,不互通。

NUC972 + rtl8306sd vlan 调试记录。

2. 再来说一下 MAC4 和 MAC5. 他们都可以配置为:

              1. PHY MODE MII

              2. MAC MODE MII

              3. RMII 模式

  上面两种模式我还不太确定具体接什么,但可以确定的是,一种模式是接外置phy的,另一种接 cpu的。我需要用的是RMII模式。

我的需求是 MAC4 PHY4 工作在 UTP模式,MAC5工作在RMII模式。 对应配置表。 是01000,付上配置表。

NUC972 + rtl8306sd vlan 调试记录。

NUC972 + rtl8306sd vlan 调试记录。

NUC972 + rtl8306sd vlan 调试记录。

调试过程如下。

1.硬件部分调试

板子回来后,上电,cpu能正常启动,但是没识别出网卡。

 1. 按以往经验判断,应该是MDIO总线没通讯成功。示波器查了波形,芯片果然没响应。

 2. 先查 晶振,复位,3.3V电源,1.8V电源。挨个查了一遍。都正常。插上网线,灯不闪。

 3. 这样判断 内部逻辑电路可能没启动,通常phy部分,只要插上网线灯就会亮。再次仔细检查电源,发现有个AVDD18接错了,接到了GND上。飞线大法后,插上网线指示灯已经可以闪了,说明内部电路已经开始工作。 奇怪的是这路AVDD接错,芯片没烧,没任何反应,说明这个AVDD18 在芯片内部是独立供电的。 找到第1个坑

NUC972 + rtl8306sd vlan 调试记录。

4. 重启板子后,发现网卡已经识别出来,说明MDIO已经通讯成功。 测试了4个网口,相互联通的。

5. 但是网络一直不通,没有数据包。把模式配置为 01000后,查了波形。发现RMII没有任何波形。refclock也没有。印象中refclock方向可以配置,翻了datasheet, 81脚需要拉低,82脚才会对外输出refclock。第2个坑

NUC972 + rtl8306sd vlan 调试记录。

6. 再次飞线,refclock已经有了,示波器量了,标准的50M,说明已经工作在rmii模式了,如果是MII模式,refclock是25M.

7.但数据还是不通,量RMII TX是低电平, RX是高电平。有点疑问。正常情况没有数据通讯的时候应该都是低电平。可能数据线接错了。 这里引入一个新的知识点,也是在这次调试中了解的。 有种接法叫 mac to mac without phy,也叫 fixed-link。顾名思义,是一个固定连接,用于两个有mac控制器的cpu 直连,不通过phy。 这样可以省去2个phy 和 网络变压器等外部器件。由于直连,没有MDIO通讯,所以如果要直连,底层网卡驱动需要调整。MAC直连的时候,需要交叉连接 如下图。

TXD0 RXD0
TXD1 RXD1
TX_EN RX_DV

我们的板子接错了。由于芯片的rmii可配置的模式太多,同一个引脚可以配置为tx或rx. 导致误导了我们硬件工程师。实际上同一个引脚的rx或tx。是站在不通角度而言的。在phy 模式的tx,就是 mac模式的rx,数据方向都是一致的第3个坑

8. 依然是飞线大法,之后再查,发现已经有波形了8306的tx0,tx1,tx_en都有波形输出,但是还是收不到数据。接收数据包是0

难道是时序不对,请出逻辑分析仪来一探,结果逻辑分析仪太楼,最高只能测100M,而RMII是50M的数据。100M就100M吧勉强能用,按照采样定理,回顾一下:采样定理,又称香农采样定理,奈奎斯特采样定理,只要采样频率大于或等于有效信号最高频率的两倍,采样值就可以包含原始信号的所有信息,被采样的信号就可以不失真地还原成原始信号。

在100M采样的时候只支持3个通道,好吧,3个就3个,大不了分组采,因为数据包相同的,我网线接了一个只ping 一个固定地址板子。1组 refclock,txd0, tx_en. 2组 refclock txd1 tx_en.

NUC972 + rtl8306sd vlan 调试记录。

NUC972 + rtl8306sd vlan 调试记录。

看波形应该没问题,怀疑tx和rx时序格式可能不对。但是MAC能与MAC直连,肯定说明格式是一致的。

换了一个方法调试的这块板子,ping 外面,ping肯定是不通的,但能知道对方是否收到数据。简单的来说,就看对方数据包是否增加了,高级点就用抓包工具,我用了tcpdump,发现能收到板子发出的数据包。  更加确信了 tx与rx的格式是一致的。 tx_en就是对方rx_dv。那为什么 MAC过来的数据收不到呢? 又查了一遍RMII接口,发现漏了一个rx_err 信号,非常重要的引脚,RX还有一个 RX_ERR 信号。这个怎么接?RX_ERR 这个信号是可选的,但调试被它卡了2天的时间。 这个信号的作用是 phy芯片通知cpu 检测到载波错误,高电平有效。这时cpu就会丢弃掉接收的数据。 第4个坑

9.飞线 直接拉rx_err 引脚到gnd,再次测试,已经能ping通了。测试了与其他网口都能互通,到此芯片调的差不多了。

未完待续。。。

 

2.软件部分调试