天线|RF射频
直播中

贾桂林

7年用户 1507经验值
私信 关注
[问答]

请问mini板enc28j60以太网例程不稳定容易断开连接是什么原因

我现在做以太网的例程  发现不稳定  不知道各位大神 有知道的么 谢谢

回帖(4)

黄欢

2019-7-10 10:18:01
优化好了,优化如下:
1、在ENC28J60.c里面把全双工模式改为半双工模式,解决丢包严重的问题。
2、在ENC28J60_Packet_Send里面把if((ENC28J60_Read(EIR)&EIR_TXERIF))ENC28J60_Write_Op(ENC28J60_BIT_FIELD_CLR,ECON1,ECON1_TXRTS);
改为
if((ENC28J60_Read(EIR)&EIR_TXERIF))ENC28J60_Write_Op(ENC28J60_BIT_FIELD_CLR,ECON1,ECON1_TXRST);
解决ping 一段时间可能出现的断开问题,详情需要去看勘误表。
我找到一段大家可以慢慢看:
Before attempting to transmit a packet (setting
ECON1.TXRTS), reset the internal transmit logic
by setting ECON1.TXRST and then clearing
ECON1.TXRST. The host controller may wish to
issue this Reset before any packet is transmitted
(for simplicity), or it may wish to conditionally reset
the internal transmit logic based on the Transmit
Error Interrupt Flag (EIR.TXERIF), which will
become set whenever a transmit abort occurs.
Clearing ECON1.TXRST may cause a new transmit
error interrupt event (EIR.TXERIF will become
set). Therefore, the interrupt flag should be cleared
after the Reset is completed.
3、收到每一个IP数据包后还是去更新一下ARP表,解决交换机中对ARP包的限制(我到现场测试发现过了N久才收到ARP包),最后导致丢包,但是这个问题貌似不是很严重。
4、在tcp_server_demo_appcall函数里面如果uip_newdata()收到数据且需要发送数据时(tcp_server_sta&(1<<5)不为0)就会导致这个TCP数据包丢失,而应用层并没有对这种情况做相应的处理,由于uip协议栈还没有搞懂,所以这个问题只是一个猜测,现在还没有改动,请这里的大牛指点指点呐。
说明:运行环境为接的设备比较多的局域网,测试结果开多个PING进程发现丢包为2000分之1左右,所以这个问题还是没有从根本解决。这些个问题差点搞得我吐血,还好勉强解决了。现在给大家分享分享,不足之处多多指点。
举报

段宜敏

2019-7-10 10:53:38
你可以试试 连不上的时候从新初始化uip (我用的是uip )但是你最好用spi2(mini板)我试过比以前好多了 但我认为还是没从根本上解决 欢迎探讨
举报

张婷婷

2019-7-10 11:11:57
不错,已经查出很多问题了,谢谢分享
举报

李渔滢

2019-7-10 11:59:06
你好,你用过lwip吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分