TI中文支持网
TI专业的中文技术问题搜集分享网站

关于CC1101的CCA检测功能

在做基于CC1101的通信,8台发射对应8台接收,想使用CCA来做防碰撞设置,在网上找了相关的CCA代码。在测试CCA的时候出现以下情况:开启一台设备在循环发送载波,占用信道。另一台设备使用CCA功能用来检测,IOCFG2寄存器设置0x0E,能检测到信道被占用,GDO2变为高电平,但是当关闭发送载波的设备后,做CCA检测的这台设备GDO2不能变为低电平,这是为什么???

下面是相关寄存器配置,数据率2.4kBaud,使用的SmartRF配置好的数值

{ CC1101_IOCFG0,0x06 },{ CC1101_FIFOTHR,0x47 },{ CC1101_PKTCTRL0,0x05 },{ CC1101_CHANNR,0x00 },	//433M{ CC1101_FSCTRL1,0x06 },{ CC1101_FREQ2,0x10 },{ CC1101_FREQ1,0xB1 },{ CC1101_FREQ0,0x3B },{ CC1101_MDMCFG4,0xF6 },{ CC1101_MDMCFG3,0x83 },{ CC1101_MDMCFG2,0x13 },{ CC1101_DEVIATN,0x15 },{ CC1101_MCSM0,0x18 },{ CC1101_FOCCFG,0x16 },{ CC1101_WORCTRL,0xFB },{ CC1101_FSCAL3,0xE9 },{ CC1101_FSCAL2,0x2A },{ CC1101_FSCAL1,0x00 },{ CC1101_FSCAL0,0x1F },{ CC1101_TEST2,0x81 },{ CC1101_TEST1,0x35 },{ CC1101_MCSM1,0x3F },{ CC1101_IOCFG2,		0x0E },{ CC1101_AGCCTRL1,		0x40 },{ CC1101_AGCCTRL2,		0x17 },{ CC1101_FREND0,	0x10 }

下面是使用CCA检测的主函数:
int main(void)
{
	drv_button_init();
	//LED初始化
	drv_led_init( );
	
	//SPI初始化
	drv_spi_init( );
	
	//CC1101初始化
	CC1101_Init( );

	while( 1 )	
	{
		
		CC1101_Write_Cmd(CC1101_SIDLE);CC1101_Write_Cmd( CC1101_SRX );
		drv_delay_ms(10);
		if(	CC1101_GET_GDO2_STATUS( ) == 1 )
		{ 
			led_red_on();
			drv_delay_ms(50);

		}	
		CC1101_Clear_RxBuffer();
		
		CC1101_Write_Cmd(CC1101_SIDLE);CC1101_Write_Cmd( CC1101_SRX );
		drv_delay_ms(10);
		if(	CC1101_GET_GDO2_STATUS( ) == 0 )
		{
			led_red_off();
		}
		CC1101_Clear_RxBuffer();}

}

Viki Shi:

IOCFG2设置为0x0E是载波模式,CCA是0x09
Carrier sense. High if RSSI level is above threshold. Cleared when entering IDLE mode
Clear channel assessment. High when RSSI level is below threshold (dependent on the current CCA_MODE setting)

Cunsheng Li:

回复 Viki Shi:

我改为了0x09,CCA还是不能用。现在我不论发不发送载波,GDO2都为高电平

Viki Shi:

回复 Cunsheng Li:

CCA_MODE设置为01试试,就是MCSM1寄存器

Cunsheng Li:

回复 Viki Shi:

还是不可以,还是存在上面的问题,信道不空闲时是高电平,信道切为空闲时它的GDO2引脚就不输出低电平了。

赞(0)
未经允许不得转载:TI中文支持网 » 关于CC1101的CCA检测功能
分享到: 更多 (0)