LoraWAN论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 13520|回复: 11

lora 关于CAD检测

[复制链接]

6

主题

11

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2017-5-25 15:15:47 | 显示全部楼层 |阅读模式
大家好,CAD检测是如何检测,芯片资料关于这个介绍的比较少,应该如何配置这个检测?
回复

使用道具 举报

88

主题

434

帖子

4043

积分

论坛元老

Rank: 8Rank: 8

积分
4043
发表于 2017-5-25 15:24:46 | 显示全部楼层
CAD(Channel Activity Detection)是LoRa侦听信道是否空闲的机制,它快速且节能。
回复

使用道具 举报

88

主题

434

帖子

4043

积分

论坛元老

Rank: 8Rank: 8

积分
4043
发表于 2017-5-25 15:27:28 | 显示全部楼层
CAD的原理是:
(1)LoRa Radio启动接收,从信道中捕获一个信号;
(2)LoRa Radio分析该信号,是否为一个preamble symbol;
(3)根据结果,报告:信道是否为空。
回复

使用道具 举报

88

主题

434

帖子

4043

积分

论坛元老

Rank: 8Rank: 8

积分
4043
发表于 2017-5-25 15:29:19 | 显示全部楼层
启动CAD的代码如下所示:
/**
  * @brief  Set LoRa to CAD mode.
  * @note  The period of CAD is about 800 us.
  * @param  wTimeout: the unit is millisecond, 0=don't care.
  * @retval  Result of invoked.
  *             -1=Error that radio is busy; 0=Set CAD OK.
  */
int8_t SX1278SetCAD(uint16_t wTimeout)
{
    if (RF_IDLE != s_tRadioState)
    {
        return -1; /* Error: radio is busy! */
    }

    SX1278SetSwPin2Rx(); /* CAD needs receive signal */

    /* Enable interrupt = CadDone + CadDetected */
    SX1278Write( REG_LR_IRQFLAGSMASK,
                         RFLR_IRQFLAGS_RXTIMEOUT |
                         RFLR_IRQFLAGS_RXDONE |
                         RFLR_IRQFLAGS_PAYLOADCRCERROR |
                         RFLR_IRQFLAGS_VALIDHEADER |
                         RFLR_IRQFLAGS_TXDONE |
                         //RFLR_IRQFLAGS_CADDONE |
                         RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL
                         //RFLR_IRQFLAGS_CADDETECTED
                         );
            
    /* DIO0<10> = CadDone */
    SX1278Write( REG_DIOMAPPING1,
                          (SX1278Read(REG_DIOMAPPING1) & RFLR_DIOMAPPING1_DIO0_MASK) |
                          RFLR_DIOMAPPING1_DIO0_10 );

    s_tRadioState = RF_CAD;

    /* Set LoRa to CAD mode */
    SX1278SetOpMode(RFLR_OPMODE_CAD);

    /* Start timer for timeout of CAD */
    if (wTimeout > 0)
    {
        SX1278StartTimer(wTimeout);
    }

    return 0;
}
回复

使用道具 举报

88

主题

434

帖子

4043

积分

论坛元老

Rank: 8Rank: 8

积分
4043
发表于 2017-5-25 15:31:32 | 显示全部楼层
CAD检测完毕后,中断服务程序代码如下:
/**
  * @brief  Handler for IRQ of DIO_0.
  * @note  Insure callback functions are SMALL, FAST and SAFE that would been invoked by ISR.
  * @param  None
  * @retval  None
  */
void SX1278Dio0IrqHandler(void)
{
    uint8_t    byRegVal;

    SX1278StopTimer(); /* At first stop the timer */

    if (RF_CAD == s_tRadioState) /* CAD Done */
    {
        bool    bIsCadDetected;
               
        /* Clear Irq of "CadDone" */
        SX1278Write(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE);

        if ( (SX1278Read(REG_LR_IRQFLAGS) & RFLR_IRQFLAGS_CADDETECTED_MASK) ==
              RFLR_IRQFLAGS_CADDETECTED ) /* Is CadDetected */
        {
            /* Clear Irq of "CadDetected" */
            SX1278Write(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDETECTED);
        
            bIsCadDetected = TRUE;
        }
        else
        {
            bIsCadDetected = FALSE;
        }

        s_tRadioState = RF_IDLE;
               
        if (s_pstRadioEvents && s_pstRadioEvents->CadDone)
        {
            s_pstRadioEvents->CadDone(bIsCadDetected);
        }   
    }

    return;
}
回复

