This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1101 接收电流过大问题

Other Parts Discussed in Thread: CC1101

在配置CC1101为接收模式时,产品的总电流为33mA,经验证CC1101的电流大约有30mA。

我采用的是异步串口输出模式(Asynchronous serial mode),接收到的数据直接从GDO2输出,再用MCU解码。频率为457.6MHz,数据的速率为512Bit/s,频宽为10KHz,接收灵敏度大约要有-80dBm(由于产品需要,发射的参数已经固定了,只用CC1101开发接收机)。

接收没问题,只是接收时的电流过大,有30mA,跟规格书上的15mA左右有较大的差异。

请问: 如何减小接收时的电流?以下配置是根据SmartRfStudio给出的。还有睡眠和唤醒时的指令。

    Write_CC1101_Reg(IOCFG2,0x0D);//Serial Data Output. Used for asynchronous serial mode
    Write_CC1101_Reg(IOCFG1,0x2E);//High impedance(3-state)
    Write_CC1101_Reg(IOCFG0,0x2E);//High impedance(3-state)
    
    Write_CC1101_Reg(FIFOTHR,0x47);
   
    Write_CC1101_Reg(SYNC1,0xD3);
    Write_CC1101_Reg(SYNC0,0x91);
   
    Write_CC1101_Reg(PKTLEN,0xFF);//Packet Length
    Write_CC1101_Reg(PKTCTRL1,0x00);
    Write_CC1101_Reg(PKTCTRL0,0x32);//Synchronous serial mode,Infinite packet length mode
   
    Write_CC1101_Reg(ADDR,0x00);
    Write_CC1101_Reg(CHANNR,0x00);
    Write_CC1101_Reg(FSCTRL1,0x06);
    Write_CC1101_Reg(FSCTRL0,0x29);  //frequency offset (normal)
   
    Write_CC1101_Reg(FREQ2,(u8)((0x00FF0000&lulFrequency)>>16));
    Write_CC1101_Reg(FREQ1,(u8)((0x0000FF00&lulFrequency)>>8));
    Write_CC1101_Reg(FREQ0,(u8)(0x000000FF&lulFrequency));
    Write_CC1101_Reg(MDMCFG4,0xF4);
    Write_CC1101_Reg(MDMCFG3,0x4A);
    Write_CC1101_Reg(MDMCFG2,0x00);
    Write_CC1101_Reg(MDMCFG1,0x00);
    Write_CC1101_Reg(MDMCFG0,0x00);
   
    Write_CC1101_Reg(DEVIATN,0x15);//0x00);
   
    Write_CC1101_Reg(MCSM2,0x07);
    Write_CC1101_Reg(MCSM1,0x30);
    Write_CC1101_Reg(MCSM0,0x18);
   
    Write_CC1101_Reg(FOCCFG,0x16);
    Write_CC1101_Reg(BSCFG,0x6C);
   
    Write_CC1101_Reg(AGCCTRL2,0x03);//0x38);//0x40);
    Write_CC1101_Reg(AGCCTRL1,0x40);
    Write_CC1101_Reg(AGCCTRL0,0x91);
   
    Write_CC1101_Reg(WOREVT1,0x87);
    Write_CC1101_Reg(WOREVT0,0x6B);
    Write_CC1101_Reg(WORCTRL,0xF8);
   
    Write_CC1101_Reg(FREND1,0x56);
    Write_CC1101_Reg(FREND0,0x10);
   
    Write_CC1101_Reg(FSCAL3,0xE9);
    Write_CC1101_Reg(FSCAL2,0x2A);
    Write_CC1101_Reg(FSCAL1,0x00);
    Write_CC1101_Reg(FSCAL0,0x1F);
   
    Write_CC1101_Reg(RCCTRL1,0x41);
    Write_CC1101_Reg(RCCTRL0,0x00);
   
    Write_CC1101_Reg(FSTEST,0x59);
    Write_CC1101_Reg(PTEST,0x7F);
    Write_CC1101_Reg(AGCTEST,0x3F);
   
    Write_CC1101_Reg(TEST2,0x81);
    Write_CC1101_Reg(TEST1,0x35);
    Write_CC1101_Reg(TEST0,0x09);

    Write_CC1101_Com(SFRX);
    Write_CC1101_Com(SFTX);
    Write_CC1101_Com(SIDLE);

    CC1101_WakeUp();

void CC1101_Sleep(void)
{
    Write_CC1101_Reg(MCSM1,0x00);
    Delay_Ms(1);
    Write_CC1101_Com(SIDLE);
    Delay_Ms(1);
    Write_CC1101_Com(SXOFF);
    Delay_Ms(1);
    Write_CC1101_Com(SPWD);
    CSN_HIGH;
}

void CC1101_WakeUp(void)
{
    u8 lucWakeUpState;
    do
    {
        Write_CC1101_Com(SRX);
        lucWakeUpState = Read_CC1101_Reg(MARCSTATE);
    }
    while(lucWakeUpState != RX);
    Delay_Ms(200);
    Write_CC1101_Com(SRX);

}