共2条
1/1 1 跳转至页
ㄐ偶际?nrf905 问一个nrf905收数据偶尔出错(大概千分之一的出错概率)问题
问
我用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使用起来太复杂了,寄存器太多。
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使用起来太复杂了,寄存器太多。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |