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:RFC_CMD_HS_RX_s 的 bAppendStatus

Guru**** 2482105 points


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

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

器件型号:CC1310

您好!

首先、为了节省材料复制、请参阅此主题、了解有关我正在使用的 PHY 设置的详细信息:

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1269582/cc1310-false-sync-events

因此问题产生的一个问题是、我无法获得 RFC_CMD_HS_RX_s.rxConf.bAppendStatus 才能正常工作。

我试图通过实施地址过滤来调查伪同步-在没有替代方案的情况下、这似乎是扩展同步字的有效方法(  RFC_CMD_HS_RX_s 结构在某些方面看来是有限的,而例如,  RF_cmdPropRxAdv 允许两个32位同步字、这可能已经解决了我的原始问题)。 但是 、由于 RFC_CMD_HS_RX_s 没有 RFC_hsRxStatus_t 成员、因此我能够访问 addressInd 字段以证明我的地址过滤工作正常的唯一方法是使用 RFC_CMD_HS_RX_s.rxConf.bAppendStatus。  RFC_hsRxStatus_s 的文档"接收状态字可能附加到接收缓冲区中的消息"建议  bAppendStatus 将附加到 两个字节 回复到接收到的数据包。 因此我有以下代码、其中 NUM_APTERD_BYTES 为0、现在为2:

#define NUM_DATA_ENTRIES        5 
#define NUM_MAILBOX_ENTRIES     10
#define NUM_APPENDED_BYTES      2  // This will accommodate the bAppendStatus two bytes


#define RF_QUEUE_DATA_ENTRY_HEADER_SIZE  (8 + 4)  // Pointer = General + uint32_t pointer pData

#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)))

注意、  数据大小 被注释掉(即零)是因为我使用的是指针数据类型、因此实际队列本身中没有有效负载/数据。

我对工作代码所做的唯一其他更改是在发布 RF RX 命令之前:

RF_cmdRxHS.rxConf.bAppendStatus = 1;

只有这两个变化,所有的接收失败。 我有一些调试、输出如下内容:

struct __RFC_STRUCT rfc_hsRxOutput_s {
   uint16_t nRxOk;                      //!<        Number of packets that have been received with CRC OK
   uint16_t nRxNok;                     //!<        Number of packets that have been received with CRC error
   uint16_t nRxAborted;                 //!<        Number of packets not received due to illegal length or address mismatch
   uint8_t nRxBufFull;                  //!<        Number of packets that have been received and discarded due to lack of buffer space

我看到除0之外的所有成员的值  nRxBufFull ,该值在每次接收失败时递增。

  1. 可  RFC_hsRxStatus_s 可以通过附加到数据包以外的任何方式进行访问?
  2. 我没有这样做、应该得到的是、 bAppendStatus  工作中?

TIA、


Sean。

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

    Sean、您好!

    1:无法访问除不幸地将其附加到数据包之外的状态。

    2:可能是 rxEntry 元素大小未正确定义。 您能否检查它是否与数据包长度加上状态字节匹配?

    此致、

    亚瑟

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

    Arthur、

    这是我犯的错误。 在将例如2字节字段附加到接收到的数据包时、您必须:

    1. uint8_t RxEntryQueue[RF_Queue_data_entry_buffer_size (NUM_DATA_entries、0、NUM_APTERD_BYTES)]__attribute__(aligned (4));
    2. RFC_dataEntryPointer_t* pointerDataEntryPtr
    3. pointerDataEntryPtr =(RFC_dataEntryPointer_t*) RxEntryQueue
    4. #define NUM_APPED_BYTES   2
    5. rf_cmdRxHS.rxConf.bAppendStatus = 1
    6. myDataEntryPtr->length = + NUM_APPED_BYTES

    实现 步骤6 ,我现在看到  RF_cmdRxHS.pOutput->nRxBufFull = 0 和  RF_EventMask e = RF_EventRxEntryDone 在回调中(而非  RF_EventRxEntryDone  并获得  IRQ_LAST_COMMAND_DONE 代替)。

    我的困惑来自模棱两可的文档:

    • 一方面、我们说附加的字节是 RxEntryQueue 本身的一部分(因为 NUM_APTERD 字节用于定义数据队列的维度[而不是负载缓冲区*pData])。
    • 另一方面、回调会报告它收到了 length_of_wanded_payload + num_added_bytes、这表明附加的字节是 有效载荷 而不是队列本身。 这使我认为附加的字节可以从队列结构中访问、 而不是 通过 访问负载字节数组的最后两个字节来访问、这就是它们实际所在的位置。

    谢谢。

    Sean。