在我的设计中、如果 RSSI 优于-65dBm、CC1101会正常接收、但如果信号强度略低、则会丢失几乎所有的数据包。 在-65dBm 时、我接收到超过90%的已发送数据包、在-70dBm 时、我大约为1%。 RSSI 是从附加的状态字节读取的值。
配置和接收功能如下所示:
0x07、// IOCFG2 0x2E、// IOCFG1 0x2E、// IOCFG0 0x47、// FIFOTHR 0xD3、 // SYNC1 0x91、// SYNC0 0x07、// PKTLEN 0x0C、// PKTCTRL1 0x44、// PKTCTRL0 0x00、 // ADDR 0x00、// CHANNR 0x06、// FSCTRL1 0x00、// FSCTRL0 0x21、// FREQ2 0x65、 // FREQ1 0x6A、// FREQ0 0xCA、// MDMCFG4 0x83、// MDMCFG3 0x16、// MDMCFG2 0x22、 // MDMCFG1 0xf8、// MDMCFG0 0x34、// DEVIATN 0x07、// MCSM2 0x3E、// MCSM1 0x38、 // MCSM0 0x16、// FOCCFG 0x6C、// BSCFG 0x43、// AGCCTRL2 0x58、// AGCCTRL1 0x91、 // AGCCTRL0 0x0D、// WOREVT1 0x8A、// WOREVT0 0x38、// WORCTRL 0x56、// FREND1 0x10、 // FREND0 0xE9、// FSCAL3 0x2A、// FSCAL2 0x00、// FSCAL1 0x1F、// FSCAL0
//此函数在 GDO2的引脚中断时调用(配置为在接收到的数据包处中断,并具有正确的 CRC
void iTEC_HandleRX (){
CC1101_ReadRxFifo (((7 + 2));// 7字节数据包长度+ 2字节 CRC 和 RSSI
xITecBufferEntry_t * pxTmp =(xITecBufferEntry_t *)(g_xSpi.acRxBuf + 1);// SPI 接收缓冲区
if ((((pxTmp->cLinkQuality & CC1101_CRCOK_MASK)=CC1101_CRCOK_MASK)&&
(CalcChecksum (&pxTmp->xPacket)=pxTmp->xPacket.CCB)){
RBuf_Write (&g_xITec_RX_Queue、pxTmp);
}
}
我用示波器查看了中断线路、实际上只有很少的尖峰(接收到的数据包中断)。 在我看来、CC1101芯片中的接收似乎已经失败。
如果需要原理图片段或其他信息、我很乐意提供我能提供的信息。