问
我用905进行通信,有近端A和远端B,近端A向远端B发送查询命令,远端B收到查询命令后返回数据给近端A。经过一段时间的调试,近端A可以查询到
远端B的数据,但近端A收到的远端B返回的数据会偶尔出错,出错时收到的一包数据全是乱的(收到的一包数据长度为32字节),且无规律(大概一千包错一
包)。近端A发出查询命令只有一包,发出后就转成接收方式,远端B平时总是接收方式,收到数据后转成发送方式,连续发送4包数据给近端A。近端A发送查询
命令为2包/秒。
905发送时是采用连续发送的方式,即如果发送的数据很长,我就分N(N<=4)包,这N包顺序发出,发出一包后延时10ms发送下一包。
905接收时是采用中断方式,即将DR作为
单片机的外部中断源。在中断处理函数中读出收到的数据。
我还作过试验,近段A向远端B发送数据,而远端B不回应,只接收数据,即A发,B收。我发现B接收到的A的查询包出错概率大概7万包数据才错一条(可
以接受的出错概率),A发送的速率是40包/秒。我想会不会是由于经常在发送和接收方式之间转换,导致905出错的概率会升高呢,但千分之一的概率太高了
点,我也采用延时等方法,但无效果。请教坛上高人,有没有碰到这种情况的?
答 1:
切换后要待器件稳定后才能发送数据,注意延时的位置合理的协议也很重要。
答 2:
谢谢切换的延时时间长度远大于905的PDF文件上说的时间长度。而且今天下午还作了个试验,A向B连续发送200包数据(1.5秒),每包32字节,B接收正确。明天用2个A来作实验看看,1个A发,1个A不发,是不是同时收到错误数据。
答 3:
如果你妥善处理了芯片的工作时序和步骤那剩下就是晶体离散性、天线匹配等问题了。
答 4:
发现原因了!但不知为什么。发现原因了!但不知为什么。我做了个试验,只有A发,B断电,A发送成功一包数据后马上转为接收状态,我发现:A偶尔(千分之
一概率)会进接收中断,接受中断是由DR产生的,我在发送时将中断使能关闭了,通过示波器可以看到发送成功6mS(此时已经通过控制TX_EN将DR置
低,再开中断)后,DR又变高了,收到的是乱码。按理说我发送成功后且将DR置低后到下次发送之间DR应该为低才对呀。请问chunyang碰到过这种情
况没?
答 5:
那就是你设置的问题了需要加深对器件手册的阅读和理解。
答 6:
905的PDF我仔细读了对这种现象,从PDF中找不到理论解释,而且我试了很多种方法,关键就是从发送状态转为接收状态时会出问题。请问chunyang大侠对你的905作过误码率测试没有?我想知道到底是905的特性还是我程序的问题。
答 7:
dr只能读取,"把dr置低"肯定不对。
答 8:
确保已经通过控制TX_EN将DR置低了吗?确保已经通过控制TX_EN将DR置低了吗?
答 9:
不要怀疑器件芯片的正确配置很重要。
答 10:
可以确定我是通过TX_EN将DR置0的。A的流程是 trx_en=0 + tx_en=1 + 延时(进入standby状态)--->
写发送地址和发送数据---> trx_en=1(启动发送) + 延时(等待发送完成) + tx_en=0(转为接收状态)。
答 11:
今天下午发现跟本机地址有关!!!今天又仔细阅读了PDF,发现我的近端A地址为4字节长,为0000,将地址更改为非全0就不会收到讨厌的DR上跳沿
了,看来全0的地址容易受到自己发出的数据的干扰啊。看来还是要仔细钻研帮助文件啊,不过905的帮助文件叙述比较含糊。CC1000的帮助文件就很严
谨,不过CC1000使用起来太复杂了,寄存器太多。
文章评论(0条评论)
登录后参与讨论