CH32V307VCT6千兆以太网收发数据不稳定的问题咨询

先说硬件配置:CH32V307VCT6通过RGMII与国产某千兆PHY连接;CH32V307的PB1管脚(RGMII_125IN)接的是外部独立的125M TCXO;CH32V307的时钟来自外部8M晶振;千兆PHY的时钟来自外部独立的25M晶振,与CH32V307无关。

软件部分:直接使用官网上提供的demo例程(ETH_RGMII),仅仅把发送部分的打印信息去掉了,见下图:

REQHS0(4`_WRTP6$WS%LR]A.png

另外,为了便于测试,我把demo例程里的ARP包的数据改成跟我计算机相匹配。

测试结果:PHY正常自协商到千兆。从抓包数据来看,数据的发送正常,每0.8秒左右计算机就会收到CH32V307发过来的ARP报文,同时计算机及时回复了报文,见下图:

UTGNVEJQ{5J45X%~6~7B<span class='label label-success'>个人信息保护,已隐藏</span>UTGNVEJQ{5J45X%~6~7B<span class='label label-success'>个人信息保护,已隐藏</span>

但是调试打印结果提示经常收不到计算机回复的报文,时而能收到时而收不到,见下面打印信息:

receive counter:6.

read_length:60

Received@0x200002a0

Status:0x80408302

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


Error:recv error frame,status:0x00408302.

Error:recv error frame,status:0x00408302.

Error:recv error frame,status:0x00408302.

receive counter:7.

read_length:60

Received@0x20001a60

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


receive counter:8.

read_length:60

Received@0x20002050

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


receive counter:9.

read_length:60

Received@0x200002a0

Status:0x80408302

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


Error:recv error frame,status:0x00408302.

receive counter:10.

read_length:60

Received@0x20000e80

Status:0x80408302

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


receive counter:11.

read_length:60

Received@0x20001470

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


receive counter:12.

read_length:60

Received@0x20001a60

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


receive counter:13.

read_length:60

Received@0x20002050

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


Error:recv error frame,status:0x00408302.

receive counter:14.

read_length:60

Received@0x20000890

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


receive counter:15.

read_length:60

Received@0x20000e80

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


Error:recv error frame,status:0x00408302.

receive counter:16.

read_length:60

Received@0x20001a60

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


Error:recv error frame,status:0x00408302.

receive counter:17.

read_length:60

Received@0x200002a0

Status:0x80400300

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


Error:recv error frame,status:0x00408302.

receive counter:18.

read_length:60

Received@0x20000e80

Status:0x80408302

84 c2 e4 01 02 03 

e8 6a 64 53 29 a0 

08 06 00 01 08 00 06 04 00 02 END!


Error:recv error frame,status:0x00408302.



这种情况有可能是什么造成的?硬件问题还是软件以太网驱动问题?

你好,查看打印信息问题是接收错误的内容

查看代码,打印Error:recv error frame,status0x00408302.”的区域为

图片1.png 

打印的数据为接收DMA描述符的第一个32位字段,状态字;

查询手册关于接收DMA描述符的字段

图片2.png 

接受产生了CRC校验错误。

根据经验,CRC校验错误的产生一般是RGMII线路的问题

检查两点:

1, RGMII布线。RGMII布线要求数据线尽量等长;时钟相对数据偏移2ns

2, 通过软件微调RGMII时序,调整RGMII_TXC_Delay(0,2)可以微调MAC发送方向的时钟和相位,但是无法影响接收方,接受方可以由PHY的设置进行影响,此函数改变的位见手册的关于MACCR的描述。

图片3.png 

图片4.png 

建议:注释掉接收函数中检查CE位的行,即

图片5.png 

将接收到的帧数据全部打印出来,查看数据具体有什么错误;根据经验,帧的数据可能并没有错误,仅仅是CRC域错了。



感谢指导!解答细致又具体,分析问题相当精确!根据您的建议,我配置PHY的RX_CLK时延就正常了。再次感谢!


国产的千兆PHY是什么型号,能推荐一个吗?


请问楼主选的国产PHY芯片是哪家公司的?能分享一下吗?谢谢。


请问下千兆以太网的例程在哪下载?大佬们



JEM88E1111HV 国产 CTEC 32所的



请问这个demo例程(ETH_RGMII)是在哪里下载的,我没有搜索到。谢谢


您好,  CH32V307的RGMII例程,目前暂时移除,等例程完善后,我们会重新提供。如果您急需RGMII例程,可以发送邮件至mj@wch.cn。这边可以先给您一份代码提供参考。


 CH32V307的RGMII例程的硬件开发板啥时候出来?准备买一个



您好,使用千兆以太网时需用到RGMII接口,需配合外部PHY使用,目前我们CH32V307的Demo板需外接千兆PHY使用。关于Demo板,可联系我司销售进行申请购买


只有登录才能回复,可以选择微信账号登录