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:接收 Neptune R900数据包

Guru**** 2337880 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/1515269/cc1101-receiving-neptune-r900-packets

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

工具/软件:

大家好! 我在尝试使用芯片接收水表数据包时遇到了一些难题。

对于 RTL_433协议解析器的这种参考实现似乎很容易实现- https://github.com/NorthernMan54/rtl_433_ESP/blob/main/src rtl_433/devices/Neptune_r900.c

它是912Mhz 基频、OOK 调制。 协议本身是固定长度(12字节)的数据包

我通过 SmartRF 获得了该寄存器配置

静态常量寄存器 Set亭_t preferredSettings[]= 

 {CC1101_IOCFG0、     0x06}、
 {CC1101_FIFOTHR、    0x47}、
 {CC1101_PKTLEN、     0x0C}、
 {CC1101_PK_CTRL0、   0x04}、
 {CC1101_FSCTRL1、    0x06}、
 {CC1101_FREQ2、      0x23}、
 {CC1101_FREQ1、      0x13}、
 {CC1101_FREQ0、      0xB1}、
 {CC1101_MDMCFG4、    0xCA}、
 {CC1101_MDMCFG3、    0x83}、
 {CC1101_MDMCFG2、    0x37}、
 {CC1101_MDMCFG1、    0x00}、
 {CC1101_DEVIATN、    0x35}、
 {CC1101_MCSM0、      0x18}、
 {CC1101_FOCCFG、     0x16}、
 {CC1101_AGCCTRL2、   0x43}、
 {CC1101_WORCTRL、    0xFB}、
 {CC1101_FREND0     、0x11}、
 {CC1101_FSCAL3、     0xE9}、
 {CC1101_FSCAL2、     0x2A}、
 {CC1101_FSCAL1、     0x00}、
 {CC1101_FSCAL0、     0x1F}、
 {CC1101_TEST2、      0x81}、
 {CC1101_TEST1、      0x35}、
 {CC1101_TEST0、      0x09}、
};

我可以确认芯片保持在 RX 模式、但我没有在 GDO0上收到任何中断。

到目前为止、我已经确认:

- R900信号通过(使用 RTL_SDR 加密狗和相同的天线)

-在数据包中检测到的频率和调制与我的射频设置相匹配(或应该匹配)。

我还缺少什么?

