打印
[STM32F0]

DM9000A发送数据错位的问题

[复制链接]
950|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxbb112079|  楼主 | 2016-5-18 17:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在调试网络,用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,如果不正常则复位。
沙发
neeringstu| | 2016-5-18 17:12 | 只看该作者
这个长时间的运行会不会导致丢包的情况发生呢

使用特权

评论回复
板凳
jxbb112079|  楼主 | 2016-5-18 17:17 | 只看该作者
正常的时候不会丢包,错位了以后,就全部收不到了

使用特权

评论回复
地板
yiyigirl2014| | 2016-5-19 00:06 | 只看该作者
是不是用的晶振作为时钟源啊,晶振如果不准的话,你运行久了就会波特率出错

使用特权

评论回复
5
jxbb112079|  楼主 | 2016-5-19 10:46 | 只看该作者
应该不是,我已经观察到了写入寄存器地址的增加和我写入的数据长度不一致

使用特权

评论回复
6
ic12580| | 2016-5-20 15:29 | 只看该作者
需要参考的驱动吗,我发你一份

使用特权

评论回复
7
killer2014| | 2016-5-20 15:46 | 只看该作者
建议你用示波器抓下波形看看,

使用特权

评论回复
8
侨峰之我行| | 2016-5-24 14:12 | 只看该作者
时钟频率不同步,晶振精度不够,最好用数显器量下看下小数点后三位是否三个零,或三个九。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

10

帖子

1

粉丝