LORA1276/1278 CAD检测功能测试

LORA1276/1278 CAD检测功能测试
使用CAD检测功能是为了降低产品功耗。MCU的RTC定时2s唤醒,然后启动LORA接收机进行CAD信道检测,发现符合条件的前导码后,给出中断(必须映射管脚)或者MCU查询lora中断寄存器值为0X05,然后MCU启动lora接收数据,可以是单次接收,也可是连续接收。
下面是lora模式下的CAD检测启动函数。配置寄存器,映射管脚,然后启用CADdone and CadDetected中断。CADdone是CAD完成,CadDetected是CAD完成并且对比到符合要求的前导码了。另外注意,500MHZ以下频率,LR_RegOpMode的第4位要置高,表示使用低频寄存器。低频启动CAD时写入0xF,高频时写入0x07。这个虽然实测没有什么影响,但是还是建议按照官方手册来产品会比较稳定。

/*lora模式下CAD初始化函数*/
void SX1276_LORA_CAD_INIT(void)  
{
	SPIWriteReg(REG_LR_DIOMAPPING1,0xa1);			//DIO0=10, DIO1=10, DIO2=00, DIO3=01;DIO0=10--CADdone,DIO1=10--CadDetected
	SPIWriteReg(REG_LR_DIOMAPPING2,0x80);  			//DIO4=10, DIO5=00,DIO4=PLLLOCK,DIO5=ModeReady

	SPIWriteReg(LR_RegIrqFlagsMask,0xfa);			// enable CADdone and CadDetected
	SPIWriteReg(LR_RegIrqFlags,0xff);			// clear interrupt

//	SPIWriteReg(LR_RegOpMode,0x07);				// enter CAD mode,500M以上频率使用
	SPIWriteReg(LR_RegOpMode,0x0F);				// enter CAD mode
}

启动CAD检测后,MCU可以开外部中断进入休眠,CAD信号到来时进入处理。也开业使用查询模式,查询lora的中断寄存器值,当CadDetected位为1 时,表示有数据需要接收,否则超时让lora进入睡眠模式,然后mcu进入STOP模式。下例使用查询方法。

SX1276_RESET();  			
SX1276_LORA_INIT(); 			
SX1276_LORA_CAD_INIT();		
/*CAD时长非常重要,请参考手册,SF=11时,典型值为1.82个符号时间,一个符号时间为2的SF次方/BW*/
/*SF=11,BW=125KHZ条件下,一个符号用时16.384ms*/			
HAL_Delay(30);	//wait for CAD done time 30ms
uint8_t temp;
temp = SPIReadReg(LR_RegIrqFlags);	// read interrupt	
//	HAL_UART_Transmit(&huart1, &temp, 1, 30);	
if(temp == 0x05)	// CadDetected
{		
	SX1276_LORA_RX_INIT();		
	RX_ING_Flag = 1;	
	Rx_Tx_time_counter = 0;	//clear every loop is must
}
else
{
	RX_ING_Flag = 0;
	//SPIWriteReg(LR_RegOpMode,0x00); // 1276  SLEEP mode,500M以上频率使用
	SPIWriteReg(LR_RegOpMode,0x08); // 1276  SLEEP mode
}

对扫描模式来说,CAD时长非常重要,不能等太久,否则增加了功耗,也不能等太短,否则CAD还未处理完成。CAD检测处理时长在官方手册里有点位图表,可以估算一下。下面是官方的CAD原理和图表,说的很清楚了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了12 篇原创文章 · 获赞 4 · 访问量 1377

猜你喜欢

转载自blog.csdn.net/ydgd118/article/details/102455281