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原理和图表,说的很清楚了。