阅读本文章前,请先认真阅读数据手册,同时查看我转载的CCA(1)和CCA(2)两篇文章进行扫盲。
最近一直在用CC1101这款无线芯片,今天把CCA功能调试成功了,特来分享一下。我的思路是使能CC1101为CCA功能,GDO2引脚配置为输出载波感应电平,设置好感应电平阈值。现在监听空气中的载波信号强度,如果接收信号强度高于门限时,GDO2为高电平;当接收信号强度低于门限时,GDO2为低电平。
CCA初始化函数如下:
void CC1101CCA( void )//配置为载波监听功能
{
CC1101WriteReg(CC1101_IOCFG2,0x0E);//GDO2引脚输出载波感应电平,如果RSSI级别在门限之上为高电平
CC1101WriteReg(CC1101_MCSM1,0x3F);//接受信号强度低于门限值且当前未接收报文则信道空闲,让TX和RX结束后,芯片都保持在RX状态。
CC1101WriteReg(CC1101_AGCCTRL1,0x40);//低噪声放大器增益先减小,载波监听相对阈值禁用,载波监听绝对阈值由MAGN_TARGET设置
CC1101WriteReg(CC1101_AGCCTRL2,0x07);//42dB
}
实验源程序如下:
void main( void )
{
GPIO_Init( );//IO口和晶振初始化
SPI_Init( ); //SPI配置初始化
CC1101Init( ); //CC1101初始化
CC1101CCA( ); //CC1101 CCA配置
while( 1 )
{
CC1101SetTRMode( RX_MODE );
//CC1101设置为接收模式
__delay_ms(1);//设置为接收模式后需要稍微等待一下,CC1101才能检测空气中的载波信号
if(GDO2==1)//检测到空气中有载波信号
{
//让LED状态取反
}
__delay_ms(50);//延时一段时间,以便人眼能看到LED闪烁
CC1101WriteCmd( CC1101_SFRX );//每次接收完数据后,都需要清空RX FIFO,以便下次接收
}
}
实验结果:让另一端的CC1101周期性的发送数据,现在接收端的GDO2会周期性的出现高电平,因此LED灯不停的闪烁。