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.

[参考译文] CC1311P3:曼彻斯特编码、可变长度数据包和 CRC

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1121160/cc1311p3-manchester-encoding-variable-length-packets-and-crc

器件型号:CC1311P3

您好!

我正在尝试在 CC1311上实现旧的专有无线电协议。 该数据包采用  曼彻斯特编码(前导码+ syncword +有效负载+ CRC)、具有可变长度和 CRC。 我发现 这篇文章 解释了如何在像 CC1311这样的最新芯片上实现这种协议。

这个解决方案几乎是完美的、但是 CRC 不能 被自动检查。

我想知道是否可以自动检查 CRC。

 

提前感谢。

Alexandre Humbert

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

    您要在 CC1311上实现 RX 和 TX 还是仅实现 RX?

    请提供有关数据包外观(前导码字节数量、同步字是什么、长度在哪里、字节数、使用的 CRC 等)的详细信息

    如果您可以给出一个完整数据包的示例(计算出 CR)、我们可以查看是否可以接收该数据包并自动计算 CRC。

    Siri

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

    感谢您的回答。

    以下是一些附加信息:

    我们正在尝试实现 RX 和 TX。  

    有效载荷的最大长度为255字节。

    完整数据包的示例:

    编码前:

    00 00 00 00 00 00                        (5字节)      前导码

    CC CC CC CC CC CC CC CC CC               (4字节)    Syncword

    09.                         (1字节)        数据包长度

    00 12 34 12 34 20 00 00 00    (9字节)      有效载荷

    2C 35.                      (2字节)     CRC (MSB 优先、POL 0x1021、SEED 0x00)

    全帧:00 00 00 00 CC CC CC CC CC 09 00 12 34 12 34 20 00 00 2C 35

    曼彻斯特:0=>10和1=>01

    编码后:

    AA AA AA AA AA AA AA AA AA AA AA AA AA 5A 5A 5A 5A 5A 5A 5A 5A 5A AA 69 A9 A6 9A A9 A5 9A A5 9A A6 9A A6 AA AA AA AA AA AA AA AA AA AA AA AA A6 5A A5 99

    位:

    10101010 10101010 10101010 10101010 10101010 101010101010 10101010 10101010 10101010 10101010 10101010 10101010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 01011010 10101010 01101001 10101001 10100110 10100101 10011010 101001 10100110 10100101 10011010 10100110 10110110 10101010 10101010 10101010 10101010 10101010 10101010 10101010 101010101010 101010101010 10101010 10101010 10101010 10100110 01011010 10100101 10011001

    我们的目标是仅使用射频内核。

    亚历山大

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

    你(们)好

    我已经能够查看其中的 TX 部分、但没有查看 CRC 详细信息。

    这意味着我能够发送以下内容:

    长度 有效载荷 CRC
    09. 00 12. 34 12. 34 20. 00 00 00 80 0a
    0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
    1 0 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0
    AA AA AA AA AA AA AA AA AA AA 5A 5A 5A 5A 5A 5A 5A 5A AA 69 AA AA A9 A6 问题5. 9A A9 A6 问题5. 9A A6 AA AA AA AA AA AA AA 6A AA AA 66

    从上面可以看到、我一直在使用 CC13xx 的默认 CRC、而我的重点仅在于使 曼彻斯特器件正确(请参阅 数据包格式—SimpleLink CC13XX/CC26XX SDK 专有射频用户指南5.20.00文档 、了解如何更改 CRC)

    我使用了 rfPacketTX 示例作为起点、但使用了高级 TX 命令、而不是标准的 TX 命令。

    我的 TX 代码如下:

    static uint8_t packet[PAYLOAD_LENGTH + 2 + 1] = {0xCC, 0xCC, // Header (included to get the last part of the manchester encoded sync word
                                                     0x9, // Length
                                                     0x00, 0x12, 0x34, 0x12, 0x34, 0x20, 0x00, 0x00, 0x00}; // Payload
    
    /***** Function definitions *****/
    
    void *mainThread(void *arg0)
    {
        RF_Params rfParams;
        RF_Params_init(&rfParams);
    
        GPIO_setConfig(CONFIG_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
        GPIO_write(CONFIG_GPIO_GLED, CONFIG_GPIO_LED_OFF);
    
        GPIO_setMux(CONFIG_GPIO_GLED, IOC_PORT_RFC_GPO0);
    
        RF_cmdPropTxAdv.pktLen = PAYLOAD_LENGTH + 2 + 1; // Header (0xCCCC + length)
        RF_cmdPropTxAdv.pPkt = packet;
        RF_cmdPropTxAdv.startTrigger.triggerType = TRIG_NOW;
        RF_cmdPropTxAdv.pktConf.bUseCrc = 0x1;
    
        // Preamble
        RF_cmdPropRadioDivSetup.preamConf.nPreamBytes = 10; // 10 bytes
        RF_cmdPropRadioDivSetup.preamConf.preamMode = 1;    // 0xAA
    
        // Sync
        RF_cmdPropTxAdv.syncWord = 0x5A5A5A5A;              // First part of sync word (manually manchester encoded)
    
        // 2 bytes Header containing 0xCCCC
        RF_cmdPropTxAdv.numHdrBits = 16;
        RF_cmdPropTxAdv.pktConf.bCrcIncHdr = 0;
    
        /* Request access to the radio */
        rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);
    
        RF_cmdPropRadioDivSetup.formatConf.fecMode = 0xA;
    
        /* Set the frequency */
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
        while(1)
        {
            /* Send packet */
            RF_EventMask terminationReason = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTxAdv, RF_PriorityNormal, NULL, 0);
    
            /* Power down the radio */
            RF_yield(rfHandle);
    
            /* Sleep for PACKET_INTERVAL us */
            usleep(PACKET_INTERVAL);
        }
    }

    我已经核实 ,空运的内容符合上表。

    我没有看过 RX 端、因为我不知道这在射频方面能否很好地工作。

    由于 CC13xx 不对同步字进行曼彻斯特编码/解码、因此接收器需要查找0xA5A5A5A5作为同步字。

    由于您正在无线发送0x5A5A5A5A5A5A5A5A、之前为10 x 0xAA、因此您将看到对讲机有时会在正确的位置找到 SYNC、有时会进行位移。 不确定您是否能够以任何方式解决此问题。

    BR

    Siri