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:在使用 CC1311P3 RX_ADV 模式的连续接收流期间观察到间歇性不同步行为

Guru**** 2550310 points
Other Parts Discussed in Thread: CC1311P3, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1561203/cc1311p3-intermittent-out-of-sync-behavior-observed-during-continuous-reception-stream-using-cc1311p3-rx_adv-mode

器件型号:CC1311P3
主题: SysConfig 中讨论的其他器件

工具/软件:

我们正在根据您的 433MHz 频段参考设计设计的定制电路板上使用 CC1311P3。 我们使用部分缓冲区读取机制、以无限 RX 为 RX_ADV_CMD 配置以下参数。

RFC_CMD_PROP_RX_ADV_t RF_cmdPropRxAdv_CST =

.commandNo = 0x3804、
.status = 0x0000、
.pNextOp = 0、//插入适用指针:(UINT8_t*)&xxx
.StartTime = 0x00000000、
.startTrigger.triggerType = 0x0、
.startTrigger.bEnaCmd = 0x0、//0x1、//0x0、
.startTrigger.triggerNo = 0x0、//0x3、//0x3、//0x2、//0x0、
.startTrigger.pastTrig = 0x1、//0x1、//0x0、
.condition.rule = 0x1、
.condition.nSkip = 0x0、
.pktConf.bFsOff = 0x0、
.pktConf.brepeatOk = 0x1、
.pktConf.brepeatNok = 0x1、
.pktConf.bUseCrc = 0x0、
.pktConf.bCrcIncSw = 0x0、
.pktConf.bCrcIncHdr = 0x0、
.pktConf.endType = 0x0、//0x0、
.pktConf.filterOp = 0x0、
rxConf.bAutoFlushIgnored = 0x0、
.rxConf.bAutoFlushCrcErr = 0x0、
.rxConf.bIncludeHdr = 0x0、
.rxConf.bIncludeCrc = 0x0、
.rxConf.bAppendRssi = 0x0、
.rxConf.bAppendTimestamp = 0x0、
.rxConf.bAppendStatus = 0x0、
.syncWord0 = 0xFEFEFEFE、
.syncWord1 = 0xFEFEFEFE、
.maxPktLen = 0x0、
.hdrConf.numHdrBits = 0x0、
.hdrConf.lenPos = 0x0、
.hdrConf.numLenBits = 0x0、
.addrConf.addrType = 0x0、
.addrConf.addrSize = 0x0、
.addrConf.addrPos = 0x0、
.addrConf.numAddr = 0x0、
.lenOffset = 0x00、
.endTriggerType = 0x1、//0x1、//0x0、
.endTrigger.bEnaCmd = 0x0、//0x1、//0x0、
.endTrigger.triggerNo = 0x3、//0x0、//0x3、//0x1、//0x2、//0x0、0x2 = 11 个数据包未命中 0x0 = 31 个数据包未命中
.endTrigger.pastTrig = 0x0、//0x0、//0x1、
.EndTime = 0x00000000、
.pAddr = 0、//插入适用指针:(Uint8_t*)&xxx
.pQueue = 0、//插入适用指针:(dataQueue_t*)&xxx
.pOutput = 0 //插入适用的指针:(Uint8_t*)&xxx
};

RF_cmdPropRxAdv_CST.pNextOp =(uint8_t *)&RF_cmdPropRxAdv_CST;

//运行命令触发器
rfPostHandle = RF_runCmd (rfHandle、(RF_Op*)&RF_cmdPropRxAdv_CST、
RF_PriorityNormal、&ReceivedOnRFcallback、
RF_EventRxEntryDone);

观察到的行为。  

  • 我们正在阅读 63 字节 最大差值 连续 、由触发 RX 完成中断

  • 发送器正在发送数据 每 30ms 发送 50 字节数据包 、定期。

  • 成功接收几秒钟后、我们开始观察 不同步行为

  • 在中 随机时尚 正确解码了几个数据包、但随后就正确了 连续噪声 发送器发送数据的情况下也能收到。  

约束条件:  

  • 接收器不知道数据包长度 很重要。

  • 因此、我们使用的是 RX_ADV 模式 一方 maxPktLen = 0允许 部分读取

  • 我们不知道发送器发送数据的周期性。  

请告知正确的用法 RX_ADV 模式、采用部分缓冲区读取 使用案例而设计? 具体来说:

  1. 缺少的任何关键配置 无限 RX 数据包长度未知的系统?

  2. 是否有任何避免的建议 不同步条件 保证 数据包对齐

  3. 栅极驱动器参数 同步丢失检测 使用时手动maxPktLen = 0?

  4. 我们需要吗 显式刷新或复位 RX 缓冲区是周期性的吗?


