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.

[参考译文] CC1120:CC1120 -在不同数据速率下检测CC1101前导码

Guru**** 2770855 points

Other Parts Discussed in Thread: CC1101, CC1120, CC430F5137

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/616091/cc1120-cc1120---cc1101-preamble-detection-at-different-data-rate

部件号:CC1120
主题中讨论的其他部件:CC1101,, CC430F5137

您好,

我们有使用CC1120的网关集线器和使用CC1101的另一个设备。 CC1120已修改为在4.8 kpbs下运行(以前在38.4 下工作),cc1102也修改为在4.8kpbs下运行。 我们正在尝试实现这样一种逻辑:CC1120可以与两个CC1101通信(一个是4.8 kbps,另一个是38.4kbps)。  

我们计划使用前导码检测来实现此目的。 以4.8kbps运行的CAN CC1120检测以38.4 kbps速度来自传感器的前导码。

逻辑是在两个波特率之间连续移动,当检测到前导码时,锁定到该数据速率继续传输/接收,完成后继续移动。  

我正在从CC1120读取modem_status1寄存器,我注意到当在38.4 上传输的CC1101没有检测到前导码时十六进制值为13。  

从CC1101传输数据包时,我们需要手动将前导码添加到数据包中,还是在内部通过芯片完成。

谢谢你