谢谢!

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

    您好、Eugene、  

    我认为您缺少 src 位于 NorthernMan54/RTL_433_ESP··github 主目录的同步字配置:RTL_433_ESP/RTL_433/devices/Neptune_R900.c

    您可以填充这些值、或者在 SYNC1和 SYNC0寄存器中至少填充同步字的第一部分。  

    此致、

    Arthur

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

    您好 Arthur、感谢您的答复。 我在代码本身中提供了同步字、但为了清晰起见、我将所有内容都放入配置块中。 我可以观察到 RTL-SDR 软件狗+ RTL_433得到的信号刚好正常、而芯片似乎没有任何东西。 我已验证硬件和天线。

    static const registerSetting_t preferredSettings[]=
    {
      {CC1101_IOCFG0,      0x06},
      {CC1101_FIFOTHR,     0x47},
      {CC1101_SYNC1,       0x66},
      {CC1101_SYNC0,       0xA9},
      {CC1101_PKTLEN,      0x0D},
      {CC1101_PKTCTRL0,    0x04},
      {CC1101_FSCTRL1,     0x08},
      {CC1101_FREQ2,       0x23},
      {CC1101_FREQ1,       0x13},
      {CC1101_FREQ0,       0xB0},
      {CC1101_MDMCFG4,     0xAA},
      {CC1101_MDMCFG3,     0x43},
      {CC1101_MDMCFG2,     0x33},
      {CC1101_MDMCFG1,     0x02},
      {CC1101_DEVIATN,     0x40},
      {CC1101_MCSM0,       0x18},
      {CC1101_FOCCFG,      0x16},
      {CC1101_AGCCTRL2,    0x43},
      {CC1101_WORCTRL,     0xFB},
      {CC1101_FREND0,      0x11},
      {CC1101_FSCAL3,      0xE9},
      {CC1101_FSCAL2,      0x2A},
      {CC1101_FSCAL1,      0x00},
      {CC1101_FSCAL0,      0x1F},
      {CC1101_TEST2,       0x81},
      {CC1101_TEST1,       0x35},
      {CC1101_TEST0,       0x09},
    };

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

    您好、Eugene、

    我应该事先问过、您是否能够在 SmartRF Studio 7中接收数据包?

    一项有趣的测试是检查您是否甚至可以在连续 RX 模式下检测 Neptune 数据包的能量。

    此致、

    Arthur

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

    Arthur、您好!

    我认为我解决了这个问题,至少我得到了一些一致的17字节数据包。 这个问题与前言/同步字配置有关,我有它11 (匹配30/32位),但由于海王星传输只有16位-这注定是失败的。 通过更改 MDMCFG2以反映前导码/SYNC 应匹配15/16位-事情开始发生!

    谢谢!

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

    您好!  

    我回来时遇到了另一个挑战-我能够收到一些东西、但显然这不是我想要的。 我的当前寄存器配置为

    静态常量寄存器 Set亭_t preferredSettings[]=
    {{
    CC1101_IOCFG0、 0x06}、
    {CC1101_FIFOTHR、 0x47}、
    {CC1101_SYNC1、 0xA9}、
    {CC1101_SYNC0、 0x66}、
    {CC1101_PKTLEN、 R900_PACKET_SIZE}、
    {CC1101_PKTCTRL0、0x04}、
    {CC1101_FSCTRL1、 0x08}、
    {CC1101_FREQ2、 0x23}、
    {CC1101_FREQ1、 0x13}、
    {CC1101_FREQ0、 0xB0}、
    {CC1101_MDMCFG4、 0xAA}、
    {CC1101_MDMCFG3、 0x43}、
    {CC1101_MDMCFG2、 0x32}、
    {CC1101_MDMCFG1、 0x12}、
    {CC1101_DEVIATN、 0x40}、
    {CC1101_MCSM0、 0x18}、
    {CC1101_FOCCFG、 0x16}、
    {CC1101_AGCCTRL2、0x43}、
    {CC1101_WORCTRL、 0xFB}、
    {CC1101_FREND0、 0x11}、
    {CC1101_FSCAL3、 0xE9}、
    {CC1101_FSCAL2、 0x2A}、
    {CC1101_FSCAL1、 0x00}、
    {CC1101_FSCAL0、 0x1F}、
    {CC1101_TEST2、 0x81}、
    {CC1101_TEST1、 0x35}、
    {CC1101_TEST0、 0x09}、
    };
    
    

    因此、它似乎与部分前导码0xA9 0x66匹配、接收到的数据包包含0x69 0x65作为其前2字节、这符合 R900数据包解析器中定义的前导码(0x55,0x55,0x55,0xA9,0x66,0x69,0x65)  

    但这基本上是-其余数据似乎是垃圾的、RSSI 在接收到数据包后报告为0xDD。

    我有运行的与 RTL_SDR 兼容的 USB 软件狗  

    rtl_433 -vv -Y classic -f 912000000 -s 1m -R 228 -M 级-M 位-M 协议-Y autolevel -F log -F json

    这样就能够找到某些 R900数据包并正确解析它们、但 RL_433工具报告的原始数据与 CC1101上 FIFO 数据缓冲区中的任何数据都不匹配。

    我想知道是否有办法以某种方式"调试"这个问题? 我认为我不能"窥视"芯片本身接收到的原始信号。

     希望获得任何帮助/建议。

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

    您好、Eugene、

    这里的问题是0xA9 0x66本身是一个可怕的同步字(请参阅 (+)数学方法来计算 CC1101 WOR 的最佳同步字为0xD391 -/等。 RF (只读)论坛-/等... RF (只读)- TI E2E 支持论坛)、因此您可能会遇到很多误报。

    为了避免误报、您可以将 CC1101设置为接收固定长度的数据包(建议在 GitHub 代码中使用104位)。

    此致、

    Arthur

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

    谢谢,我知道这里的同步字不是最好的-但好吧,我没有选项。 我将 CC1101配置为具有固定的数据包长度输入。 我选择了60个字节来识别任何"重复"序列、因此我至少可以得到一些"稳定"的数据包、这些数据包代表了一个带有乱码编码的有效 R900数据包(位移位等)、但我无法发现任何重复的数据包。  同时、我的 RTL 软件狗能够可靠地接收来自水表的数据包。

    我想知道的是- R900解析器具有以下语句:

    传输从0xAA、0xAA、0xAA、0xAB、0x52、0xCC、0xD2的前导码开始
    但是、它基于"零"、 如果在位流的开头插入一个零位 、 前导码是: - 0x55,0x55,0x55,0x55,0xA9,0x66,0x69,0x65

    因此、"理论上"我应该使用0xAB、0x52而不是0xA9、0x66?  

    该"前导零位"是否会导致 CC1101也"移位"其余位流?

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

    再次嗨,我做了一些进一步的实验-采取了两个 CC1101芯片从同一批,将它们连接到 ESP32板,刷新相同的固件并同时启动(跟踪 ESP 时间戳在日志中)。

    我希望两个电路板都能产生相同的结果、但实际上它并不包含:



    板1: CC D2 实验 E5 我的超次元帝国55 C9 C9 E3 51 ae 6e 63 9c A3 33 A6 6c. AD 55 54 3e.

    板2: CC D2 CB 65 我的超次元帝国55 E9 C9 E3 51 ae 6c 63 9c A3 33 A6 7c. AD 55 54 3e.

    波特率似乎略有偏差、一些位会出现乱码。

    在这种情况下、我是否需要进行微调?

    我的寄存器配置、以防出现以下情况:

    静态常量寄存器 Set亭_t preferredSettings[]=  

     {CC1101_IOCFG0、   0x06}、
     {CC1101_FIFOTHR、   0x47}、
     {CC1101_SYNC1、    0xAB}、
     {CC1101_SYNC0、    0x52}、
     {CC1101_PKTLEN、   24}、
     {CC1101_PK_CTRL0、  0x04}、
     {CC1101_FSCTRL1、   0x08}、
     {CC1101_FREQ2、    0x23}、
     {CC1101_FREQ1、    0x13}、
     {CC1101_FREQ0、    0xB0}、
     {CC1101_MDMCFG4、   0xAA}、
     {CC1101_MDMCFG3、   0x43}、
     {CC1101_MDMCFG2、   0x32}、
     {CC1101_MDMCFG1、   0x12}、
     {CC1101_DEVIATN、   0x40}、
     {CC1101_MCSM0、    0x18}、
     {CC1101_FOCCFG、   0x16}、
     {CC1101_AGCCTRL2、  0x43}、
     {CC1101_WORCTRL、   0xFB}、
     {CC1101_FREND0   、0x11}、
     {CC1101_FSCAL3、   0xE9}、
     {CC1101_FSCAL2、   0x2A}、
     {CC1101_FSCAL1、   0x00}、
     {CC1101_FSCAL0、   0x1F}、
     {CC1101_TEST2、    0x81}、
     {CC1101_TEST1、    0x35}、
     {CC1101_TEST0、    0x09}、
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Eugene、  

    我几乎倾向于认为这个位误差可能是由带宽设置引起的。

    如果将其增加到200 KHz 会怎么样?

    此致、

    Arthur

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

    您好,感谢您的提示! 我尝试过、但基本上得到了相同的结果、没有太大的差异。 令人沮丧的是、我无法自行重现信号、因此它为我提供了一些有限的调试选项、因为我实际上必须等待这些数据传输发生。

    我现在所做的-将数据包的大小增加到60字节,只是为了观察是否有一些尾随数据-它似乎确实有一些东西。 例如,大多数数据包都有相当明显的间隙(序列00 00 00 ),它们形成了一些模式,这在不同的板间是一致的:

    电路板1:

    CC D2 df 65 A4 D8 E4 DE 31 C9 E3 53 4c 35 3c 6c 
    AA 37 7c 72 A7 8b 92 3e  00 00 00 00 00 00 00 00 00
    CC 29 fb 3f 10 03 fb 3f b2 dc 06 00 9c 34 40 3f
    00 00 00 00 30 5c fb 3f  00 00 00 00 00 00     

    电路板2:

    CC D2 dd E5 A4 D8 E5 4e 31 C9 E3 53 4e 3f 3c 6c 
    AA 33 76 32 A7 8b 92 3e  00 00 00 00 00 00 00 00
    CC 29 fb 3f 10 03 fb 3f A8 dc 06 00 9c 34 40 3f
    00 00 00 00 30 5c fb 3f  00 00 00 00 00 00     

    我不太确定该做什么,它看起来不像噪音或随机信号,但为什么2个相同的板接收的东西有几乎50%的重叠,不仅在数据,而且在位置-我真的很困惑这一点。

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

    您好、

    The signal myself

    实际上、这是您可以做的事情。 您可以尝试从 CC1101传输类似的数据包(小心、没有 TX 功率非常低的天线)、并比较使用该软件从 SDR 捕获的信号、例如:  

    GITHUB - Jopohl/URH:通用无线电黑客:像 Boss 一样研究无线协议

    并查看它可能的不同之处。

    此致、

    Arthur