主题中讨论的其他器件: CC2500、 CC1100
如何发生以下情况以及如何提高数据发送和接收的成功率 ?


#ifdef DATARATE_250kbps static const uint8_t CC1101InitData[ INIT_NUM ][ 2 ]= { //0x29:CHP_RDYn 0x2E:3-高阻 0x0F:CRC_OK { CC1101_IOCFG2, 0x0F}, // IOCFG2 GDO2 Default is CHP_RDYn.0x29 { CC1101_IOCFG1, 0x2E }, // IOCFG1 GDO1 Default is 3-state { CC1101_IOCFG0, 0x06 }, // IOCFG0 GDO0 output pin configuration.0x06 { CC1101_FIFOTHR, 0x0E }, // FIFOTHR RXFIFO and TXFIFO thresholds. { CC1101_SYNC1, 0XD3 }, { CC1101_SYNC0, 0X91 }, { CC1101_PKTLEN, 0xFF }, // PKTLEN Packet length. { CC1101_PKTCTRL1, 0x04 }, // PKTCTRL1数据包自动控制.状态字节开启/地址检查 { CC1101_PKTCTRL0, 0x45 }, // PKTCTRL0数据包自动控制. CRC开启/可变长度 //ADDR //CHANNR { CC1101_FSCTRL1, 0x0C }, // FSCTRL1 频率合成器控制 sensitivity:0x0c current consumption:0x12 { CC1101_FSCTRL0, 0x00 }, // FSCTRL0 频率合成器控制 { CC1101_FREQ2, 0x10 }, // FREQ2 Frequency control word, high byte { CC1101_FREQ1, 0x44 }, // FREQ1 Frequency control word, middle byte. { CC1101_FREQ0, 0xEC }, // FREQ0 Frequency control word, low byte. { CC1101_MDMCFG4, 0x2D }, // MDMCFG4 Modem configuration. { CC1101_MDMCFG3, 0x3B }, // MDMCFG3 Modem 速率 { CC1101_MDMCFG2, 0x13 }, // MDMCFG2 Modem DC 阻断滤波器. sensitivity:0x13 current consumption:0x93 { CC1101_MDMCFG1, 0x22 }, // MDMCFG1 Modem 调制格式/MC/ 4bytes前导 { CC1101_MDMCFG0, 0xF8 }, // MDMCFG0 Modem 信道频率间隔 { CC1101_DEVIATN, 0x62 }, // DEVIATN Modem deviation setting (when FSK modulation is enabled). //MCSM2 0X07 //MCSM1 0X30 { CC1101_MCSM0, 0x18 }, // MCSM0 Main Radio Control State Machine configuration. { CC1101_FOCCFG, 0x1D }, // FOCCFG 频率偏移补偿配置 { CC1101_BSCFG, 0x1C }, // BSCFG 位同步配置 { CC1101_AGCCTRL2, 0xC7 }, // AGCCTRL2 AGC control. { CC1101_AGCCTRL1, 0x00 }, // AGCCTRL1 AGC control. { CC1101_AGCCTRL0, 0xB0 }, // AGCCTRL0 AGC control. //WOREVT1 0X87 //WOREVT0 0X6B //WORCTRL 0XFB { CC1101_FREND1, 0xB6 }, // FREND1 Front end RX configuration. { CC1101_FREND0, 0x10 }, // FREND0 Front end TX configuration. { CC1101_FSCAL3, 0xEA }, // FSCAL3 Frequency synthesizer calibration. { CC1101_FSCAL2, 0x2A }, // FSCAL2 Frequency synthesizer calibration. { CC1101_FSCAL1, 0x00 }, // FSCAL1 Frequency synthesizer calibration. { CC1101_FSCAL0, 0x1F }, // FSCAL0 Frequency synthesizer calibration. //RCCCTRL1 0X41 //RCCCTRL0 0X00 //FSTEST 0X59 //PTEST 0X7F //AGCTEST 0X3F { CC1101_TEST2, 0x88 }, { CC1101_TEST1, 0x31 }, { CC1101_TEST0, 0x0B }, // TEST0 // TEST0 Various test settings.//TEST0 0X0B }; #endivoid CC1101_RX_MODE(uint8_t type) { RESET_GDO0; RESET_GDO2; reset_rxData(); reset_txData(); CC1101_Write_Cmd(CC1101_SIDLE ); //delay_ms(1); CC1101_Write_Cmd( CC1101_SFRX ); CC1101_Write_Cmd( CC1101_SFTX ); CC1101_Write_Reg(CC1101_PKTLEN,0xff);// CC1101_Write_Reg(CC1101_IOCFG2,0x07); //CRC_OK CC1101_Write_Reg(CC1101_PKTCTRL0,0x45);//可变长度 //ADR_CHK:Address check, no broadcast CC1101_Write_Reg(CC1101_PKTCTRL1,0x0D); CC1101_Write_Reg(CC1101_MCSM0,0x18);// When going from IDLE to RX or TX (or FSTXON) CC1101_Write_Reg(CC1101_IOCFG0,0x06); //收到同步字置位,数据包末尾\地址校验失败\RXFIFO溢出时取消置位 //WOR, RX_TIME是百分比,退出WOR,RX_TIME就必须一直持续到packet结束 CC1101_Write_Reg(CC1101_MCSM2,0x07);//RX_TIME:Until end of packet }void CC1101_WOR_Init( void ) { //CC1101_Write_Cmd(CC1101_SIDLE ); //提前配置I/O,输出状态不正常 //与 RX FIFO 相关:达到或超出 RX FIFO 阈值填充 RX FIFO 时置位,或到达数据包结尾时置位 //CC1101_Write_Reg(CC1101_WOREVT1,0x87);//Event0高8位 1000ms //CC1101_Write_Reg(CC1101_WOREVT0,0x6A);//Event0低8位 CC1101_Write_Reg(CC1101_MCSM0,0x38);// 每第四次当从 RX 或 TX 返回空闲时自动进行校准 CC1101_Write_Reg(CC1101_MCSM2,0x10);//RX_RSSI=1(便于快速休眠) 1000ms*0.391% uint16_t sl_p; if(WOR_short){ sl_p =50; }else { sl_p =1000; } sl_p = (uint16_t)(sl_p*(34.666));//26000/750 CC1101_Write_Reg(CC1101_WOREVT1,sl_p>>8);//Event0高8位 1000ms CC1101_Write_Reg(CC1101_WOREVT0,sl_p);//Event0低8位 //WORCTRL.EVENT1 t1=EVENT1*750/26M 16 (0.444 – 0.462 ms) //CC1101_Write_Reg(CC1101_WORCTRL,0x48);// 事件 1 工作暂停前事件 0 后 WOR_RES==0 1LSB周期 (27μs – 31μs) CC1101_Write_Reg(CC1101_WORCTRL,0x08);// 事件 1 工作暂停前事件 0 后 WOR_RES==0 1LSB周期 (27μs – 31μs) //Event0 计算公式:34666约为1s t0=WOREVT*(2^(5*WOR_RES))*750/26M 8.8uA平均功耗 delay_us(3000); //CC1101_Write_Reg(CC1101_WORCTRL,0x30); uint8_t calib1 = CC1101_Read_Status(RCCTRL1_STATUS); uint8_t calib0 = CC1101_Read_Status(RCCTRL0_STATUS); CC1101_Write_Reg(CC1101_RCCTRL1, calib1); CC1101_Write_Reg(CC1101_RCCTRL0, calib0); CC1101_Write_Reg(CC1101_IOCFG0,0x25); //0x25 WOR ENVT1 //CC1101_Write_Cmd(CC1101_SIDLE ); CC1101_Write_Cmd(CC1101_SWORRST ); //Resets the real time clock CC1101_Write_Cmd(CC1101_SWOR); // Starts Wake-on-Radi //CC1101_Write_Cmd(CC1101_SPWD); }- MCU:STM32L496 SPI:4MHz TSP:1us
- 例如:#define CC1101_SET_CSn_LOW CC_CS_0;DELAY_us (2);
#define CC1101_SET_CSn_HIGH DELAY_us (2);CC_CS_1;





