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.

[参考译文] CC1310:从射频内核检索 RSSI

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1269725/cc1310-retrieving-rssi-from-rf-core

器件型号:CC1310

您好!

我已经对标题与此相同的锁定线程进行了进一步调查、 尽管我仍然无法重现 Siri 取得的成功(即使她使用了我自己的设置)、但我已复制了 她建议的代码流程、并拥有更多信息、希望能够帮助您确定我的设置正在进行哪些操作。

将 RF Rx 命令布置到 RF 内核时、我可以看到、就像 Siri 一样、RSSI 最初是无效的( -128 )。 但是、大约 1.5毫秒 稍后、开始报告有效的 RSSI 值。 当 另一个对讲机发射时、报告的 RSSI 值"跳转"至、例如 80dBm ,正如我所期望的。 问题仍然是, 一旦回叫被输入,报告的 RSSI 值返回到无效( -128 )。

我怀疑这是因为我只发布了一个 RF Rx 命令-射频队列是空的、否则我不知道下一个传输的时间、是 Rx 还是 Tx 或者那个传输的可能时长。 回叫发生时、我看到  IRQ_RX_ENTRY_DONE 和  IRQ_LAST_COMMAND_DONE 同一回叫中。

  1. 是否空队列导致射频内核执行垃圾收集?
  2. 如果是这种情况、您能否建议一个 简单的权变措施-即最好不需要我添加的权变措施、然后将"虚拟"命令刷新到射频内核、以防止它丢弃数据
  3. 无论原因如何、  rf_cmdRxHS.pOutput.lastRssi 值为零? 我希望始终在射频内核中进行任何垃圾收集之前填充此文件。

更多信息、请参阅随附的图片。

TIA、

