搜索
bottom↓
回复: 21

nrf24l01 丢包问题

[复制链接]

出0入0汤圆

发表于 2012-12-20 20:53:13 | 显示全部楼层 |阅读模式
最近在学习使用nrf24l01发送是用的一块FPGA的板子,接受是一块ARM开发板,发现在发送大量数据的会出现丢包的现象。2000多个数据会丢掉几十个数据
初始化程序,加入了自动应答和自动重发。发送的数据包之间延时足够大,不知道为什么还是会出现丢包问题,求各位大神解答
void init_NRF24L01(void)
{
   usec_wait(100);
//        CE=0;    // chip enable
//        CSN=1;   // Spi disable
//        SCK=0;   // Spi clock line init high
        XIo_Out32(XPAR_XPS_CE_BASEADDR,0x00);
        XIo_Out32(XPAR_XPS_CSN_BASEADDR,0x01);
        XIo_Out32(XPAR_XPS_SCK_BASEADDR,0x00);       
       
        SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址       
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动        ACK应答允许
        SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x52);    //  
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
        SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致
        SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为20字节
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);                   //设置发射速率为1MHZ,发射功率为最大值0dB
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出110入0汤圆

发表于 2012-12-20 22:04:09 | 显示全部楼层
你这个丢包概率也不算太不正常,要看你周围是否有同频道的WIFI在工作,会引起CRC错误而丢包

我正常测试的时候都把频率设到2.5G以上

出0入0汤圆

发表于 2012-12-22 09:05:34 | 显示全部楼层
重发次数设置多一点,SETUP_RETR,0x5F
TX_DS标志置位才是发送成功
否则,达到最大重发次数后MAX_RT置位,需清除该位再次重发

出0入0汤圆

 楼主| 发表于 2013-4-13 15:07:06 | 显示全部楼层
Flyback 发表于 2012-12-20 22:04
你这个丢包概率也不算太不正常,要看你周围是否有同频道的WIFI在工作,会引起CRC错误而丢包

我正常测试的 ...

头顶上有个无线路由,不知道是不是这个原因,另外设定频率有没有其他办法呢?

出0入0汤圆

 楼主| 发表于 2013-4-15 15:47:53 | 显示全部楼层
Flyback 发表于 2012-12-20 22:04
你这个丢包概率也不算太不正常,要看你周围是否有同频道的WIFI在工作,会引起CRC错误而丢包

我正常测试的 ...

感觉你说的很有道理,今天用手机上的wifi分析软件测试了一下,发现头上的wifi在通道1信号最强,其次是通道11,然后是通道6,除了这个我们这边还有chinanet的wifi在通道6信号最强,其次是通道1。但是功率都比较小最强的时候只有-40dbm,而nrf24l01发射功率应该远大于这个值,会有影响吗?能不能共享一下你的测试经验呢,不胜感激图片是做的信道强度测试的截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-15 15:54:57 | 显示全部楼层
24L01的VCC没有对地加一个小瓷片电容(104)

出0入0汤圆

 楼主| 发表于 2013-4-15 15:58:39 | 显示全部楼层
myqiang1990 发表于 2013-4-15 15:54
24L01的VCC没有对地加一个小瓷片电容(104)

直接使用的网上购买的模块,应该已经接过了吧

出0入0汤圆

发表于 2013-4-15 17:18:18 | 显示全部楼层
matrx2010 发表于 2013-4-15 15:58
直接使用的网上购买的模块,应该已经接过了吧

你试一下嘛。。。

出0入0汤圆

 楼主| 发表于 2013-4-16 22:21:37 | 显示全部楼层
myqiang1990 发表于 2013-4-15 17:18
你试一下嘛。。。

void init_NRF24L01(void)
{
   us_wait(100);
//        CE=0;    // chip enable
//        CSN=1;   // Spi disable
//        SCK=0;   // Spi clock line init high
        XIo_Out32(XPAR_XPS_CE_BASEADDR,0x00);
        XIo_Out32(XPAR_XPS_CSN_BASEADDR,0x01);
        XIo_Out32(XPAR_XPS_SCK_BASEADDR,0x00);       
       
        SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址       
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动        ACK应答允许
        SPI_RW_Reg(WRITE_REG+SETUP_RETR,0xf2);    //  自动重发 重发计时1ms 重发次数15
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
        SPI_RW_Reg(WRITE_REG + RF_CH, 0x6e);        //   设置信道工作为2.5GHZ,收发必须一致
        SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);                   //设置发射速率为2MHZ,发射功率为最大值0dB
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                    // IRQ收发完成中断响应,16位CRC,主发送
}
电源和地焊接了104,发射接收频率设定为2.510G, 还是每次发2500个数据左右,没有丢包的现象,但是接收端有收到重复包的现象,而且每次固定位置(第5个包)会多收一个数据包,不知道为什么,继续研究下

