微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > CC2500收发问题

CC2500收发问题

时间:10-02 整理:3721RD 点击:
本人最近在做一个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; // 错误
}
}

不晓得是不是 void RFSendPacket(u8 *txBuffer, u8 size);
u8 RFReceivePacket(u8 *rxBuffer, u8 *length) 这两个函数我理解的逻辑有问题 劳烦大神了

求神回复。。。。

用sinffer侦听是不是数据发送成功了,如果不成功用RF studio检测一下硬件有没有问题。

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top