新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2013-9-11
- 在线时间
- 0 小时
|
发表于 2014-5-26 11:23:19
|
显示全部楼层
回复【4楼】hao123:
---------------------------------
优化好了,优化如下:
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左右,所以这个问题还是没有从根本解决。这些个问题差点搞得我吐血,还好勉强解决了。现在给大家分享分享,不足之处多多指点。 |
|