This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1101:WOR 仅使用载波

Guru**** 2341440 points
Other Parts Discussed in Thread: CC1101
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1508533/cc1101-wor-just-using-carrier

部件号:CC1101
主题中讨论的其他器件: test2.

工具/软件:

我有一个系统、我们希望使用载波侦听 WOR 通过 GDO2唤醒系统

为了节省有限的电池电量、系统本身在工作时处于最佳睡眠状态、这种情况很少发生、因此整个系统基本上始终处于睡眠状态、此时我们可以获得大约100uA 的系统电流

我成功地进行了 WOR 配置、它将使用来自远程端的数据包广播唤醒、但它一直保持开启状态、直到接收到数据包配置、因此功耗很低、但我知道它可以正常工作

现在、我正在尝试仅基于载波侦听来执行 WOR、但计时器值更长、例如唤醒频率为1Hz、然后将远程端置于连续 TX 模式、将 BLAT 射频仅置于环境中几秒钟、这样 RSSI 就会跳起来、从而捕获1秒唤醒周期中的1秒唤醒周期的功率。 之后、它可以进入正确的 Rx 模式来执行实际数据交换。 无法保持2端的时间同步、否则无法尝试锁定唤醒窗口

独立在连续 RX 模式下使用 TI 开发套件、我可以看到我的远程 TX 端正在做应该做的事情、因为它的 RSSI 至少根据图表从-110ish 本底噪声上升到>-50dBm

我一直通过 GDO2、AGC 和调制解调器寄存器尝试在我开始广播时使 GDO2变为活动状态、但似乎最好是在 WOR 计时器周期发生时使其跳动

我是不是用这种方法把这棵树弄成了错误的树? 或者我是否错过了一些明显的东西,在 GDO2上(和那里的处理)?

// CC1101_Write (CC1101_IOCFG2、0x24);// evt 0

// CC1101_Write (CC1101_IOCFG2、0x25);// evt 1

// CC1101_Write (CC1101_IOCFG2、0x14);// RSSI >阈值

// CC1101_Write (CC1101_IOCFG2、0x07);//接收

CC1101_Write (CC1101_IOCFG2、0x08);//达到前导码质量。

CC1101_Write (CC1101_WORCTRL、0x38);

CC1101_Write (CC1101_PKTSTAT、6);

// CC1101_Write (CC1101_AGCCTRL2、0x40);// MAGN = 24dB 目标

CC1101_Write (CC1101_AGCCTRL2、0x43);// MAGN = 33dB 目标

CC1101_Write (CC1101_AGCCTRL1、0x40);//载体

CC1101_Write (CC1101_AGCCTRL1、0x40 | 0x30 | 0x07);//载波+ 7

CC1101_Write (CC1101_MDMCFG2、0x13);// GFSK 30/32同步字

// CC1101_Write (CC1101_MDMCFG2、0x14);// GFSK 无前导码/SYNC、载波检测高于阈值

// CC1101_Write (CC1101_MDMCFG2、0x10);//无前导码

// CC1101_Write (CC1101_WOREVT1、0x28);//应为0.3秒、其中 worctrl.EVENT1 =7

// CC1101_Write (CC1101_WOREVT0、0xa0);

CC1101_Write (CC1101_WOREVT1、0x87);//应为1秒、worctrl.EVENT1 = 7

CC1101_Write (CC1101_WOREVT0, 0x76 );

CC1101_Write (CC1101_WORCTRL、0x78);

