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.

[参考译文] CC1200:LBT 算法将随机器件混淆

Guru**** 2535750 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1004002/cc1200-confused-random-part-by-lbt-algorithm

器件型号:CC1200

您好!

我对 LBT 实现感到困惑。  我的问题是、随机部分 始终相同、在空中的干扰消失后、时间持续为5ms。

根据 LBT 算法和 RSSI 进行以下设置:

CC120X_SYNC_CFG0        = 0x03

CC120X_SYNC_CFG1        = 0x40

CC120X_AGC_CFG1         = 0x11

CC120X_AGC_CFG0         = 0x94

CC120X_AGC_GAIN_ADJUST = 0x9D

CC120X_AGC_REF           = 0x25

CC120X_AGC_CS_THR       = 0xA2

CC120X_PKT_CFG2          = 0x10

CC120X_RNDGEN            = 0xFF

CC120X_IOCFG3             = 0x4F

CC120X_IOCFG2             = 0x59

如您所见:

绿色= IOCFG3的 CCA 状态

黄色=通过 IOCFG2测得的 PA

我在这里出了什么问题?

提前感谢。

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

    您好!

    您能否更详细地解释一下您希望它的行为方式?

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

    您好!  

    如用户指南 SWRU346B 第6.12章 b 段所述、b 我预期、在占用的通道释放后、伪随机时间 TPS 会有所不同。 在我的配置中、它不会这样做。 我始终得到相同的固定时间5ms。

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

    我无法再现您看到的内容。

    请尝试使用 SmartRF Studio 中的标准设置测试此操作。 我使用了38.4kbps 设置、并进行了如下修改:

    // Address Config = No address check 
    // Bit Rate = 38.4 
    // Carrier Frequency = 867.999878 
    // Deviation = 19.989014 
    // Device Address = 0 
    // Manchester Enable = false 
    // Modulation Format = 2-GFSK 
    // Packet Bit Length = 0 
    // Packet Length = 255 
    // Packet Length Mode = Variable 
    // RX Filter BW = 104.166667 
    // Symbol rate = 38.4 
    // Whitening = false 
    
    static const registerSetting_t preferredSettings[]= 
    {
      {CC120X_IOCFG2,            0x58},// LNA
      {CC120X_IOCFG0,            0x59},// PA
      {CC120X_IOCFG3,            17},  // CS
      {CC120X_SYNC_CFG1,         0xA9},
      {CC120X_MODCFG_DEV_E,      0x0B},
      {CC120X_PREAMBLE_CFG0,     0x8A},
      {CC120X_IQIC,              0xC8},
      {CC120X_CHAN_BW,           0x10},
      {CC120X_MDMCFG1,           0x42},
      {CC120X_MDMCFG0,           0x05},
      {CC120X_SYMBOL_RATE2,      0x8F},
      {CC120X_SYMBOL_RATE1,      0x75},
      {CC120X_SYMBOL_RATE0,      0x10},
      {CC120X_AGC_REF,           0x27},
      {CC120X_AGC_CS_THR,        0xEE},
      {CC120X_AGC_CFG1,          0x11},
      {CC120X_AGC_CFG0,          0x94},
      {CC120X_FIFO_CFG,          0x00},
      {CC120X_FS_CFG,            0x12},
      {CC120X_PKT_CFG2,          0x10},// LBT
      {CC120X_PKT_CFG0,          0x20},
      {CC120X_PKT_LEN,           0xFF},
      {CC120X_IF_MIX_CFG,        0x1C},
      {CC120X_TOC_CFG,           0x03},
      {CC120X_MDMCFG2,           0x02},
      {CC120X_FREQ2,             0x56},
      {CC120X_FREQ1,             0xCC},
      {CC120X_FREQ0,             0xCC},
      {CC120X_IF_ADC1,           0xEE},
      {CC120X_IF_ADC0,           0x10},
      {CC120X_FS_DIG1,           0x07},
      {CC120X_FS_DIG0,           0xAF},
      {CC120X_FS_CAL1,           0x40},
      {CC120X_FS_CAL0,           0x0E},
      {CC120X_FS_DIVTWO,         0x03},
      {CC120X_FS_DSM0,           0x33},
      {CC120X_FS_DVC0,           0x17},
      {CC120X_FS_PFD,            0x00},
      {CC120X_FS_PRE,            0x6E},
      {CC120X_FS_REG_DIV_CML,    0x1C},
      {CC120X_FS_SPARE,          0xAC},
      {CC120X_FS_VCO0,           0xB5},
      {CC120X_IFAMP,             0x09},
      {CC120X_XOSC5,             0x0E},
      {CC120X_XOSC1,             0x03},
      {CC120X_RNDGEN,            0xFF},// Enable Random number generator
    };

    我测试了3次、对于所有3种情况、我得到了不同的间隔(5、7.5和5.5ms)

    下面是我的测试代码 I:

    void main(void) {
    
        // Initialize MCU and peripherals
        initMCU();
    
        // Write radio registers
        registerConfig();
    
        createPacket(txBuffer);
    
        // Write packet to TX FIFO
        cc120xSpiWriteTxFifo(txBuffer, sizeof(txBuffer));
        
        trxSpiCmdStrobe(CC120X_SRX);
        
        // Wait for radio CS to be valid before strobing STX
        do{
          cc120xSpiReadReg(CC120X_RSSI0, &rssi0, 1);
        } while ((rssi0 & 0x02) != 0x02);
          
        trxSpiCmdStrobe(CC120X_STX);
        
        while(1);
    }

    BR

    Siri

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

    您好、Siri、thx 为我提供了支持。 我已经测试了上面的代码、只要我不使用 eWOR 功能、它就能在我的机器上正常工作。  我可以看到、只要激活了 eWor 计时器、CC120X_RNDGEN 寄存器就会被续流。 我可以在这里做什么?   

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

    如果我不知道您在代码中的具体操作、就无法回答这个问题。 您是否将 SRX 选通替换为 SWOR? 这将不起作用、因为对讲机需要处于 RX 模式才能评估信道是否可用。

    如果您只是对 RX 使用 WOR 模式、然后在 TX 之前使用常规 RX 模式(以评估通道)、请向我提供足够的条件(如果是)、以便我重现您看到的内容。

    Siri

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

    您好!

    默认情况  下、eWor 计时器由 SWOR 命令激活、我的系统等待 smart前导 码数据包。 当我需要在之间发送一些内容时、我以  与上面您的代码中所示的相同的方式启动 LBT。。。 然后,我看到 RNDGEN 没有生成任何随机数,并且在 carrier_sense 和 PA 之间总是得到相同的时序... 相反、当我不使用 SWOR 命令时、所有操作都可以与 LBT Algortihm 配合使用。

    它还可与上述 trxEB 和 youre 代码一起复制、在 trxSpiCmdbe (CC120X_SRX)之前、我插入 了 trxSpiCmdStrobe (CC120X_SWOR)。  CC120X_RNDGEN 不再产生任何随机数、看起来像是被自由化的。

    每次 在 LBT 之前重新开启 CC120X_RNDGEN 有助于使伪随机收听时间恢复到预期的效果!

    Alex

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

    当您使用 WOR 时、RNDGEN 似乎被禁用。 此外、RFEND_CFG0寄存器为我带来了一些问题。

    我使用从 SmartRF Studio 导出的 WOR 寄存器测试了代码、并启用了 LBT、就像在上一篇文章中一样。

    为了使 LBT 正常工作、我必须在启动正常 RX 之前重新启用 RNDGEN、并且我还必须将 RFEND_CFG0设置回0x00 (使用 WOR 时为0x09):

    void main(void) {
    
        // Initialize MCU and peripherals
        initMCU();
    
        // Write radio registers
        registerConfig();
    
        createPacket(txBuffer);
    
        // Write packet to TX FIFO
        cc120xSpiWriteTxFifo(txBuffer, sizeof(txBuffer));
        
        trxSpiCmdStrobe(CC120X_SCAL);
        
        trxSpiCmdStrobe(CC120X_SWOR);
        
        waitMs(1000);
        
        writeByte = 0x00;
        cc120xSpiWriteReg(CC120X_RFEND_CFG0, &writeByte, 1);
        
        writeByte = 0xFF;
        cc120xSpiWriteReg(CC120X_RNDGEN, &writeByte, 1);
     
        trxSpiCmdStrobe(CC120X_SRX);
        
        // Wait for radio CS to be valid before strobing STX
        do{
          cc120xSpiReadReg(CC120X_RSSI0, &rssi0, 1);
        } while ((rssi0 & 0x02) != 0x02);
          
        trxSpiCmdStrobe(CC120X_STX);
        
        while(1);
    }

    BR

    Siri