使用道具 举报

6

主题

11

帖子

50

积分

注册会员

Rank: 2

积分
50
 楼主| 发表于 2017-6-8 09:03:04 | 显示全部楼层
BeyondDream 发表于 2017-5-25 15:31
CAD检测完毕后,中断服务程序代码如下:
/**
  * @brief  Handler for IRQ of DIO_0.

有好的程序文件吗?这个只有函数 没有.h文件 我有点看不明白 这个变量的意思
回复

使用道具 举报

6

主题

11

帖子

50

积分

注册会员

Rank: 2

积分
50
 楼主| 发表于 2017-6-8 10:35:53 | 显示全部楼层
本帖最后由 陈浪 于 2017-6-8 10:40 编辑
陈浪 发表于 2017-6-8 09:03
有好的程序文件吗?这个只有函数 没有.h文件 我有点看不明白 这个变量的意思 ...

我按照这个设置后 DIO3 引脚就是一直都是高电平了!
回复

使用道具 举报

6

主题

11

帖子

50

积分

注册会员

Rank: 2

积分
50
 楼主| 发表于 2017-6-8 10:41:46 | 显示全部楼层
陈浪 发表于 2017-6-8 10:35
我按照这个设置后 DIO3 引脚就是一直都是高电平了!

我设置IO0 为10 IO3 为00 则是一直都是低电平
IO0 为00 IO3为00 IO3 则一直都是高电平

void SX1276_CADMode( void )
{
        SX1276_LoRa_SetMode( LORA_MODE_STDBY );
    SX1276_WriteReg( REG_LR_IRQFLAGSMASK, DEF_LR_IRQFLAGSMASK | RFLR_IRQFLAGS_RXTIMEOUT
                                                                                                                          | RFLR_IRQFLAGS_RXDONE
                                                                                                                          | RFLR_IRQFLAGS_PAYLOADCRCERROR
                                                                                                                          | RFLR_IRQFLAGS_VALIDHEADER
                                                                                                                          | RFLR_IRQFLAGS_TXDONE
                                                                                                                        //  | RFLR_IRQFLAGS_CADDONE
                                                                                                                          | RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL
                                                                                                                        //  | RFLR_IRQFLAGS_CADDETECTED
                                                                                                                          );
        SX1276_LoRa_SetFreqHoppingPeriod( 0 );  //By the FreqHopping is disabled

        SX1276_WriteReg( REG_LR_DIOMAPPING1, DEF_LR_DIOMAPPING1 | RFLR_DIOMAPPING1_DIO0_10  //RxDone
                                                                                              | RFLR_DIOMAPPING1_DIO1_00  //RxTimeout
                                                                                              | RFLR_DIOMAPPING1_DIO2_00  //FhssChangeChannel
                                                                                              | RFLR_DIOMAPPING1_DIO3_00 );  //CadDone
        SX1276_WriteReg( REG_LR_DIOMAPPING2, DEF_LR_DIOMAPPING2 | RFLR_DIOMAPPING2_DIO4_00  //CadDetected
                                                                | RFLR_DIOMAPPING2_DIO5_00 );  //Mode Ready

    SX1276_SetSwitchRx( );
    SX1276_LoRa_SetMode( LORA_MODE_CAD );
}
回复

使用道具 举报

88

主题

434

帖子

4043

积分

论坛元老

Rank: 8Rank: 8

积分
4043
发表于 2017-6-8 12:20:09 | 显示全部楼层
陈浪 发表于 2017-6-8 10:41
我设置IO0 为10 IO3 为00 则是一直都是低电平
IO0 为00 IO3为00 IO3 则一直都是高电平

对不起,这种“工程问题”,还得由您“细心调试”,我们很难有“建设性的意见”。。。
回复

使用道具 举报

0

主题

2

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2018-7-11 10:36:23 | 显示全部楼层
请问一下 CAD侦听的只是preamble symbol;然而preamble 只是占数据包的一小部分,那怎么控制模块可以正确侦听到preamble
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|LoraWAN论坛  

GMT+8, 2022-6-28 14:35 , Processed in 0.206132 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表