LoraWAN论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: 陈浪
打印 上一主题 下一主题

lora 关于CAD检测

[复制链接]

100

主题

459

帖子

5247

积分

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

100

主题

459

帖子

5247

积分

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

100

主题

459

帖子

5247

积分

论坛元老

Rank: 8Rank: 8

积分
5247
板凳
发表于 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;
}
回复

使用道具 举报

100

主题

459

帖子

5247

积分

论坛元老

Rank: 8Rank: 8

积分
5247
地板
发表于 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;
}
回复

使用道具 举报

100

主题

459

帖子

5247

积分

论坛元老

Rank: 8Rank: 8

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

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

使用道具 举报

100

主题

459

帖子

5247

积分

论坛元老

Rank: 8Rank: 8

积分
5247
6#
发表于 2018-7-19 20:08:38 | 显示全部楼层
本帖最后由 BeyondDream 于 2022-12-22 09:26 编辑

请链接《lora 关于CAD检测》  http://lora.timeddd.com/forum.php?mod=viewthread&tid=7
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 23:32 , Processed in 0.062344 second(s), 8 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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