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

CC1101的CCxxx0_RXBYTES问题

时间:12-23 整理:3721RD 点击:

利用stm32f1做了一个发,一个收的实验,最初还能正常接收数据,中间对芯片电路进行插拔后,造成无法接收,(halSpiReadStatus(CCxxx0_RXBYTES)读出的长度为0。功率为采用0dm,波长为433。芯片更换了四五个都是无法接收。   GDO0发生跳变是否代表程序发送成功?

发送程序

void halRfSendPacket(INT8U *txBuffer, INT8U size)
{
    halSpiWriteReg(CCxxx0_TXFIFO, size);
    halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据

    halSpiStrobe(CCxxx0_STX);  //进入发送模式发送数据

    // Wait for GDO0 to be set -> sync transmitted
    while (!GDO0);
    // Wait for GDO0 to be cleared -> end of packet
    while (GDO0);
 halSpiStrobe(CCxxx0_SFTX);
}

接收程序

INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
{
  INT8U status[2];
  INT8U packetLength;
 INT8U i=(*length)*4;  // 具体多少要根据datarate和length来决定

  halSpiStrobe(CCxxx0_SRX);  //进入接收状态
 //delay(5);
    //while (!GDO1);
    //while (GDO1);
 delay(2);
 while (GDO0)
 {
  delay(2);
  --i;
  if(i<1)
     return 0;     
 } 
    if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
 {
        packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
        if (packetLength <= *length)   //如果所要的有效数据长度小于等于接收到的数据包的长度
  {
            halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
            *length = packetLength;    //把接收数据长度的修改为当前数据的长度
       
            // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
            halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);  //读出CRC校验位
   halSpiStrobe(CCxxx0_SFRX);  //清洗接收缓冲区
            return (status[1] & CRC_OK);   //如果校验成功返回接收成功
        }
   else
  {
            *length = packetLength;
            halSpiStrobe(CCxxx0_SFRX);  //清洗接收缓冲区
            return 0;
        }
    }
 else
  return 0;
}

 

 

有点不明白什么是"中间对芯片电路进行插拔后"

GDO0通常是连接外部MCU作为中断或者数据的口,可以用寄存器来配置的,如果有跳变,说明口上是有数据的,具体是CC1101这边给的数据还是MCU这边的,可以确认一下。

如果“中间对芯片电路进行插拔后”是指在通讯过程中,重新插拔了CC1101芯片,相当于芯片的配置都丢失了,再次插上需要重新对寄存器配置,这样才能正常工作。

采用杜邦线焊接的电路,与IO口连接时需要手动插在一起,

配置丢失,把MCU复位后是对CC1101寄存器重新配置,但还是无法正常工作,

GDO0配置为0x06 ,单步调试时发送端的GDO0有跳变,单步调试接收端是GDO0也有跳变,采用while(GDO0);读取该引脚状态。

接收端查询接收长度时为0 ,即执行CCxxx0_RXBYTES,从SPI中返回的值为0.。

我也是同样的问题,就是接收不到任何数据。读状态每次都是0;

read_status = halSpiReadStatus(CCxxx0_RXBYTES);

有什么寄存器可以读CC1101的接收状态吗?

MCU复位之后,建议将CC1101也复位,配置也应该通过SPI配置,如果SPI read有问题,怎么确认是否配置也正确执行了

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

网站地图

Top