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:未检测到同步字

Guru**** 2553450 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/777162/cc1101-sync-word-not-detected

器件型号:CC1101

您好!

我在检测 CC1101的前导码时没有问题、但无法检测同步字。 我在 MCU 上为 GDO0 (0x08前导码 PQI)和 GDO2 (发送/接收0x06同步字)设置引脚中断。 当在另一个 CC1101上启动 TX (使用的配置与器件地址相同)时、GDO0置为有效、但此后不会发生任何情况。 GDO2引脚保持低电平、且接收 CC1101保持 RX 模式(设置为在接收到数据包时切换至空闲状态)。 RX 缓冲区也是空的(检查  RXBYTES 寄存器)。

首先、我使用了默认寄存器设置、并且仅修正了基本频率、数据速率、同步字、器件地址等寄存器(cc1101_433MHz_GFSK_manual.xml -请忽略文件名中的 GFSK、它是2-FSK)
然后、我使用 SmartRF Studio 生成寄存器设置(CC1101_433MHz_GFSK_SmartRF.xml)

行为几乎相同(同步字未检测到前导码)、但在另一个 CC1101进行传输时、dBm 更改为 CCA -40dBm (手动设置)、而仅改为 CCA -60dBm (SmartRF Studio 生成的设置)(发送 CC1101时均为-100dBm)。
另一个区别是 GDO0引脚(设置为检测到前导码)在手动设置下保持高电平(直到传输结束为止-传输结束后,互变线器保持在 TX 状态),但使用 SmartRF Studio 设置时快速降低。 这里的 GDO0引脚有哪些预期行为?

在链接的帖子中、我了解了同步和异步模式、建议同步字检测在异步模式下不起作用。 由于我 的 PKTCTRL0.PKT_format 设置为正常模式、同步字检测在这里是如何工作的? 无法找到有关正常模式的更多信息。

我不必坚持项目中的任何特定射频设置(如频率、调制等)。

因此、我想问一下为什么未检测到同步字。

谢谢、Zdenek

e2e.ti.com/.../cc1101_5F00_433MHz_5F00_GFSK_5F00_SmartRF.xml

