表现为发送过程中,发送DMA逻辑假死
1:明明已经屏蔽了巨型帧接收,但是总是会收到巨型帧2:一段时间后就会出现接收上溢出,然后无法接收数据,怎么都不接收,表现为内部DMA逻辑假死,比如停在 运行中,正在获取接收传输描述符 或者 运行中,正在关闭接收描述符
老是收到巨型帧,根本没法屏蔽,然后就是假死 可以通过DMASTSR寄存器观察到, RSTS 要么=1 运行中,正在获取接收描述符 要么就是5 运行中,正在关闭接收描述符,由于无法获取到接收描述符(可以确定接收描述符都是正常的,就算不正常,也应该马上进入 停止状态)
最后就会导致 接收下溢出,不停的下溢出,而且通过观察溢出计数器,发现,溢出计数器会是不是复位
拔掉网线后,溢出计数器不再变化,就是接收过程容易卡在 获取描述符 或 关闭描述符 这2个内部逻辑上
翻了一下STM32F4系列的以太网,发现一个细节,要求AHB时钟必须在25MHz以上,然后我记得之前用SDIO也出现过芯片逻辑错误,仔细寻找手册,发现是PCLK1必须为HCLK的 1/2 ,同时测试发现必须将ECLK 设置为HCLK 1/2才正常的,然后尝试提高主频到100MHz,PCLK1=50MHz 2个问题就都没了;
ETH时钟由PCLK1提供的
稳定接收了很长时间了,也没有巨帧,是时钟给低了,内部同步问题,刚刚给了64MHZ 32MHz是不行的,RMII接口时钟是50MHz, 32MH不够,由于使用了SDIO 或以太网 意味着HCLK必须大于PCLK1,所以使用RMII接口以太网,HCLK至少工作在100MHz, 然后2分频,给PCLK1 提供50MHz。
折腾了一天,接收问题算是解决了,然后今天又遇到发送问题;
通过这两天的测试,发现如果只开启接收,那么时钟最少是100MHz,PCLK1 50MHz,但是如果开启了发送,则依旧会出现内部逻辑问题,表现为发送几条后,出现发送下溢出,然后发送逻辑卡在 发送运行中,正在等待状态 也就是TSTS=2;将时钟提高到120MHz PCLK1:60MHz后即可解决,也就是开启以太网后,HCLK必须大于100MHz,PCLK1必须大于50MHz,不能等,是大于;
使用110MHz PCLK1:55MHz测试20分钟,依旧稳定;
总结一下:使用HC32F4A0以太网,PCLK1时钟必须大于50MHz,否则会出现各种硬件逻辑故障;