库马尔

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

    你(们)好

    4.8 kbps的CC1120程序无法检测以38.4 kbps发送的前导码。

    使用CC1101时,使用建议的设置时会自动发送前导码。

    巴西

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于38.4 是4.8 的倍数,理论上,如果您发送同一个数据包的数量超过一个,您可以管理某种数据包。

    如果将CC1120设置为使用双同步,并且数据速率等于38.4 kbps,其中一个同步字源自4.8 kbps同步字(4.8 上的1位是38.4 上的8位)。 如果找到此同步字词,请将对讲机重新编程为4.8 kbps并接收第二个数据包。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请纠正我的理解,
    如果CC1120使用双同步模式(SyncCfg0.syncdmode=111)以38.4 kbps编程,则可以从4.8kbps接收部分同步字,一旦选中此选项,就会将数据设置重新编程为4.8 并继续。

    有没有使用双同步模式的例子可以让我理解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此www.ti.com/.../swra438.pdf 使用双同步。 我认为我们没有一个简单的例子。

    但使用SmartRF Studio可以轻松测试双同步。 请参阅 www.ti.com/.../swru295e.pdf中的6.7
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我正在尝试使双同步模式在CC1120与CC1101 (cc430f5137)上工作。

    唯一的区别是CC1120的RF代码基于mrfi代码。

    void Mrfi_SyncPinRxIsr (void)
    {
    uint8_t frameLen, frameLenByte;
    uint8_t whiteled=0;
    uint8_t rxBytes;
    
    /*我们应该仅在RX状态下接收此中断
    *如果RX仅在
    CCA期间为*某些内部mrfi处理(如-)打开,则永远不会接收此中断。
    *否则,情况是非常错误的。
    */
    MRFI_断 言( mrfiRadioState == MRI_RADIO_STATE _RX );/*------------------
    
    *获取RXBYTES
    *-----------------------
    */
    
    /*
    *从对讲机读取RXBYTES寄存器。
    RXBYTES寄存器的位描述:
    *位7 - RXFifo_overflow,如果发生接收溢出则设置
    *位6:0 - NUM_Bytes,接收FIFO中的字节数
    *
    *由于芯片错误,RXBYTES寄存器必须
    一行读取相同的值两次*,以保证准确的值。
    */
    {
    uint8_t rxBytesVerify;
    
    rxBytesVerify = mrfiSpiReadReg ( RXBYTES );
    
    Do
    {
    rxBytes = rxBytesVerify;
    rxBytesVerify = mrfiReadReg ( RXBYTES );
    }
    While (RxSpites != rxBytesVerify);
    
    
    
    /*-------------------------
    * FIFO为空?
    *--------
    */*
    
    
    在尝试读取前,查看接收FIFO是否为空。
    *即使触发了中断,FIFO也可能不为空。
    *如果启用了地址检查并且
    *收到了不匹配的数据包,则会发生这种情况。 在这种情况下,对讲机会自动从
    * FIFO中删除数据包。
    */
    如果(rxBytes ==0)
    {/*
    接收FIFO为空-不执行任何操作,跳至结束*/
    }
    否则
    {/*
    接收FIFO不为空,继续处理*/.....
    
    ....}
    


    我的注册设置是
    {IOCFG3,0x38},
    {IOCFG2,0x07},
    {IOCFG1,0xB0},
    {IOCFG0,0x15},
    {SYNC3,0xD3},
    {SYNC2,0x91},
    {SYNC1,0xD3},
    {SYNC0,0x91},
    {SYNC_CFG1,0x07},
    {SYNC_CFG0,0x1F},
    {deviation _M,0x48},
    {MODCFG_DEP_E,0x0D},
    {DCFILT_CFG,0x1C},
    //{前导码_CFG1,0x28},//测试
    {IQIC,0x00},
    {CHAN_BW,0x02},
    {MDMCFG0,0x05},
    {DRATE2,0x93},
    {AGC_CS_thr,0x19},
    {AGC_CFG1,0xA9},
    {AGC_CFG0,0xCF},
    {Fifo_CFG,0x78},
    {结算_CFG,0x03},
    {FS_CFG,0x12},
    {PKT_CFG0,0x20},
    {PA_CFG2,0x7F},
    {PA_CFG1,0x56},
    {PA_CFG0,0x7B},
    {PKT_LEN,0x7D},
    {if_mix _CFG,0x00},
    {FREQOFF _CFG,0x22},
    {FREQOFF _CFG,0x30},
    {FREQ2,0x6C},
    {FREQ1,0x9C},
    {FREQ0,0xCD},
    {FS_DIG1,0x00},
    {FS_DIG0,0x5F},
    {FS_CAL1,0x40},
    {FS_CAL0,0x0E},
    {FS_DIVTWO,0x03},
    {FS_DSM0,0x33},
    {FS_DVC0,0x17},
    {FS_PFD,0x50},
    {FS_PRE,0x6E},
    {FS_REG_DIV_CML,0x14},
    {FS_spare,0xAC},
    {FS_VCO0,0xB4},
    {XOSC5,0x0E},
    {XOSC1,0x03},


    尝试读取rxBytesVerify / rxBytes时,该值始终为零。 另外,对于此测试,我正在尝试以同一波特率进行通信(CC1120和CC1101/msp430f5137都5137都以38.4 波特率进行通信)。

    我是否在代码中遗漏了任何内容? 我们非常感谢您的帮助。

    谢谢你
    库马尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不使用这些示例中使用的基于中断的接收的任何原因: processors.wiki.ti.com/.../Perf_value_line_easylink
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此项目基于自定义板,其中CC1120与Stellaris以及现在使用gcc/openocd的TIVA MCU绑定。 因为mrfi占用的内存较少,所以我决定使用它。 我们是Stellaris的低内存,因为它还具有mbed TLS。

    现在,将所有内容迁移到EasyLink将是一件麻烦事。 基于mrfi的实现是否与EasyLink中的实现相同。

    如果您在 先前的POST中引用代码块(Mrfi_SyncPinRxIsr),则它是基于中断的接收。 在RSSI和LQI计算完成后代码块的末尾,有MRFI_RxCompleteISR (),这将调用MRFI_RECE, 它作为FreeRTOS队列发送到应用程序,因为这些不相关,我没有发布,而且由于rxBytes为零,它也可以访问ISR以上的功能。

    任何关于我做错的建议,以及为什么rxBytes为0。  

    库马尔