5128|4

90

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

CC2500收发问题 [复制链接]

本人最近在做一个CC2500的无线收发数据的模块,是通过SPI接口通信的,其中SPI是用IO模拟的,主芯片用的是MSP430G2231。程序里面读写函数经测试都是有用的,但是在收发数据时却失败了。求各位大神帮帮忙,看看我的代码是不是有问题,有劳了。无限感激!!!!!!(由于代码较多,有些没有列出来,编译是能通过的,而且经过测试是可以驱动CC2500的)

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//name:     WriteCC2500Reg
//brief:    写CC2500寄存器
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void WriteCC2500Reg(u8 ucAddr, u8 ucValue)
{
   SPI_PxOUT &= ~SPI_CSn;   //片选
   while(SPI_PxIN & SPI_MISO);//等待总线响应
   
   SPISendByteToCC2500(ucAddr);       //写入地址
   Delay_us(DelayTime);
   SPISendByteToCC2500(ucValue);      //写入参数
   Delay_us(DelayTime);
   
   SPI_PxOUT |= SPI_CSn;    //结束片选
}


//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//name:     ReadCC2500Reg
//brief:    读寄存器数据
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
u8 ReadCC2500Reg(u8 ucAddr)
{
   u8 ucByte;
   
   SPI_PxOUT &= ~SPI_CSn;
   while(SPI_PxIN & SPI_MISO);
   
   SPISendByteToCC2500(ucAddr | TI_CC2500_READ_SINGLE);
   Delay_us(DelayTime);
   ucByte = SPISendByteToCC2500(0xff);
   Delay_us(DelayTime);
   
   SPI_PxOUT |= SPI_CSn;
   return (ucByte);
}



//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//name:     ReadCC2500Status
//brief:    发送与接收的开启
//若 参数为:TI_CC2500_STX 开启发送
//若 参数为:TI_CC2500_SRX 开启接收
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void WriteStrobe(u8 ucStrobe)
{
   SPI_PxOUT &= ~SPI_CSn;
   while(SPI_PxIN & SPI_MISO);
   
   SPISendByteToCC2500(ucStrobe);
   Delay_us(DelayTime);
   
   SPI_PxOUT |= SPI_CSn;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//name:     RFSendPacket
//brief:    无线发送
//参数:txBuffer 需要发送的数据
//      size     数据长度
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void RFSendPacket(u8 *txBuffer, u8 size)
{   
      WriteCC2500BurstReg(TI_CC2500_TXFIFO, txBuffer, size); // 写入需要发送的数据到发送FIFO
      WriteStrobe(TI_CC2500_STX);    // 打开发送

      // 同步发送时 等待 GDO0 为高电平,同步发送结束
      while (!(TI_CC_GDO0_PxIN & TI_CC_GDO0_PIN));
      
      // 等待 GDO0 为低电平,则一个包发送结束;
      while (TI_CC_GDO0_PxIN & TI_CC_GDO0_PIN);
}




//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//name:     RFReceivePacket
//brief:    无线接收
//参数:txBuffer 数据存放位置
//      size     需要接收数据的长度
//返回:
//          0x80:  正确
//          0x00:  错误
//-----------------------------------------------------------------------------
u8 RFReceivePacket(u8 *rxBuffer, u8 *length)
{
      u8 CRCStatus[2];
      u8 pktLen;

      WriteStrobe(TI_CC2500_SRX); //使能接收
      while (!(TI_CC_GDO0_PxIN & TI_CC_GDO0_PIN));
      while (TI_CC_GDO0_PxIN & TI_CC_GDO0_PIN);
      if ((ReadCC2500Status(TI_CC2500_RXBYTES) & TI_CC2500_NUM_RXBYTES)) //RX FIFO是否有数据
      {
      
         pktLen = ReadCC2500Reg(TI_CC2500_RXFIFO); // 读取字节长度

         if (pktLen <= *length)                    // 如果读出的长度不大于设置的长度
         {
            ReadCC2500BurstReg(TI_CC2500_RXFIFO, rxBuffer, pktLen); // 读出数据
            *length = pktLen;                     // 返回实现的长度
            ReadCC2500BurstReg(TI_CC2500_RXFIFO, CRCStatus, 2);
                                               
            return (u8)(CRCStatus[TI_CC2500_LQI_RX] & TI_CC2500_CRC_OK);  // 返回 CRC_OK 位
         }                                    
         else
         {
            *length = pktLen;                     // 返回更大的字节
            WriteStrobe(TI_CC2500_SFRX);          // 设置接收
            return 0;                             // 错误
         }
      }
      else
      {
         return 0;                               // 错误
      }
}
此帖出自RF/无线论坛

最新回复

用sinffer侦听是不是数据发送成功了,如果不成功用RF studio检测一下硬件有没有问题。  详情 回复 发表于 2013-4-11 10:46
点赞 关注
 

回复
举报

90

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
不晓得是不是 void RFSendPacket(u8 *txBuffer, u8 size);
u8 RFReceivePacket(u8 *rxBuffer, u8 *length) 这两个函数我理解的逻辑有问题    劳烦大神了
此帖出自RF/无线论坛
 
 

回复

90

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
求神回复。。。。
此帖出自RF/无线论坛
 
 
 

回复

986

帖子

0

TA的资源

五彩晶圆(初级)

4
 
用sinffer侦听是不是数据发送成功了,如果不成功用RF studio检测一下硬件有没有问题。
此帖出自RF/无线论坛

点评

我的CC2500是用杜邦线引出来再接上MSP430的,但是在用SmartRF studio7时检测不到RF设备  详情 回复 发表于 2013-4-11 16:50
个人签名电子工程师技术交流QQ群:12425841,专注于自动控制、数字电源等
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 kata 的帖子

我的CC2500是用杜邦线引出来再接上MSP430的,但是在用SmartRF studio7时检测不到RF设备
此帖出自RF/无线论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表