最近在调试网络,用LWIP,网络都调通了。但是最近发现发送大量数据的时候,一段时候后网络就不通了,抓包发现发出来的数据都错位了,整体左移了一个字节。网上有人有同样的问题,可以检测内部发送SRAM的读指针来判断是否发生错位。但是搞了很久,根本没有发现什么规律。百度有一个人提到用下面的方法来检测,但是看不懂,有没有高手指点一下的。
贴上别人的方法:
最后DAVICOM公司提供的0X22、0X23寄存器规律如下:
复位后TMP_counter = 0
每次发送后 TMP_counter = TMP_counter + transmit_byte_cnt + transmit_byte_cnt[0]
发送时
If(begin_to_TX)
TX_PTR = TMP_counter & 0xffC;
Else if(read_next_dword_fm_memory)
TX_PTR = TX_PTR + 4;
发送完成后
计算的TX_PTR和0X22、0X23寄存器取出的值偏差在4或8。
采用这个计算方法,修改了驱动程序,每次发送前检查一下上次发送TX_PTR的计算值与0X22、0X23寄存器取出的值偏差是否是4/8,如果不正常则复位。 |