Sean。

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

    Sean、您好!

    关于我回答过的另一个线程、你是否尝试过用 bAppendRssi 将 RSSI 附加到数据包中? 它甚至是您的应用中的选项吗?

    如果这对您有用、请告诉我。

    此致、

    亚瑟

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

    Arthur、您好!

    非常感谢这种迅速的反应。

    RFC_CMD_HS_RX_s  (请参阅./simplelink_cc13x0_sdk_4_20_02_07\source\ti\devices\cc13x0\driverlib\rf_hs_cmd.h)不提供 布阿彭德罗斯 不幸的是,这不是一个选择。

    TIA、

    Sean。

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

    Sean、您好!

    我的错。

    但是、似乎 RSSI 被自动添加到 RFC_CMD_HS_RX_s 的状态字段、您可以使用以下结构对其进行解码: http://downloads.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_20_01_08/exports/tirtos_full_2_20_01_08/products/cc13xxware_2_04_02_17240/doc/driverlib/structrfc__hs_rx_status__s.html

    此致、

    亚瑟

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

    Arthur、您好!

    再次感谢您很快回来与我联系。

    很遗憾、状态字段不会自动添加到  RFC_CMD_HS_RX_s 结构。 为此、您需要使用 bAppendStatus 这对我来说是无效的。 请参阅  您添加了评论的 e2e.ti.com/.../4808697

    解决这个问题的唯一方法似乎是先解决另一个问题(在上述链接中)、我今天将讨论这个问题并向您报告。

    此致、

    Sean。

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

    Arthur、您好!

    现在解决了  bAppendStatus 在发出 https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1269597/cc1310-bappendstatus-for-rfc_cmd_hs_rx_s/4808697#4808697后、射频内核会报告额外返回了两个字节以及接收到的数据。 但是、当我检查这些字节时、它们都是 0x00 请参阅随附的图像 ,其中进行了解释。

    这与我在上面提到的所有其他发现是一致的;  rf_cmdRxHS.pOutput.lastRssi 始终读取 0x00 rf_getRssi()  当接收正在进行时返回有效值、恢复到 -128 立即执行 Ping 操作。

    无论我使用哪种方法检索 RSSI、我都会看到一致的图片。

    TIA、

    Sean。

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

    Arthur、您好!

    请参阅以下随附的图像、其中显示了此类行为的更多内容、  b 应用时间戳 和  rf_cmdRxHS.pOutput.timestamp 此外(即 NUM_APTERD_BYTES = 6)、可以看到其正常工作。

    我看到的问题完全与 RSSI 有关。

    有几个想法:

    1. 我使用的是 DATA_ENTRY_TYPE_PTR -这是否相关? 我无法使用任何其他数据类型。
    2. 如果覆盖相关、请参阅我最近发布的另一篇文章、其中详细介绍了我的所有设置:  e2e.ti.com/.../4808311

    TIA、

    Sean。

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

    Arthur、您好!

    我今天对这件事做了进一步的调查 ,取得了一些成功,但我需要你解释为什么我看到我是什么,请。

    我决定尝试使用 bUseCrc 并最终发现、  RFC_hsRxStatus_s 确实会附加到我的数据(因此我现在可以看到良好的 RSSI 字节)、但不会像我预期的那样立即附加。 实际上、我在我的负载后看到了两个 NULL 字节(可以从我之前附上的图像中看到)、 后面跟着的是我请求的附加字节。

    1. 为什么这些 NULL 字节出现在我的数据的末尾?
    2. 他们会一直留在那里,还是在某些情况下不在那里?
    3. 我有 bAppendStatus b 包括 Crc bAppendTimeStamp 。 在我的有效载荷后、它们的显示顺序是怎样的?
    4. 对于问题3中提到的设置、我最初将  附加的字节数 2 (状态)+ 4 (时间戳)+ 2 (CRC)= 8 但这失败了、导致  rf_cmdRxHs.pOutput -> nRxBufFull 。 我找不到任何有关以下项目的 CRC 大小的文档  RFC_CMD_HS_RX_s 所以、我认为它可能是一个32位 CRC、 附加的字节数  至  2  (状态)+  4  (时间戳)+  4 (CRC)=  10.相反,一切都能正常工作,但我发现 CRC 实际上是一个16位的 CRC。 这里发生了什么?
    5. 对于使用另一个主题控制这个线程、但对于为哪个数据计算 CRC、我们深表歉意。  RF_cmdRxHS ? 我的数据流为  44048300000000000001FEFEFEFEFEFEFE80 (按十六进制、非 ASCII 格式)和我看到的2个字节、其结果为 b 包括 Crc 远近 0x193E 。 您能否解释一下、因为我的计算结果与此不符? 报告的附加 CRC 字节是接收射频内核在接收损坏的数据包时计算得出的字节还是发射射频内核在传输正确的数据包时计算出的字节? CRC 是仅基于 DataEntry 有效载荷计算的、还是同步字、前导码等?

    TIA、

    Sean。

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

    Sean、您好!

    您可能已经注意到、高速模式没有详细记录、因此我需要一些时间才能得出所有这些答案、但我明天会回来与您讨论。

    但到目前为止,我对第三和第四个问题有一个答案,其次序似乎如下:

    1. CRC (4字节)
    2. 状态(2个字节)
    3. 时间戳(4字节)

    您认为 CRC 实际上可能是16位、可以给我举个例子吗?

    此致、

    亚瑟

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

    Arthur、您好!

    感谢您的努力。

    我认为 CRC 是16位的原因有两个;一个是假设、另一个是基于证据的:

    1. (假定)-我知道的唯一 CRC 讨论是这个、其中涉及16位和8位 CRC (而不是32位 CRC):  https://software-dl.ti.com/simplelink/esd/simplelink_cc13x0_sdk/4.10.02.04/exports/docs/proprietary-rf/proprietary-rf-users-guide/proprietary-rf/packet-format.html
    2. (证据)-当我"打印"(通过数字范围)我请求的附加字节的值(状态、CRC、时间戳)时、如果我认为 CRC 为16位、我可以考虑除 NULL 字节前导对以外的所有内容。 这就是说:
      1. 当我在 RF 路径中添加和移除衰减时、一个字节线性跟踪真实 RSSI
      2. 当发生 CRC 错误时(即设置 bCrcErr)、其相邻字节设置为0x01
      3. 每次接收(发送不同的有效载荷数据)时、两个(不是四个)字节都是随机数-即与 CRC 一致。
      4. 4字节、当被视为完整单元时、值会随时间线性增加(即时间戳行为)
      5. 随附的图像最能说明这一点。

    请注意、两个 NULL 字节是存在的、即使没有将 bUseCrc b 包括 Crc ,因此不能是例如,CRC 是一个4字节字段,但只填充了两个字节-实际上,CRC 确实是一个2字节字段。

    此致、

    Sean。

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

    Sean、您好!

    我明白了。 它似乎与实现不匹配、因此我必须核实这一点。

    HS_CMD 有自己的数据包格式、因此它不会遵循您共享的数据包格式。

    我下周会再和您讨论这方面的内容。

    在平均时间中、您是否可以选择增加 rxEntry 数据包并尝试检查任何可能有意义的尾随字节?

    此致、

    亚瑟

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

    Sean、您好!

    我确实验证了 CRC 似乎显示为16位1、并且偏移似乎根据 B 瓦尔伦 配置。

    虽然我还没有明确的解释,但我认为它是与附加位的总长度有关的。

    希望我们能尽快进入演示的最底层。

    此致、

    亚瑟

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

    Arthur、您好!

    感谢您继续学习本课程。

    我将 NUM_APPLATD_BYTES (根据您的请求)增加了4个并"打印"了这些字段-我只看到4个结尾的 NULL 字节、所以看起来射频内核实际上是在使用16位 CRC (您现在已经确认了-谢谢) -没有"隐藏"的跟踪数据,我无法访问。 请参阅随附的 ,唯一剩下的秘密就是夹在用户有效载荷末尾和请求的附加字节之间的2个 NULL 字节。

    我想知道 NULL 字节是否是射频内核将其输出填充到最近的4字节边界的结果、这显然很关键、正如所有 TI 示例中的以下必要代码所示:

    #define RF_QUEUE_QUEUE_ALIGN_PADDING(length)  ((4 - (length % 4)) % 4) // Padding offset

    然后使用这个函数定义射频数据条目队列的维度:

    #define RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(numEntries, dataSize, appendedBytes)                                                    \
    (numEntries*(RF_QUEUE_DATA_ENTRY_HEADER_SIZE + /* dataSize + */ appendedBytes + RF_QUEUE_QUEUE_ALIGN_PADDING(RF_QUEUE_DATA_ENTRY_HEADER_SIZE + /* dataSize + */ appendedBytes)))

    到目前为止、我认为这并不相关的原因是我使用 DATA_ENTRY_TYPE_ptr、 数据有效负载本身并不驻留在存储器中、包含射频数据条目队列-我假设只有 后者需要仔细的4字节边界对齐。 这一假设是错的吗?

    下面总结一下我需要帮助的方面:

    1. 2个 NULL 字节的说明
    2. 了解 CRC 多项式、种子、XORing 以及计算该多项式的字节、理想情况下使用示例(我在之前的文章中指出的数据包可能是完美的)

    TIA、

    Sean。

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

    Sean、您好!

    如果需要、我们实际上可以将 CRC 配置为32位。 我认为在某些时候向您提供的设置中可能会出现混音。

    在我继续确定 CRC 设置之前、您能否确认您希望我在以下方面检查的数据包?

    uint8_t hsm_packet[] = {0x44, 0x04, 0x83, 0x00,
                             0x00, 0x00, 0x00, 0x00,
                             0x00, 0x01, 0xFE, 0xFE,
                             0xFE, 0xFE, 0xFE, 0x80};

    此致、

    亚瑟

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

    我没有通读这里的所有帖子、但想提几件事。

    常规高速模式(1.5Mbps)使用 正常的传播 API、而不是 HSM API。 这适用于4Mbps 设置。

    当读取 RSSI (接收到的信号强度)时、对讲机必须处于激活模式。 在回调中读取 RSSI 意味着当对讲机不在 RX 中时、您正在尝试读取 RSSI、因此该值无效。

    Siri

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

    Arthur、您好!

    感谢确认。 是的、这就是我想作为示例的用户负载。

    如果我的 CC1310可针对32位 CRC 进行配置、这是理想情况、因为这将大大降低误报的可能性。

    TIA、

    Sean。

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

    尊敬的 Siri:

    感谢您提供的信息。 这与您发送给我的示例相符、我在 回调之前发现了返回的有效 RSSI 值、如你所说。 但是、为什么它  RFC_CMD_HS_RX_s.pOutput.lastRssi 总是无效(或为零、我不记得了)-肯定应该在导致填充所有其他 RFC_hsRxOutput_s 字段的 RX 活动期间填充? 有些地方仍然很糟糕。

    此外,我还可以看到 Arthur 是如何感到困惑的,如果是这种情况的话- RFC_ HS RxOutput_s 在 RF_ HS _cmd.h;很容易将"hs"与 HSM 相混淆、我经常不得不提醒自己这是不同的。

    再次感谢您的指导、

    Sean。

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

    您好,克拉克

    这里有很多不同的帖子引用,所以我仍然对你实际要做什么和你在哪里看到问题感到困惑。

    使用1.5Mbps PHY 时的 RSSI 是否就是问题所在?  

    您正在使用哪个 API?

    Siri

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

    为了验证 RSSI 是否正常、我使用1.5Mbps GHS PHY 和4Mbps PHY 测试了这一点。

    我在这两个测试中都使用了 HS API。 我认为可以同时使用1.5 Mbps 的标准 PROP API、但我对两者使用了相同的 API。

    以下设置和代码:

    设置:

    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(driverlib/rf_mailbox.h)
    #include DeviceFamily_constructPath(driverlib/rf_hs_mailbox.h)
    #include DeviceFamily_constructPath(driverlib/rf_common_cmd.h)
    #include DeviceFamily_constructPath(driverlib/rf_hs_cmd.h)
    #include <ti/drivers/rf/RF.h>
    #include DeviceFamily_constructPath(rf_patches/rf_patch_mce_hsp_4mbps.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_rfe_hsp_4mbps.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_mce_ghs.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_rfe_ghs.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_ghs.h)
    #include "smartrf_settings.h"
    
    RF_Mode RF_prop_hsp_4mbps =
    {
        .rfMode = RF_MODE_PROPRIETARY_SUB_1,
        .cpePatchFxn =  0,
        .mcePatchFxn =  &rf_patch_mce_hsp_4mbps,
        .rfePatchFxn =  &rf_patch_rfe_hsp_4mbps,
    };
    
    RF_Mode RF_prop_ghs =
    {
         .rfMode       =  RF_MODE_PROPRIETARY_SUB_1,
         .cpePatchFxn  =  &rf_patch_cpe_ghs,
         .mcePatchFxn  =  &rf_patch_mce_ghs,
         .rfePatchFxn  =  &rf_patch_rfe_ghs,
    };
    
    // Overrides for CMD_RADIO_SETUP
    uint32_t shapeovr[] = {0x00000000, 0x00000000, 0x00000000, 0x12010000, 0x72685C43, 0x8986817A};
    
    uint32_t pOverrides_hsp_4mbps[] =
    {
         MCE_RFE_OVERRIDE(1,0,0,1,0,0),
         ADI_HALFREG_OVERRIDE(0,61,0xF,0x0),
         ADI_REG_OVERRIDE(1,4,0x9F),
         ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),
         HW_REG_OVERRIDE(0x4038,0x003A),
         HW_REG_OVERRIDE(0x4020,0x7F00),
         HW_REG_OVERRIDE(0x4064,0x0040),
         0x000604A3,
         0xB1070503,
         0x05330523,
         0x0A480583,
         0x7AB80603,
         0x00108463,
         0x02010403,
         0x04B00243,
         0x00038883,
         0xC0040031,
         (uint32_t) &shapeovr[0],
         0xC0040021,
         (uint32_t) (0x00000035),
         0x000388A3,
         HW_REG_OVERRIDE(0x50B4,0x6666),
         HW_REG_OVERRIDE(0x50B8,0x000C),
         (uint32_t)0xFFFFFFFF,
    };
    
    // Overrides for CMD_PROP_RADIO_DIV_SETUP
    uint32_t pOverrides_ghs[] =
    {
        // PHY: Use MCE RAM patch, RFE RAM patch
        MCE_RFE_OVERRIDE(1, 0, 0, 1, 0, 0),
        // Rx: Set anti-aliasing filter bandwidth to Maximum
        ADI_HALFREG_OVERRIDE(0,61,0xF,0x0),
        // Synth: Set recommended RTRIM to 7
        HW_REG_OVERRIDE(0x4038,0x0037),
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4020,0x7F00),
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4064,0x0040),
        // Synth: Set Fref to 4 MHz
        (uint32_t)0x000684A3,
        // Synth: Configure fine calibration setting
        (uint32_t)0xC0040141,
        (uint32_t)0x0533B107,
        // Synth: Set loop bandwidth after lock
        (uint32_t)0xA480583,
        (uint32_t)0x7AB80603,
        // Synth: Configure VCO LDO (in ADI1, set VCOLDOCFG=0x9F to use voltage input reference)
        ADI_REG_OVERRIDE(1,4,0x9F),
        // Synth: Configure synth LDO (in ADI1, set SLDOCTL0.COMP_CAP=1)
        ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),
        // Rx: Set LNA bias current trim offset to 3
        (uint32_t)0x00038883,
        // Rx: Set RSSI offset to adjust reported RSSI
        (uint32_t)0x00FB88A3,
        // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering
        (uint32_t)0x02010403,
        // Synth: Configure extra PLL filtering
        (uint32_t)0x00108463,
        // Synth: Increase synth programming timeout (0x04B0 RAT ticks = 300 us)
        (uint32_t)0x04B00243,
        //Configure thershold for Sync word detection
        HW_REG_OVERRIDE(0x5104,0x302B),
        //Set FIFO threshold
        (uint32_t) 0x002C82C3,
        (uint32_t) 0x002882D3,
        // Rx: Do not freeze RSSI on sync found event
        HW_REG_OVERRIDE(0x6084,0x25F1),
        // ****PA Ramping overrides
        HW_REG_OVERRIDE(0x6088,0x4121),
        HW_REG_OVERRIDE(0x608C,0x0A12),
        // ****Length of CW tone
        HW_REG_OVERRIDE(0x52B0,0x00F0),
        // DC estimation
        HW_REG_OVERRIDE(0x51F8,0x0F90),
        //Zero IF in TX
        (uint32_t) 0x00000343,
        // TX power override
        // Tx: Set PA trim to max (in ADI0, set PACTL0=0xF8)
        ADI_REG_OVERRIDE(0,12,0xF8),
        // End Override
        (uint32_t)0xFFFFFFFF,
    };
    
    // CMD_RADIO_SETUP
    rfc_CMD_RADIO_SETUP_t RF_cmdRadioSetup_hsp_4mbps =
    {
         .commandNo = CMD_RADIO_SETUP,
         .status = 0x0000,
         .pNextOp = 0x00000000,
         .startTime = 0x00000000,
         .startTrigger.triggerType = 0x0,
         .startTrigger.bEnaCmd = 0x0,
         .startTrigger.triggerNo = 0x0,
         .startTrigger.pastTrig = 0x0,
         .condition.rule = 0x1,
         .condition.nSkip = 0x0,
         .mode = 0x05,
         .loDivider = 5,
         .config.frontEndMode = 0x0,
         .config.biasMode = 0x1,
         .config.bNoFsPowerUp = 0,
         .txPower = 0x23F,
        .pRegOverride = pOverrides_hsp_4mbps,
    };
    
    // CMD_PROP_RADIO_DIV_SETUP
    rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_cmdPropRadioDivSetup_ghs =
    {
        .commandNo = 0x3807,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .modulation.modType = 0x1,
        .modulation.deviation = 600,
        .symbolRate.preScale = 8,
        .symbolRate.rateWord = 262144,
        .rxBw = 48,
        .preamConf.nPreamBytes = 0x6,
        .preamConf.preamMode = 0x1,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 9,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0xA63F,
        .pRegOverride = pOverrides_ghs,
        .centerFreq = 0x0364,
        .intFreq = 0x8000,
        .loDivider = 0x05,
    };
    
    // CMD_FS
    rfc_CMD_FS_t RF_cmdFs =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .frequency = 0x0364,
        .fractFreq = 0x0000,
        .synthConf.bTxMode = 0x0,
        .synthConf.refFreq = 0x0,
        .__dummy0 = 0x00,
        .__dummy1 = 0x00,
        .__dummy2 = 0x00,
        .__dummy3 = 0x0000,
    };
    
    // CMD_RX_HS
    rfc_CMD_HS_RX_t RF_cmdRxHS =
    {
        .commandNo = CMD_HS_RX,
        .status = 0x0000,
        .pNextOp = 0x00000000,
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0,
        .pktConf.bUseCrc = 1,
        .pktConf.bVarLen = 1,
        .pktConf.bRepeatOk = 0,
        .pktConf.bRepeatNok = 0,
        .pktConf.addressMode = 0,
        .rxConf.bAutoFlushCrcErr = 0,
        .rxConf.bIncludeLen = 1,
        .rxConf.bIncludeCrc = 0,
        .rxConf.bAppendStatus = 0,
        .rxConf.bAppendTimestamp = 0,
        .maxPktLen = 0,
        .address0 = 0,
        .address1 = 0,
        .__dummy0 = 0,
        .endTrigger.triggerType = 1,
        .endTrigger.bEnaCmd = 0,
        .endTrigger.triggerNo = 0,
        .endTrigger.pastTrig = 0,
        .endTime = 0,
        .pQueue = 0,
        .pOutput = 0,
    };
    
    // CMD_TX_HS
    rfc_CMD_HS_TX_t RF_cmdTxHS =
    {
         .commandNo = 0x3841,
         .status = 0x0000,
         .pNextOp = 0x00000000,
         .startTime = 0x00000000,
         .startTrigger.triggerType = 0x0,
         .startTrigger.bEnaCmd = 0x0,
         .startTrigger.triggerNo = 0x0,
         .startTrigger.pastTrig = 0x0,
         .condition.rule = 0x1,
         .condition.nSkip = 0x0,
         .pktConf.bFsOff = 0x0,
         .pktConf.bUseCrc = 0x1,
         .pktConf.bVarLen = 0x1,
         .pQueue = 0,
    };
    

    TX 代码:

    /*
     * Copyright (c) 2019, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /***** Includes *****/
    /* Standard C Libraries */
    #include <stdlib.h>
    #include <unistd.h>
    
    /* TI Drivers */
    #include <ti/drivers/rf/RF.h>
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/pin/PINCC26XX.h>
    
    /* Driverlib Header files */
    #include DeviceFamily_constructPath(driverlib/rf_prop_mailbox.h)
    
    /* Board Header files */
    #include "Board.h"
    #include "smartrf_settings/smartrf_settings.h"
    
    #include "RFQueue.h"
    
    /***** Defines *****/
    
    
    /* Packet TX Configuration */
    #define PAYLOAD_LENGTH          300
    #define DATA_ENTRY_HEADER_SIZE  8               // Constant header size of a Generic Data Entry
    #define MAX_LENGTH              PAYLOAD_LENGTH  // Set the length of the data entry
    #define NUM_DATA_ENTRIES_TX     1
    #define NUM_APPENDED_BYTES_TX   0
    #define NUMBER_OF_PACKETS       5
    
    /***** Prototypes *****/
    
    /***** Variable declarations *****/
    static RF_Object rfObject;
    static RF_Handle rfHandle;
    
    /* Pin driver handle */
    static PIN_Handle ledPinHandle;
    static PIN_State ledPinState;
    
    static uint8_t *pPacket;
    
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_ALIGN (txDataEntryBuffer, 4);
    static uint8_t
    txDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES_TX,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES_TX)];
    #elif defined(__IAR_SYSTEMS_ICC__)
    #pragma data_alignment = 4
    static uint8_t
    txDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES_TX,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES_TX)];
    #elif defined(__GNUC__)
    static uint8_t
    txDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES_TX,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES_TX)]
                                                      __attribute__((aligned(4)));
    #else
    #error This compiler is not supported.
    #endif
    
    static dataQueue_t dataQueue;
    static rfc_dataEntryGeneral_t* currentDataEntry;
    static uint16_t packetCounter = 0;
    
    /*
     * Application LED pin configuration table:
     *   - All LEDs board LEDs are off.
     */
    PIN_Config pinTable[] =
    {
        Board_PIN_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
        PIN_TERMINATE
    };
    
    /***** Function definitions *****/
    
    void *mainThread(void *arg0)
    {
        RF_Params rfParams;
        RF_Params_init(&rfParams);
    
        /* Open LED pins */
        ledPinHandle = PIN_open(&ledPinState, pinTable);
        if (ledPinHandle == NULL)
        {
            while(1);
        }
    
    
        if( RFQueue_defineQueue(&dataQueue,
                                    txDataEntryBuffer,
                                    sizeof(txDataEntryBuffer),
                                    NUM_DATA_ENTRIES_TX,
                                    MAX_LENGTH + NUM_APPENDED_BYTES_TX))
        {
            /* Failed to allocate space for all data entries */
            while(true);
        }
    
        RF_cmdTxHS.pQueue = &dataQueue;
        RF_cmdTxHS.startTrigger.triggerType = TRIG_NOW;
    
        currentDataEntry = (rfc_dataEntryGeneral_t*)&txDataEntryBuffer;
        currentDataEntry->length = PAYLOAD_LENGTH;
        pPacket = &currentDataEntry->data;
    
        /* Generate the packet */
        uint16_t i;
        for (i = 0; i < PAYLOAD_LENGTH; i++)
        {
            pPacket[i] = (uint8_t)(i + 1);
        }
    
        // 1.5 mbps
        rfHandle = RF_open(&rfObject, &RF_prop_ghs, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_ghs, &rfParams);
        
        // 4 mbps
        // rfHandle = RF_open(&rfObject, &RF_prop_hsp_4mbps, (RF_RadioSetup*)&RF_cmdRadioSetup_hsp_4mbps, &rfParams);
    
        /* Set the frequency */
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
        while(1)
        {
            while(packetCounter++ < NUMBER_OF_PACKETS)
            {
                PIN_setOutputValue(ledPinHandle, Board_PIN_LED1,1);
                RF_runCmd(rfHandle, (RF_Op*)&RF_cmdTxHS, RF_PriorityNormal, NULL, 0);
                PIN_setOutputValue(ledPinHandle, Board_PIN_LED1,0);
            }
            usleep(500000);
            packetCounter = 0;
        }
    }
    
    

    RX 代码:

    /*
     * Copyright (c) 2019, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /***** Includes *****/
    /* Standard C Libraries */
    #include <stdlib.h>
    
    /* TI Drivers */
    #include <ti/drivers/rf/RF.h>
    #include <ti/drivers/PIN.h>
    
    /* Driverlib Header files */
    #include DeviceFamily_constructPath(driverlib/rf_prop_mailbox.h)
    
    /* Board Header files */
    #include "Board.h"
    
    /* Application Header files */
    #include "RFQueue.h"
    #include "smartrf_settings/smartrf_settings.h"
    
    /***** Defines *****/
    
    /* Packet RX Configuration */
    #define DATA_ENTRY_HEADER_SIZE  8   /* Constant header size of a Generic Data Entry */
    #define MAX_LENGTH              300 /* Max length byte the radio will accept */
    #define NUM_DATA_ENTRIES        2   /* NOTE: Only two data entries supported at the moment */
    #define NUM_APPENDED_BYTES      8   /* RF_cmdRxHS.rxConf.bIncludeLen = 1
                                         * RF_cmdRxHS.rxConf.bAppendStatus = 1;
                                         * RF_cmdRxHS.rxConf.bAppendTimestamp = 1; */
    #define LENGTH_BYTE_SIZE        2
    
    
    /***** Prototypes *****/
    static void callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e);
    
    /***** Variable declarations *****/
    static RF_Object rfObject;
    static RF_Handle rfHandle;
    
    /* Pin driver handle */
    static PIN_Handle ledPinHandle;
    static PIN_State ledPinState;
    
    /* Buffer which contains all Data Entries for receiving data.
     * Pragmas are needed to make sure this buffer is 4 byte aligned (requirement from the RF Core) */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_ALIGN (rxDataEntryBuffer, 4);
    static uint8_t
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES)];
    #elif defined(__IAR_SYSTEMS_ICC__)
    #pragma data_alignment = 4
    static uint8_t
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES)];
    #elif defined(__GNUC__)
    static uint8_t
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES)]
                                                      __attribute__((aligned(4)));
    #else
    #error This compiler is not supported.
    #endif
    
    /* Receive dataQueue for RF Core to fill in data */
    static dataQueue_t dataQueue;
    static rfc_dataEntryGeneral_t* currentDataEntry;
    static uint16_t packetLength;
    static uint8_t* packetDataPointer;
    static rfc_hsRxOutput_t rxStatistics;
    
    
    static uint8_t packet[MAX_LENGTH + NUM_APPENDED_BYTES - LENGTH_BYTE_SIZE]; /* The length info (2 bytes) is stored in a separate variable */
    
    /*
     * Application LED pin configuration table:
     *   - All LEDs board LEDs are off.
     */
    PIN_Config pinTable[] =
    {
        Board_PIN_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    	PIN_TERMINATE
    };
    
    /***** Function definitions *****/
    
    void *mainThread(void *arg0)
    {
        RF_Params rfParams;
        RF_Params_init(&rfParams);
    
        /* Open LED pins */
        ledPinHandle = PIN_open(&ledPinState, pinTable);
        if (ledPinHandle == NULL)
        {
            while(1);
        }
    
        if( RFQueue_defineQueue(&dataQueue,
                                rxDataEntryBuffer,
                                sizeof(rxDataEntryBuffer),
                                NUM_DATA_ENTRIES,
                                MAX_LENGTH + NUM_APPENDED_BYTES))
        {
            /* Failed to allocate space for all data entries */
            while(1);
        }
    
        RF_cmdRxHS.pOutput = &rxStatistics;
        RF_cmdRxHS.pQueue = &dataQueue;
        RF_cmdRxHS.rxConf.bAutoFlushCrcErr = 1;
        RF_cmdRxHS.maxPktLen = MAX_LENGTH;
        RF_cmdRxHS.pktConf.bRepeatOk = 0;
        RF_cmdRxHS.pktConf.bRepeatNok = 0;
    
        // Appended bytes
        RF_cmdRxHS.rxConf.bIncludeLen = 1;      // 2 bytes
        RF_cmdRxHS.rxConf.bIncludeCrc = 0;
        RF_cmdRxHS.rxConf.bAppendStatus = 1;    // 2 bytes appended
        RF_cmdRxHS.rxConf.bAppendTimestamp = 1; // 4 bytes appended
    
        // 1.5 mbps
        rfHandle = RF_open(&rfObject, &RF_prop_ghs, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_ghs, &rfParams);
            
        // 4 mbps
        // rfHandle = RF_open(&rfObject, &RF_prop_hsp_4mbps, (RF_RadioSetup*)&RF_cmdRadioSetup_hsp_4mbps, &rfParams);
    
        /* Set the frequency */
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
        while(1)
        {
            RF_runCmd(rfHandle, (RF_Op*)&RF_cmdRxHS, RF_PriorityNormal, &callback, RF_EventRxEntryDone);
        }
    }
    
    void callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    {
        if (e & RF_EventRxEntryDone)
        {
            /* Toggle pin to indicate RX */
            PIN_setOutputValue(ledPinHandle, Board_PIN_LED2, !PIN_getOutputValue(Board_PIN_LED2));
    
            /* Get current unhandled data entry */
            currentDataEntry = RFQueue_getDataEntry();
    
            /* Handle the packet data, located at &currentDataEntry->data */
            packetLength      = ((*(uint8_t*)(&currentDataEntry->data + 1)) << 8) |  (*(uint8_t*)(&currentDataEntry->data));
            packetDataPointer = (uint8_t*)(&currentDataEntry->data + 2);
    
            /* Copy the payload + optional status byte to the packet variable */
            memcpy(packet, packetDataPointer, (packetLength + NUM_APPENDED_BYTES - LENGTH_BYTE_SIZE));
    
            RFQueue_nextEntry();
        }
    }
    

    请注意、在 RX 中、我已关闭重复模式、以避免在设置回调中的断点以监控数据包时遇到问题:

    在数据包结束时、会附加一个2字节长状态字节和一个4字节长时间戳。

    状态字节中的第一个字节是 RSSI。

    如您所见、附加的 RSSI 和时间戳等于随该数据包接收的统计信息。

    Siri

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

    尊敬的 Siri:

    很抱歉耽误你的时间。

    我的原始问题是、  RFC_CMD_HS_RX_s.pOutput.lastRssi 始终读取 0x00 。 然后、我尝试访问  RFC_hsRxStatus_s.RSSI 但访问它的唯一方法是通过 bAppendStatus 。 然后我发现  bAppendStatus 不工作、直到我将 附加的字节数 4 (当 2 正确的2字节通道值 RFC_hsRxStatus_s 字段)。 完成这之后、我现在看到两个状态字节、其中包括一个良好/合理的 RSSI 值、但它们前面加了 2个 NULL 字节的原因(请参阅先前的附件)。

    无论我尝试过什么、遇到什么问题、我都不明白如何  RFC_CMD_HS_RX_s.pOutput.lastRssi 都可以 0x00 0x80 (即-128;无效)。 毫无疑问、当射频内核通过无线方式接收数据时、它会将 拉斯特·罗斯 某个有效值、并且仅在下一次接收时才会更改该字段、该接收将是另一个有效值。 情况不是这样吗?

    TIA、

    Sean。

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

    感谢你的检查, Siri。 我具有与您相同的 API 和 PHY:

    rfc_CMD_PROP_RADIO_DIV_SETUP_t TempSetupDiv;
    
    // TI-RTOS RF Mode Object (includes patches for high speed operation)
    // e2e.ti.com/.../2363574
    static const RF_Mode RfSettings_RF_prop_hs_4fsk =
    {
    .rfMode = RF_MODE_PROPRIETARY_SUB_1,
    .cpePatchFxn = &rf_patch_cpe_ghs,
    .mcePatchFxn = &rf_patch_mce_ghs,
    .rfePatchFxn = &rf_patch_rfe_ghs,
    };
    
    static RF_Mode RfMode;
    
    static const RfSettings_PhyMode_Map_t PhyModeMap[] = {
        { // 1.5Mbps
            .phyMode = VOLSHARE_REGMAP_PHY_900M_750KSYM_4FSK,
            .setup = &Cc1310_Rf900vol_PHY_900M_750KSYM_4fsk_g,
            .rfMode = &RfSettings_RF_prop_hs_4fsk
        },
    }
    
    phyMode = VOLSHARE_REGMAP_PHY_900M_750KSYM_4FSK;
    
    setupRom = NULL;
    for(map = PhyModeMap; map->phyMode != PHYMODE_INVALID; map++)
    {
        if(map->phyMode == phyMode)
        {
            setupRom = (void*)(map->setup);
            break;
        }
    }
    
    RfMode.rfMode = map->rfMode->rfMode;
    RfMode.cpePatchFxn = map->rfMode->cpePatchFxn;
    RfMode.mcePatchFxn = map->rfMode->mcePatchFxn;
    RfMode.rfePatchFxn = map->rfMode->rfePatchFxn;
    
    handle = RF_open(&RfObject, &RfMode, (RF_RadioSetup*)&TempSetupDiv, &RfParams);

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

      如果只附加 STATUS 字节、则无需将 NUM_APTERD_BYTES 设置为大于2。 如果这样做、您配置了错误的其他内容。

    您是否测试过我的? 您能看到它有什么问题吗?

    在我的代码中、我只为 STATUS 字节添加2。 此外、我添加2作为长度、4作为时间戳(总共8)、因为

    //附加字节
    rf_cmdRxHS.rxConf.bIncludeLen = 1;// 2字节
    rf_cmdRxHS.rxConf.bAppendStatus = 1;//附带2个字节
    rf_cmdRxHS.rxConf.bAppendTimestamp = 1;//添加了4个字节

    我从未见过 lastRssi 为0或0x80。

    在本例中、其余的统计数据是什么?

    我的代码也能看到这个结果吗?

    为了让我们花更多的时间来解决这个问题、我们需要一种方法来重现问题、但现在我还无法做到。

    Siri

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

    尊敬的 Siri:

    对不起,我不知道该 怎么办才好。"

    我发现没有报告 RSSI 的问题:我只看到  RSSI 字段  RFC_hsRxStatus_s 状态 如果我设置 bUseCrc 至少开启正在接收的 CC1310。 这不是我所期望的(为什么我不使用 CC1310 CRC 功能就不能检查 RSSI?) 我找不到任何记录此行为的文档。 此行为适用于  RFC_hsRxOutput_s.lastRssi 还有。 请参阅 已连接 图像、它描述了我的观察结果。

    附加映像的两种场景之间的代码差异如下:

    // #### RSSI is only accessible if CRC is used?!
    if(!(RxPacketCounter++ % 4))
    {
        RF_cmdRxHS.pktConf.bUseCrc = 1;
    }
    else
    {
        RF_cmdRxHS.pktConf.bUseCrc = 0;
    }

    请告知。

    TIA、

    Sean。

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

    Sean、您好!

    我了解了修补程序的实施、实际上当使用 HS 命令时、我们只会在 bUseCrc 设置为1时将 RSSI 附加到数据包。

    我不知道为什么会这样,但它确实验证了你的观察。

    此致、

    亚瑟

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

    Arthur、您好!

    感谢您这么快地检查这一点,并确认我的观察.

    令人难以置信的是、这些资料显然没有记录在任何地方、但这并不是您的错;这是 TI 的销售部门、他们的工程师无时无刻都在公共汽车上。

    再次感谢、

    Sean。