搜索
bottom↓
回复: 13

请教老鸟->NRF24L01+ 无法兼容24L01原有代码

[复制链接]

出0入0汤圆

发表于 2012-8-12 01:48:30 | 显示全部楼层 |阅读模式
以前24L01的代码已经经过多个平台的使用,只需要底层的SPI驱动函数即可正常通讯。但换成24L01+后就不能通讯了,调了两天没有结果,板子是自己送出去做的,用24L01测试没有问题。硬件连接没有问题,发送端和接受端状态寄存器返回值均为0x0e。上网找了一些24L01+的代码,移植过去也是一样的结果。这个东西很不好调试,所以想请教一下有用过这两款芯片的老鸟们它们在配置寄存器方面有什么差异?是否可以提供局部的代码参考一下呢,谢谢。以下是不带+正常通讯的部分代码
  1. void SetRX_Mode(u8 num)
  2. {
  3.         CE_L;
  4.         SPI_RW_Reg(WRITE_REG + RX_PW_P0, num);
  5.         SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);           // IRQ收发完成中断响应,16位CRC ,主接收
  6.         delay_us(200);
  7.         CE_H;
  8. }
  9. u8 nRF24L01_RxPacket(unsigned char* rx_bufn,u8 num)
  10. {
  11.     u8 sta;
  12.     u8 revale=0;
  13.     CE_L;           //SPI使能
  14.     sta=SPI_Read(STATUS);   // 读取状态寄存其来判断数据接收状况
  15.     if(sta & RX)                // 判断是否接收到数据
  16.     {
  17.         CE_L;           //SPI使能
  18.         SPI_Read_Buf(RD_RX_PLOAD,rx_bufn,num);// read receive payload from RX_FIFO buffer
  19.         revale =1;  //读取数据完成标志
  20.         SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
  21.         SPI_Read(FLUSH_RX);
  22.     }
  23.     CE_H;
  24.     return revale;
  25. }

  26. void nRF24L01_TxPacket(u8 * tx_buf,u8 num)
  27. {
  28.         u8 temp = SPI_Read(STATUS);
  29.         temp &= 0x31;
  30.         if(temp)
  31.         {
  32.                 SPI_Read(FLUSH_TX);
  33.                 SPI_RW_Reg(WRITE_REG+STATUS,temp);
  34.         }
  35.         SPI_RW_Reg(WRITE_REG+STATUS,0xff);
  36.         SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
  37.         SPI_Write_Buf(WR_TX_PLOAD, tx_buf, num);                          // 装载数据
  38.         SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                    // IRQ收发完成中断响应,16位CRC,主发送
  39.         CE_H;                 //置高CE,激发数据发送
  40.         delay_us(20);
  41.         CE_L;        //StandBy I模式
  42.         delay_us(100);
  43.         SPI_RW_Reg(WRITE_REG+STATUS,0xff);
  44. }
  45. void SPI_init(void)
  46. {
  47.     SPI0CFG   = 0x40;
  48.     SPI0CN    = 0x0D;
  49.     SPI0CKR   = 0x04;

  50. }


  51. void init_NRF24L01(void)
  52. {
  53.     delay_us(10000);
  54.     SPI_init();
  55.     CE_L;    // chip enable
  56.            SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地?
  57.                 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址       
  58.                 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动        ACK应答允许
  59.                 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21
  60.                 SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致
  61.                 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为4字节
  62.                 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);                   //设置发射速率为1Mkbps,发射功率为最大值0dB
  63.                 SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x01);
  64. }
复制代码

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-8-13 00:36:26 | 显示全部楼层
问题已解决,初始化代码改为以下形式即可:
  1. void init_NRF24L01(void)
  2. {
  3.     delay_us(10000);
  4.     SPI_init();
  5.     CE_L;    // chip enable
  6.     SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址       
  7.     SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
  8.     SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动        ACK应答允许       
  9.     SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
  10.     SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致
  11.     SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x03);
  12.     SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0e);                   //设置发射速率为1MHZ,发射功率为最大值0dB
  13.    [color=Blue] SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);[/color]    CE_H;  
  14. }
复制代码

出0入0汤圆

发表于 2012-8-17 17:38:39 | 显示全部楼层
mangoes 发表于 2012-8-13 00:36
问题已解决,初始化代码改为以下形式即可:

      嗯,我也发现不兼容的问题!谢啦

出0入0汤圆

发表于 2012-11-8 21:00:47 | 显示全部楼层
谢谢     

出0入0汤圆

发表于 2012-11-14 17:29:42 | 显示全部楼层
very good !!!

出0入0汤圆

发表于 2013-3-4 21:12:17 | 显示全部楼层
mark!!!!!!

出0入0汤圆

发表于 2013-3-5 12:10:29 | 显示全部楼层
good,mark

出0入0汤圆

发表于 2013-3-18 17:17:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-4-8 17:56:52 | 显示全部楼层
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0e);                   //设置发射速率为1MHZ,发射功率为最大值0dB

24L01+   SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x06);                  0x06才是1M啊,0x0e是2M吧
请指教

出0入0汤圆

发表于 2013-4-29 13:52:40 | 显示全部楼层
noynot 发表于 2013-4-8 17:56
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0e);                   //设置发射速率为1MHZ,发射功率为最大值0dB
...


我的野火板子例程:SPI_NRF_WriteReg(NRF_WRITE_REG + RF_SETUP, 0x0f);  //2Mbps       请教    0x07  是 1Mbps 是吗?   250Kbps是0x0几?

出0入0汤圆

发表于 2013-10-8 01:13:11 | 显示全部楼层
进来看看!!

出0入0汤圆

发表于 2013-11-25 08:49:51 | 显示全部楼层
学习一下!

出0入0汤圆

发表于 2014-5-3 14:06:58 | 显示全部楼层
很好,正苦恼呢,谢谢

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-23 12:23

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

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