CC1101_Write (CC1101_MCSM2、0x0);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    这是一个国庆节、因此(有用的)答复将推迟到5月2日。

    此致、

    Zack

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不确定我完全理解您在这里尝试实施的内容。 WOR 命令的全部目的是检查通道上是否有东西、然后保持在 RX 中以接收数据包(如果有)。

    如果您只想确定是否有载波、可以使用 WOR 命令为您的应用设置正确的唤醒间隔、然后可以在引脚上输出 CS 信号。 如果无线有信号、您可以使用此信号来唤醒 MCU、然后将器件配置为正常 RX。

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我希望能够唤醒远程系统、但电池供电的传感器不会过于频繁地唤醒。 当时的想法是发送一个连续2秒左右的载波,然后 WOR 计时器设置在一秒,以尽量减少电池的当前负担(整个系统非常休眠超过99%的时间),然后系统将唤醒,将1101进入 RX 模式,然后主机将广播消息,知道远程端已唤醒并准备就绪

    我尝试使用 GDO2根据 RSSI 进行更改的任何尝试都只会让它在每次 event0超时启动/事件唤醒并进行初始通道检测时进行转换、而不管该通道上有多少射频能量

    我一直在 Rx 连续模式下使用 TI 开发板作为同一通道上的"功率计"、因此我知道几乎所有时间都没有关于@-120dBm 的任何信息、一些随机的偶尔尖峰来自其他不属于我控制的以太网。

    我可以将 event0计时器移动到其最大值左右,如果我将 GDO2配置设置为0x14或0x09 (并且使 CCA 是基于 RSSI 的不恒定),则连接的微控制器肯定会以该速率从 GDO 2唤醒。

    采取一个不同的背包,

    使用250ms 事件0唤醒周期对于电池寿命来说并不可怕、GDO2 cfg 设置为6、如果我在几秒钟内从主机重复发送消息、设备通常会通过有效消息唤醒-我不在乎它捕获了哪个消息、只是它到达了那里

    但是、有时它必须捕获足以打开接收器的某种射频、但不会切换 GDO2或超时、因为电流将跳到15mA 附近

    这是初始化代码

    CC1101_Write (CC1101_FIFOTHR、0x47);

    CC1101_Write (CC1101_PKCTRL0、0x01);

    CC1101_Write (CC1101_FSCTRL1、0x06);

    CC1101_Write (CC1101_FREQ2、0x21);

    CC1101_Write (CC1101_FREQ1、0x62);

    CC1101_Write (CC1101_FREQ0、0x76);

    CC1101_Write (CC1101_MDMCFG4、0xC8);// 10k 数据速率100k Rx 滤波器 bw

    CC1101_Write (CC1101_MDMCFG3、0x93);// 10k 数据速率

    CC1101_Write (CC1101_MDMCFG2、0x13);// GFSK | 30/32同步字位

    // CC1101_Write (CC1101_MDMCFG2、0x14);// GFSK |无前导码/同步、上述载波检测

    CC1101_Write (CC1101_DEVIATN、0x34);

    CC1101_Write (CC1101_FOCCFG、0x16);

    CC1101_Write (CC1101_AGCCTRL2、0x43);

    // CC1101_Write (CC1101_AGCCTRL2、0xF3);//减少增益

    // CC1101_Write (CC1101_AGCCTRL1、0x77);//

    CC1101_Write (CC1101_FSCAL3、0xE9);

    CC1101_Write (CC1101_FSCAL2、0x2A);

    CC1101_Write (CC1101_FSCAL1、0x00);

    CC1101_Write (CC1101_FSCAL0、0x1F);

    CC1101_Write (CC1101_TEST2、0x81);

    CC1101_Write (CC1101_TEST1、0x35);

    CC1101_Write (CC1101_TEST0、0x09);

    // CC1101_Write (CC1101_WOREVT1、0x06);// 45ms

    // CC1101_Write (CC1101_WOREVT0、0xC5);

    CC1101_Write (CC1101_WORCTRL、0x38);

    // CC1101_Write (CC1101_WOREVT1、0x0D);// 100ms

    // CC1101_Write (CC1101_WOREVT0、0xAC);

    CC1101_Write (CC1101_WOREVT1、0x21);// 250ms

    CC1101_Write (CC1101_WOREVT0、0xFC);

    // CC1101_Write (CC1101_WOREVT1、0x87);//应为1秒、其中 worctrl.EVENT1 = 7

    // CC1101_Write (CC1101_WOREVT0、0x76);

    // CC1101_Write (CC1101_WORCTRL、0x78);

    CC1101_Write (CC1101_MCSM2、0x1c);//我认为对应14ms 的 Rx 超时

    // CC1101_Write (CC1101_MCSM1、0x10);//如果 RSSI <阈值、则为 CCA

    CC1101_Write (CC1101_MCSM0、0x18);

    CC1101_Write (CC1101_IOCFG2、0x06);

    // CC1101_Write (CC1101_IOCFG2、0x07);//接收

    // CC1101_Write (CC1101_IOCFG2、0x14);// RSSI >阈值

    // CC1101_Write (CC1101_IOCFG2、0x09);//清除通道

    CC1101_STRONG (CC1101_SWORRST);

    CC1101_STRONG (CC1101_SWOR);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我进行了测试、其中我对2.4kbps PHY 使用 SmartRF Studio 的建议设置、然后通过1s 唤醒间隔、12.5%占空比和-70dBm 的 CS 阈值启用了 WOR (用于测试目的)(请参阅数据表中的表32)。

    设置、代码如下所示:

    // Address Config = No address check 
    // Base Frequency = 867.999939 
    // CRC Autoflush = false 
    // CRC Enable = true 
    // Carrier Frequency = 867.999939 
    // Channel Number = 0 
    // Channel Spacing = 199.951172 
    // Data Format = Normal mode 
    // Data Rate = 2.39897 
    // Deviation = 5.157471 
    // Device Address = 0 
    // Manchester Enable = false 
    // Modulated = true 
    // Modulation Format = GFSK 
    // PA Ramping = false 
    // Packet Length = 255 
    // Packet Length Mode = Variable packet length mode. Packet length configured by the first byte after sync word 
    // Preamble Count = 4 
    // RX Filter BW = 58.035714 
    // Sync Word Qualifier Mode = 30/32 sync word bits detected 
    // TX Power = 0 
    // Whitening = false 
    // PA table 
    #define PA_TABLE {0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    
    static const registerSetting_t preferredSettings[]= 
    {
      {CC1101_IOCFG0,      0x06},
      {CC1101_FIFOTHR,     0x47},
      {CC1101_PKTCTRL0,    0x05},
      {CC1101_FSCTRL1,     0x06},
      {CC1101_FREQ2,       0x21},
      {CC1101_FREQ1,       0x62},
      {CC1101_FREQ0,       0x76},
      {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_TEST0,       0x09},
    };
    
    void main(void)
    {
        // Initialize MCU and peripherals
        initMCU();
    
        // Write radio registers
        registerConfig();
        
        uint8 writeByte;
        
        // WoR settings for 1 s wakeup interval, 12.5% duty cycle
        writeByte = 0x18; cc1101SpiWriteReg(CC1101_MCSM0,   &writeByte, 1);
        writeByte = 0x38; cc1101SpiWriteReg(CC1101_WORCTRL, &writeByte, 1);
        writeByte = 0x00; cc1101SpiWriteReg(CC1101_MCSM2,   &writeByte, 1);
        
        writeByte = 0xB3; cc1101SpiWriteReg(CC1101_AGCCTRL2, &writeByte, 1); // CS threshold = -70dBm
        
        writeByte = 0x69; cc1101SpiWriteReg(CC1101_IOCFG0, &writeByte, 1); // Debug signal to show when device is awake
        writeByte = 14;   cc1101SpiWriteReg(CC1101_IOCFG2, &writeByte, 1); // CS  signal (RSSI > -70 dBm)
        
        trxSpiCmdStrobe(CC1101_SWOR);
        
        while(1);
    }

    出于测试目的、我有一个发送器、每次按下按钮时传输约2s。

    您可以在图示的末尾看到、无线电每秒唤醒125ms。 每次传输2s 载波时、CS 信号将生效。

    根据您的描述、我了解您希望系统正常工作的方式。

    一旦您使用表征设置和严格的 CS 阈值、您就可以开始更改设置和阈值。

    在数据表中、我们仅提供2.4kbps 和250kbps PHY 的 CS 阈值设置、因此、如果您使用其他设置、则需要测试 以下参数的不同压缩值、以找到适合您应用的阈值:

    AGCCTRL2.MAX_LNA_GAIN

    AGCCTRL2.MAX_DVGA_GAIN

    AGCCTRL2.MAGN_TARGE

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这完全基于 RSSI 吗? 例如、如果我不使用 CC1101、而是868处的射频发生器、然后打开 CW 来复制 TX 突发、会执行相同的操作吗? 我只是因为 MDMCFG2仍然启用了30/32前导码匹配、还是忽略了配置中我没有发现的其他内容?  或者是将模式14用于 GDO 2上的 RSSI 输出的点、这将模拟图片中的 CS 信号。

    您的传输是否只是恒定的无限数据包长度1? 如果是这样、与生成器的非调制射频载波相比、它如何处理前同步码位等?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    载波检测信号(IOCFG2 = 14)不关心正在传输哪些数据。 它仅查看信号强度、并在 RSSI 高于设定的阈值时置为有效。

     您使用的 SYNC_MODE 不会影响 CS 信号。

    我通过发送具有长前导码(2s)的数据包和在给定时间段内发送未调制数据来测试代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我将在明天再次访问硬件时尝试进行测试

    我确实尝试过基本上做到这一点、但每次唤醒时、当 GP2设置为模式14时、我都会在 GP2上进行转换、无论我移动 MAGN_TARGET 的阈值或绝对/相对阈值是什么、但它肯定会与您的值具有不同的波特率和带宽。

    我只需要为任何广播发送小于1 FIFO 值的数据、因此如果它在2.4k 下可靠地工作、那么它就可以保持该状态

    ~会是我可以将 Rx 导通时间缩短多少(25%的时间内为 Δ t 15mA)可能过高、但如您所说、我将证明它可以首先有效、然后"调整"以尝试改善功耗