在配置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);
}