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.

[参考译文] CC1352R:在 CC1352R 上连续 IQ 样本接收期间出现 UART 打印问题

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1431588/cc1352r-issues-with-uart-printing-during-continuous-iq-sample-reception-on-cc1352r

器件型号:CC1352R

工具与软件:

大家好!

我正在 德州仪器(TI) CC1352R 的一个项目中工作、我需要在该项目中接收连续的 IQ 数据样本并通过 UART 打印接收到的数据。 但是、我遇到了同步问题:UART 上的打印过程似乎会因传入的 IQ 数据的持续流而中断、从而导致数据丢失和打印丢失。 我希望能够获得一些关于如何有效管理这种情况的见解。

以前的解决方案

  1. 信标同步
  2. 我尝试了使用两个缓冲区来交替进行数据填充和打印、允许打印任务处理一个缓冲区、而另一个缓冲区填充新数据。 但是、即使采用双缓冲、回调频率也偶尔会淹没打印过程。

向社区提出的问题

  • 是否有人在 CC1352R 上遇到过有关持续数据接收和 UART 输出的类似问题?
  • 您使用哪些技术来管理高频回调事件、同时仍通过 UART 输出数据而不丢失数据?

对于如何处理回调和 UART 打印任务之间的同步、欢迎提供任何建议。 谢谢你

 

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

    我恐怕除了我们在原来的帖子中已经做的事情外,我们无法再帮助你做更多的事情。

    同样、如果您执行建议的练习、在每次切换引导时获得射频回调、您将看到 每6.66us 接收到一个字节的内容(无线电以12.5 kbps 的速率运行)

    以这种速率传输 UART 数据不是问题、但现在请确保在考虑处理射频回调和准备 UART 缓冲器等的代码开销时进行管理

    很抱歉、我们没有可用的资源来进一步帮助您处理此方面的代码。

    Siri

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

    谢谢、Siri。
    我明白了、我的代码正在运行、但我对处理接收到的数据条目有一些疑问。 目前、我正在使用NUMBER_OF_SAMPLE_PAIRS as in patch file for 回调函数中的固定值环路来处理射频内核接收的 IQ 样本。

    for (i = index; i < (NUMBER_OF_SAMPLE_PAIRS + index); i++)
    {
    iSamples[i] = (((*(packetDataPointer + 1)) << 8) |
    (*packetDataPointer)) & 0x0FFF;
    qSamples[i] = (((*(packetDataPointer + 2)) << 8) |
    (*(packetDataPointer + 1))) >> 4;
    packetDataPointer += 3;
    }


    固定 NUMBER_OF_SAMPLE_PAIRS具有未知数据长度:

    • 现在NUMBER_OF_SAMPLE_PAIRS是固定的、但我不确定这是否是最佳方法、因为我不知道每个数据包的传入数据的确切长度。 如果接收到的实际样本数量各不相同、我将如何确定每次回调中的实际样本数量以及如何动态调整 NUMBER_OF_SAMPLE_PAIRS是更好的方法?

    在中设置传入数据长度 partialReadEntry1partialReadEntry2

    • 我还想知道在修补程序示例中它在 partialReadEntry1和中设置传入数据长度partialReadEntry2。 此长度设置在 currentReadEntry 中如何工作? 这些条目是预先配置为处理最大长度、还是在数据到达时动态更新长度?

    有人对我是否需要做出见解时 NUMBER_OF_SAMPLE_PAIRS动态原因包括传入数据长度未知、设置和使用这些部分条目的最佳做法或方式 currentReadEntry相互作用 partialReadEntry1partialReadEntry2我非常感谢您的指导

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

    我将尝试解释不同缓冲器是如何工作的。

    首先、 无线电以无限模式工作、这意味着它将会接收 IQ 样本、直到应用程序告诉它停止 RX。

    要知道何时应退出 RX、您需要在运行过程中处理传入的 IQ 样本、自行将其转换为有意义的数据、查看您接收到的是噪声还是"真实"数据。

    我们不会针对如何处理数据提供任何支持、因为使用无线电的推荐方法是让射频内核本身为您完成所有这些工作、并且仅为您提供缓冲器中接收到的数据。

    不过、由于某种原因您想要自己处理 IQ 样本、我将在应用手册中介绍如何使用缓冲器。

    射频内核将 IQ 样本写入 rxDataEntryBuF1和 rxDataEntryBuf2 。

    这些缓冲器中的每个都有空间容纳8个样本对、每个对为3个字节(12位 I sample 和12位 Q sample)。

    每次其中一个  rxDataEntryBufx 缓冲区已满时、您都会收到一个中断、然后您基本上必须在无线电持续 进行时处理这8个样本、以填充您未处理的 rxDataEntryBuf。

    还有另外两个缓冲区(iSamples 和 qSamples)、在我的示例中、每个缓冲区保存40个样本(NUMBER_OF_SAMPLE_PAIRS * NUMBER_OF_BUFFERS)。

    这意味着您第一次获得中断时(rxDataEntryBuF1已满)、您应使用前8个样本填充 iSamples 和 qSamples。

    当您获得下一个中断时、您的 rxDataEntryBuf2中有可用的样本9至16。

    接下来、您将获得第3个中断(rxDataEntryBuF1再次填满)、并且您将有样本17 - 24可用。

    在5个中断之后、您已经填充了 iSample 和 qSample 缓冲区、在第6个中断(第3次 rxDataEntryBuf2已满)上、您开始覆盖 iSample 和 qSample 缓冲区中的8个第一个条目、因此、您需要对第8个第一个样本执行任何操作(在您的情况下、请通过 UART 写入)

    由于您要通过 UART 传输 I 和 Q 样本、因此我假设您不处理 CC1352上的样本。 无论您使用什么器件来处理数据、都负责向 CC1352发送回信、告知其已接收到所需的样本、并可以退出 RX。

    Siri

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

    我知道每个rxDataEntryBuf缓冲区只能存储8个样本对、每次填充其中一个缓冲区时、我们都会收到一个中断。 不过、我注意到代码NUMBER_OF_SAMPLE_PAIRS在循环中使用、如下所示:

    for (i = index; i < (NUMBER_OF_SAMPLE_PAIRS + index); i++)
    {
    }

    例如、如果我设置NUMBER_OF_SAMPLE_PAIRS为50并使用5个缓冲器、我希望此设置能够在5个中断后处理250个样本。 但是、由于每个中断仅提供8个样本、因此接收到的样本总数将为40个、而不是250个。

    您能否说明一下NUMBER_OF_SAMPLE_PAIRS、如果每个缓冲区只保存8对、为什么要在示例应用中使用?

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

    我说每个缓冲器只保存8个对的原因是示例被设置了  

    #define NUMBER_OF_SAMPLE_PAIRS 8
    

    射频内核写入的缓冲区只能容纳12 + 8*3=36 字节。

    其中12个是标头、每个样本有3个字节、因此有8个样本。

    rxDataEntryBuf1[PARTIAL_RX_ENTRY_HEADER_SIZE + (NUMBER_OF_SAMPLE_PAIRS * 3)]

    如果将 NUMBER_OF_SAMPLE_PAIRS 设为50、缓冲区将有12 + 50* 3 = 162字节的空间(50个样本、每个样本3字节)、并且您在缓冲区填满之前不会获得中断。

    Siri