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.

[参考译文] CC1352P:通过专有射频获取一些坏数据包。 需要验证 CRC 设置。

Guru**** 2484615 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1190227/cc1352p-getting-some-bad-packets-over-proprietary-rf-want-to-verify-crc-setup

器件型号:CC1352P

你好! 我在4字节数据包中遇到一些位错误、有时接收 到的字节多于预期。  

我只是想确保我的 CRC 实际上在这里被强制执行。 我的对讲机配置已连接。  
我是否需要检查 RF_EventRxOk?

我从 rfSynchronizedPacket 示例开始、该示例实际上仅查找 RF_EventryRxEntryDone。  
来自 TRM 的下表看起来需要检查的内容可能更多。  

在我接收的这些数据包中、我希望每个数据包都无法通过 CRC 校验。  
例如

TX:  
2023/25/01、22:26:16 TX[4]:00c0ff33

RX:

2023/25/01、22:21:38 Rx[84]:00c0ff330000000000000000000000000000000100400000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2023/25/01、22:21:38 Rx[4]:00c0ffb3

下面是 PHY 中 CRC 设置的摘要

rf_cmdPropTxAdv_2gfsk500kbps154g_0

  .pktConf.bUseCrc = 0x1
  .pktConf.bCrcIncSw = 0x0
  .pktConf.bCrcIncHdr = 0x0

rf_cmdPropRxAdv_2gfsk500kbps154g_0

  .pktConf.bUseCrc = 0x1
  .pktConf.bCrcIncSw = 0x0
  .pktConf.bCrcIncHdr = 0x0
  rxConf.bIncludeCrc = 0x1

e2e.ti.com/.../5556.ti_5F00_radio_5F00_config.c

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

    PHY 配置基于使用高级 API、但会获取一些15.4头信息。  e2e.ti.com/.../cc1352p7-changing-custom-rf-phy-from-rfsynchronizedpacket-example

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

    我忘记了对这些结构的应用程序修改

      /*使用单个指针项构建循环 RX 队列。 *

      rxItem.config.type = data_entry_type_ptr;

      rxItem.config.lenSz = 0

      rxItem.length = sizeof (appRadioRxBuf);

      rxItem.pNextEntry =(uint8_t*)&rxItem;

      rxItem.pData =(uint8_t*)&appRadioRxBuf[0]

      rxItem.status = data_entry_Pending;

      rxQueue.pCurrent Entry=(uint8_t*)&rxItem;

      rxQueue.pLastEntry =空;

      /*根据应用需求修改 CMD_PROP_RX 命令*/

      rf_ctx.rf_cmdPropRx->pQueue =&rxQueue;         /*为接收的数据设置数据实体队列*/

      rf_ctx.rf_PropcmdRx->rxConf.bAutoFlushIgnored  = 1 //丢弃来自 Rx 队列的已忽略的数据包*/

      rf_ctx.rf_PropcmdRx->rxConf.bAutoFlushCrcErr   = 1 //丢弃来自 Rx 队列的 CRC 错误数据包*/

      rf_ctx.rf_cmdPropRx->rxConf.bIncludeHdr     = 1 /*将长度字段放在队列条目前面。 *

      rf_ctx.rf_cmdPropRx->rxConf.bAppendTimestamp   = 1 //将 RX 时间戳附加到数据包有效载荷中*/

      rf_ctx.rf_cmdPropRx->rxConf.bIncludeCrc     = 0

      rf_ctx.rf_cmdPropRx->rxConf.bAppendRssi     = 0

      rf_ctx.rf_cmdPropRx->rxConf.bAppendStatus    = 1

      rf_ctx.rf_cmdPropRx->pktConf.bRepeatOk = false;     /*在收到单个有效数据包后停止*/

      rf_ctx.rf_cmdPropRx->pktConf.bRepeatNok = true;

      rf_ctx.rf_cmdPropRx->pktConf.bCrcIncHdr = true;

      rf_ctx.rf_cmdPropRx->pktConf.filterOp = false;

      rf_ctx.rf_cmdPropRx->hdrConf.numHdrBits = 8

      rf_ctx.rf_cmdPropRx->hdrConf.numLenBits = 8

      rf_ctx.rf_PropcmdRx->maxPktLen = radio_PKT_size;//实施数据包长度过滤以避免 PROP_ERROR_RXBUF */

      rf_ctx.rf_cmdPropRx->pOutput =(uint8_t*)&rxStatistics;

      rf_ctx.rf_cmdPropRx->lenOffset = 0

      /*准备数据包*/

      rf_ctx.rf_cmdPropTx->pktLen = radio_PKT_size+1

      rf_ctx.rf_cmdPropTx->pPkt=(uint8_t*)&appRadioTxBuf;

      rf_ctx.rf_cmdPropTx->startTrigger.triggerType = trig_ABSTIME;

      rf_ctx.rf_cmdPropTx->StartTime = 0

      rf_ctx.rf_cmdPropTx->numHdrBits = 0

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

    尊敬的 Mike:  

    您是否有正常运行的 rfSyncronizedTX 和 RX 设置、这是导致问题的 diff?  

    此致、
    SID

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

    你(们)好、Sid。 我已采用该示例和  

    • 添加了 Adv PHY API、以便我可以在902-928MHz 范围内获得500kbps
    • 使用 TDMA 和 FDMA 打包 rfSynchronizedpacket 示例
      • 它在近距离工作且稳定
      •  昨天我移动了 DUT 时发现了 CRC 问题
    • 添加了接收到的无线电数据包的 UART 输出
    • 为简单查询和控制添加了一些其他 UART 命令

    因此、我的两个 DUT 相邻、一个 TX、一个 RX、而附近的 RX 是完美的。  
    我在下一个房间有第三个 DUT、它正确获得了50%的有效负载、  
    但是、我会得到一些垃圾有效载荷、比如我粘贴在原始帖子中的有效载荷。  

    因此、我拥有一个黄金标准、即具有体面 SNR 时"应该"的样子。  
    但奇怪的是、如果数据被一个位关闭、任何数据都将被接收。  

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

    我应该启用所有这些事件吗? 感觉我在 rxCallback 中缺少了一些东西

     rfSynchronizedPacket 示例仅查找 RF_EventLastCmdDone


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

    我想我的问题还在等待  

    RF_EventLastCmdDone

    而不是  

    RF_EventRxEntryDone  

    rfPacket 示例等待后者。
    rfSynchronizedPacket 等待前一个数据包、这将解释 CRC 失败的原因。