谢谢、

专题 B

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

    恐怕我无法完全理解您的设置。

    您说您不知道数据包的长度、但同时又说您每 30ms 传输一次长 50 字节的数据包?

    哪个事件是“RX DONE 中断“、为什么会读取 63 个字节(您说要发送 50 个字节?)

    请分享一个您发送的数据包的外观示例(前导码,同步,长度字节的放置,最大可能长度字节等)、我可以看看我是否能够举例正确接收此数据包。

    为什么您使用高级 RX 命令而不是常规命令?

    另外、请解释“不同步行为“的含义。 您无法以给定的间隔(每 30ms)发送数据包、然后将其作为一个长数据包接收。 “那你打算怎么办?“

    Siri

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

    尊敬的 Siri :

    我的发送器按以下格式发送数据:

    (1 位前同步码+ 4 字节同步字)+可变长度数据+数据结束指示符(后同步码)
    传输以常规或随机的间隔进行。

    注意: 数据有效载荷大小可以不同 1 字节和 2500 字节

    在接收器侧、我们将配置 CC1311P3 指定 连续 RX 模式 使用了 RX_ADV 命令 部分缓冲区读取 机制。

    检测到同步字后、我们会观察到RF_EventRxEntryDone中断会定期连续触发、这样我们就可以读取接收到的数据。

    发现的问题:

    • 发送器在启动时意外导通 第一次来 、我们能够正确地对传入的数据进行解码。

    • 不过、如果是变送器 暂停 (例如,持续 1 秒)、然后 恢复传输 、则 CC1311P3 是 无法接收新数据

    • 我们会观察到有效的数据包、而不是有效的数据包 连续噪声 有一个寄生电容。

    在传输间隙后、接收器似乎没有正确地重新同步。

    您能建议我们如何解决这个问题、确保接收器能够可靠地重新同步和接收数据、即使在传输出现间隙后也是如此吗?

    我们希望在以下方面提供任何指导:

    1. 正确的 RX_ADV 配置、能够在此类间歇性传输中重新同步。

    2. 传输间隙后是否需要任何手动 RX 缓冲区刷新或重新初始化。

    3. 处理具有未知开始时间或间隔的可变长度数据包的任何推荐策略。

    谢谢、

    专题 B

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

    Siri 您建议的逻辑与我们的要求不符。 让我简要说明一下我们的设置以及我们面临的问题:

    1. 发送器行为:
      发送器按以下格式发送数据:
      1-bit preamble + SYNC WORD + DATA (postamble indicates end of byte)
      在单个实例中、发送器可以发送至少 1 个字节至最多 2500 个字节。 该传输模式会重复、但接收器不知道时序。 注意(通过在 SW 中应用解扰/解码逻辑处理解调的输出后我们得知的字节结束)。  

    2. 接收器配置:
      由于接收器不知道发送器何时开始发送数据、因此我们使用 RX ADV 命令。
      (使用 RX ADV 的原因:它允许配置两个同步字并支持 16 位字段。) MaxLen
      我们正在使用读取数据 部分读取缓冲区 机制。

    3. 问题(不同步方案):
      检测到同步字后、接收器开始连续接收数据。
      但是、如果发送器暂停传输、则接收器开始接收噪声。
      稍后、当发送器恢复发送有效数据时、接收器继续接收噪声、而不是同步回数据流。
      我们将此条件称为 “不同步。“

    以避免 “不同步“ 第 3 点所述的场景,我们需要了解如何在发送器恢复传输时可靠地接收有效数据 — 使用部分读取机制。

    您能否提出如何实现这一目标?

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

    恐怕我无法理解我的代码示例是如何无法使用的。 您指出您发送的数据包格式如下:

    • 前导码:1 位
    • 同步:您在第一个帖子中陈述了 4 个字节
    • 数据:介于 1 字节和 2500 字节之间
    • 后同步码:(你不说长度)

    我的代码示例可以接收以下内容:

    • 前导码:1 位、但我使用建议的 4 个字节进行了测试、因为 1 位将影响灵敏度
    • SYNC:我使用建议的 4 个字节进行了测试、因为 0xFEFEFEFEFE 具有非常差的自相关性属性
    • 数据:可以介于 1 字节和 MAX_LENGTH 之间(I 将 MAX_LENGTH 设置为 250,但可以设置为所需的任意数字)
    • 后同步码:我使用了 1 个字节的 0xAA(意味着在有效载荷中的任何位置都无法接收)

    请解释我的实施与您的需求之间的差异、因为从您的解释中我不理解这一点。

    1. 接收器配置

    由于接收器不知道发送器何时开始发送数据、因此我们使用 RX ADV 命令“。

    对于 RX 和 RX 高级命令、您不知道发送器何时开始发送

    使用 RX ADV 的原因:它允许配置两个同步字并支持一个 16 位 maxLen 字段。“

    为什么您需要能够搜索两个同步字? 您已声明使用 0xFEFEFEFE 作为同步字

    为什么您关心高级命令有一个 16 位 maxLen 字段? 您在无限数据包长度模式下使用对讲机、您刚才已声明您的数据包不包含长度信息。 它只包含一个后同步码、指示数据包已完成(有效载荷已发送)

    1. 问题(不同步方案)

    请说明您的意思:发射器会暂停传输。

    如果您的意思是数据包之间存在如下所示的中断、这不是问题、也不是我的演示代码的工作方式。

    如果您在数据包中间暂停传输(如下图所示)、则会这样做 不会 工作:

    一旦无线电开始接收噪声、它就不同步、如果不重新启动 RX 模式、它将无法同步到新数据、并等待新的同步字。 这是同步字的全部用途 ( 同步 字词)。 用于将接收器与发送器同步

    Siri

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

     您好 Siri ,正如您在第一张图片中提到的,每个数据包之间的传输暂停,我的案例显示了类似的模式。 但是、虽然最初正确接收数据、但在几秒钟后、同步会在随机点失败。 我们仍然在观察传入的数据、即使发送器在很长一段时间内继续以固定间隔发送数据。

    此外、我们是否有任何机制以固定的间隔执行载波感应、从而使用部分缓冲区读取和无限长度模式确保输入信号处于有效的功率级别?

    在我的用例中、信号强度可能会降低到–120dBm 左右。 在这些条件下、我们是否能够执行载波侦听、然后实际接收数据? 或者、是否可以同时执行载波侦听和数据接收? 如果有、请详细说明如何配置?

    谢谢、

    专题 B

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

    同样、在发送 1 位前导码和错误的同步字时、预计不会接收到同步字(尤其是在信号电平降至–120dBm 时)。

    您实际使用的是什么 PHY? 我们的 4.8kbps 窄带 PHY 是唯一能够以–120dBm 接收的 PHY、但仅在您使用建议的前导码长度(4 字节)和同步字时才会接收。

    另请注意、我们通常 在 BER(误码率)= 0.01 时给出灵敏度数。

    然后、PER(数据包错误率)为:

    PER = 1 -(1 - BER)^N、其中 N 是位数

    这意味着、如果您要发送一个小数据包(例如 3 个字节)、则 PER 将:

    在灵敏度限值下、PER = 1 -(1 - BER)^ N = PER = 1 -(1 - 0.01)^(3*8)= 0.21 (21%)

    如果您发送一个 2500 字节的数据包、 您的 PER 将为 100%

    无法同时执行 CS 和接收。 Snif 命令在前导码期间使用 CS 来确定它是否应保持在 RX 中以查找 SYNC(如果无线上没有信号,则终止)。

    这意味着嗅探间隔必须足够小、以便在前导码内启用 2 次唤醒(当传输 1 位前导码时无法实现)。

    同样、现在您要在射频条件下测试不工作的软件。

    您需要使用 SysConfig/SmartRF Studio 的推荐设置、在远高于灵敏度级别的数据包上进行测试、回溯并首先验证您的软件。

    当您验证代码是否按预期工作时、您可以尝试替换前导码/同步等、还可以向灵敏度级别进行测试。

    目前、无法判断您的问题是与软件还是硬件/射频相关(我认为可能两者都是相关的)、并且您一次需要调试/测试一个项目。

    Siri

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

    您好 Siri 感谢详细的解释。 是的、我们已使用具有固定数据包长度的 1 位前导码+ 4 字节同步字使系统稳定。 之后、我们转换到不受限制的数据包长度模式、以支持接收连续的数据流。

    目前、我们观察到、当发送器以不同有效载荷大小的随机间隔发送数据时、出现间歇性不同步问题。

    谢谢、
    专题 B

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

    很抱歉、我不知道如何进一步帮助您解决此问题、因为我无法重新创建它。

    我提供了一个示例、 但您尚未回答我有任何问题、说明该示例为何不适合您的用例。 我已经测试了该示例、但没有看到您描述的问题、因此不确定还能做些什么来提供帮助。

    Siri