e2e.ti.com/.../cc1101_5F00_433MHz_5F00_GFSK_5F00_manual.xml

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请提供有关您正在运行的硬件和正在运行的软件的信息。 您的设置没有任何问题。 我在 SmartRF Studio 中对其进行了测试(我在433MHz 下使用 CC1101EM。) 并且每个数据包都将 SYNC 发现信号置为有效。

    您需要使用 SmartRF Studio 生成设置。

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

    感谢您的快速回答。

    我有这样的器件(我有更多的器件、我也更改了它们以检查硬件故障):
    www.aliexpress.com/.../32295982608.html

    对于 SW、我在 STM32芯片上运行自定义代码。 发送看起来正常、我初始化 CC1101、填充 FIFO、然后开始发送。 我轮询状态字节、它会相应地改变状态(即使更改数据速率或有效载荷长度、传输时间也会相应地改变)。 RX CC1101侧的 RSSI 表示信号相当强、因此看起来确实不错。

    使用 SmartRF 设置时、我注意到 GDO 引脚(设置为0x08)上升时间非常短、然后变为低电平(与之前的设置不同)、直到我停止 TX 并再次启动它、再也不会变为高电平。 这是可以的吗? 这意味着前导码已结束、并且可能存在同步字(TX CC1101设置为在发送数据包后保持在 TX 中)? 了解读取前导码和检测到同步字时 GDO 引脚(值为0x08)的行为方式也会大有帮助。

    那么、您是说使用正常模式进行同步字检测没有问题?

    此致、
    Zdenek

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

    正常模式下的同步检测不是问题。

    我在 SmartRF Studio 中打开了设置文件、并将代码导出到 CC1101代码示例、如下所示:

    导出的设置如下所示:

    //地址配置=地址检查, 无广播
    //基频= 432.999817
    // CRC 自动刷新= false
    // CRC 使能= true
    //载波频率= 432.999817
    //通道编号= 0
    //通道间距= 199.951172
    //数据格式=正常模式
    //数据速率= 38.3835
    //偏差= 20.629883
    //器件地址 = 2
    //曼彻斯特启用= false
    //调制= true
    //调制格式= GFSK
    // PA 斜升= false
    //数据包长度= 255
    //数据包长度模式=可变数据包长度模式。 同步字后由第一个字节配置的数据包长度
    //前导码计数= 4
    // RX 滤波器带宽= 101.562500
    //同步字限定器模式= 30/32检测到同步字位
    // TX 功率= 0
    // Whitening = false
    // PA 表
    #define PA_table{0x60、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00}
    
    static sett preferredSettings[]=
    {
    CC1101_IOCFG2、 0x06}、
    {CC1101_IOCFG0、 0x08}、
    {CC1101_FIFOTHR、 0x47}、
    {CC1101_PKTCTRL1、0xC5}、
    {CC1101_PKTCTRL0、0x05}、
    {CC1101_ADDR、 0x02}、
    {CC1101_FSCTRL1、 0x06}、
    {CC1101_FREQ2、 0x10}、
    {CC1101_FREQ1、 0xA7}、
    {CC1101_FREQ0、 0x62}、
    {CC1101_MDMCFG4、 0xCA}、
    {CC1101_MDMCFG3、 0x83}、
    {CC1101_MDMCFG2、 0x13}、
    {CC1101_DEVIATN、 0x35}、
    {CC1101_MCSM1、 0x32}、
    {CC1101_MCSM0、 0x18}、
    {CC1101_FOCCFG、 0x16}、
    {CC1101_AGCCTRL2、0x43}、
    {CC1101_WORCTRL、 0xFB}、
    {CC1101_FSCAL3、 0xE9}、
    {CC1101_FSCAL2、 0x2A}、
    {CC1101_FSCAL1、 0x00}、
    {CC1101_FSCAL0、 0x1f}、
    {CC1101_TEST2、 0x81}、
    {CC1101_TEST1、 0x35}、
    {CC1101_TEST0、 0x09}、
    }; 

    我必须在代码(CC1101_Easy_link_TX.c)中更改的唯一内容是 createPacket 函数。 这是因为您已经启用了地址过滤、所以我添加了地址到数据包中:

    静态空 createPacket (uint8 txBuffer[]){
    
    txBuffer[0]= PKTLEN; //长度字节
    TxBuffer[1]= 0x02; // ADDR
    txBuffer[2]=(uint8)(packetCounter >> 8); // packetCounter 的 MSB
    txBuffer[3]=(uint8) packetCounter; // packetCounter 的 LSB
    
    //用随机字节填充缓冲区的其余部分
    对于(uint8 i = 4;i <(PKTLEN + 1);i++){
    txBuffer[i]=(uint8) rand();
    }
    } 

    BR

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您提供代码和导出。 仍然在努力进行同步字检测、其他一切似乎都正常。
    只有一个问题... 如果数据包都正确发送、那么 GDO 管脚在设置为0x08时应如何工作? 一旦接收到前导码并且处理了数据包的另一部分(同步字)、它是否会变为低电平? 还是其他一些东西会使引脚变为低电平?

    感谢您的帮助、

    Zdenek
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    (笑声) 和发射阶段(正常模式)... 我只需设置寄存器、填入 TX FIFO 并使用 STX 命令探针开始传输、就够了吗? 它会自动传输前导码、同步字和数据包的其余部分?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在前导码期间应将编程为0x08的 GDO 置为有效、并在 SYNC 字出现时变为低电平。

    您发送和接收数据包所需的所有步骤将在我提到的代码示例中找到。

    TX:
    初始化 MCU
    初始化对讲机(重置对讲机 AD 配置设置)
    将数据包写入 TX FIFO:使用这些设置、您需要先写入长度字节、然后在其余有效载荷之前写入 ADDR (0x02)
    选通 STX
    等待 GDO2上的下降沿中断(IOCFG2 = 0x06)

    有效的 TX 数据包可以是:0x06、0x02、0x01、0x02、0x03、 0x04、0x05 (其中0x06是长度字节、第一个0x02是地址)

    RX:
    初始化 MCU
    初始化无线电
    Strobe SRX
    等待 GDO2上的下降沿中断(IOCFG2 = 0x06)
    检查数据是否实际放入 FIFO 中(未过滤掉地址或长度过滤的费用)
    读取 RX FIFO

    Siri
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Siri、
    我使用的 CC1101板调谐为868MHz、而不是以前的433MHz、因为 SmartRF Studio 中只有868MHz 版本的预设、但仍然运行得很奇怪。 然后、我找到了一个测试代码、在传输期间经常轮询发送 CC1101。 我用它来确认它经过了它应该进行的所有状态。
    当我删除该轮询代码时、它开始像一个魅力一样工作。
    非常感谢您的帮助、至少我可以确保我正确执行 TX/RX。 我以前也不知道我需要使用 SmartRF Studio 来生成寄存器值。

    此致、
    Zdenek