出0入0汤圆

发表于 2013-4-16 22:26:02 | 显示全部楼层
matrx2010 发表于 2013-4-16 22:21
void init_NRF24L01(void)
{
   us_wait(100);

发完后清空FIFO寄存器

出0入0汤圆

 楼主| 发表于 2013-4-16 22:35:33 | 显示全部楼层
经过这次测试,肯定了2楼的说法,网上有牛人谢了跳频的算法来避免干扰非常强大。

出0入0汤圆

 楼主| 发表于 2013-4-17 10:12:57 | 显示全部楼层
myqiang1990 发表于 2013-4-16 22:26
发完后清空FIFO寄存器

请问发送最大字节长度和速率有关系么?一次发32字节跟一次发16字节速率相比怎样?

出0入0汤圆

 楼主| 发表于 2013-4-17 21:05:12 | 显示全部楼层
myqiang1990 发表于 2013-4-16 22:26
发完后清空FIFO寄存器

请教一下,有没有遇到无线接受在接收到4,5个数据包之后接受到一个重复的数据包,而且每次都是如此位置十分固定。。不知道什么原因。之前丢包的问题已经解决是wifi干扰造成的

出0入0汤圆

 楼主| 发表于 2013-4-17 21:26:47 | 显示全部楼层
发现一个问题
void send_package32(Xuint8 *TxBuf)
{
  us_wait(500);
  nRF24L01_TxPacket(TxBuf);
  while(!((SPI_Read(0x07)>>5)&0x01))
{
                                           if(((SPI_Read(0x07)>>4)&0x01))
                {
                                                 SPI_RW_Reg(0x27,0xFF); //WRITE_REG+STATUS                                         
                      //  nRF24L01_TxPacket(TxBuf);
                }
         }
        SPI_RW_Reg(0x27,0xFF); //WRITE_REG+STATUS  
        XIo_Out32(XPAR_XPS_CE_BASEADDR,0x00);
        SPI_RW(0xE1); //FLUSH_TX 0xE1 冲洗发送 FIFO指令
        XIo_Out32(XPAR_XPS_CE_BASEADDR,0xff);
}
   //  nRF24L01_TxPacket(TxBuf);这一句注释掉了,超过最大自动重发次数不手动重发,就没有问题了。。

出0入12汤圆

发表于 2013-4-26 13:49:15 来自手机 | 显示全部楼层
学习记号备用

出0入0汤圆

发表于 2013-8-23 16:14:46 | 显示全部楼层
赞楼主还有二楼大神,同样遇到丢包问题,来查资料。。。 看了帖子之后把频率调到2.5GHz 现在好了 以前没注意过WIFI影响

出0入0汤圆

发表于 2013-8-31 02:18:38 | 显示全部楼层
2.5G,回头也试试

出0入0汤圆

发表于 2013-12-7 11:07:05 | 显示全部楼层
没发现有什么异常啊

出0入0汤圆

发表于 2014-6-2 20:39:49 | 显示全部楼层
颜靖峰 发表于 2013-12-7 11:07
没发现有什么异常啊


说明你的周围环境没有WIFI

出0入0汤圆

发表于 2014-6-2 20:43:01 | 显示全部楼层
q765963259 发表于 2013-8-23 16:14
赞楼主还有二楼大神,同样遇到丢包问题,来查资料。。。 看了帖子之后把频率调到2.5GHz 现在好了 以前没注意 ...

我觉得我也遇到了这个问题,不过我觉得单纯的把频率跳到2.5g,不如最好还是做下跳频的好。

出0入0汤圆

发表于 2014-6-17 12:34:10 | 显示全部楼层
mark nrf24l01 丢包

出0入42汤圆

发表于 2018-4-28 17:53:57 | 显示全部楼层
学习了!感谢楼主的经验分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 17:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表