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.

[参考译文] RTOS/CC2640:UART 数据包分析问题

Guru**** 2582405 points
Other Parts Discussed in Thread: CC2540, CC2640, SYSBIOS

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/592413/rtos-cc2640-uart-packet-parsing-issues

器件型号:CC2640
Thread 中讨论的其他部件:CC2540SYSBIOS

工具/软件:TI-RTOS

大家好、

我正在开发一个自定义观测器项目、该项目通过 UART 与主器件通信、但我一直在使用包含的 UART 驱动程序正确解析数据包时遇到很多问题。  主器件的数据包结构包含一个标头字节(0x0D)、后跟两个操作码字节、后跟两个长度字节、以及有效载荷。  我要做的是等待标头字节、然后读取两个操作码字节和两个长度字节、然后基于该字节解析负载。  但是、UART 驱动程序仅在 UART_READ()中启用 RX、因此当我为一个字节(标头字节)调用 UART_READ()时、一旦将该字节读入缓冲区、RX 就会关闭、这会导致我与主设备失去同步。  我已经尝试使用 NPI 传输层 API (http://processors.wiki.ti.com/index.php/Cc2640_Adding_a_UART_or_SPI_driver_to_a_Sample_Project)

该项目旨在使用旧的 BLE 堆栈替换在 CC2540上运行的相同应用。  CC2540项目以这种方式使用 HAL UART 驱动程序、而不会导致问题。  是否有方法在 CC2640上使用 HAL UART 驱动程序。  或者、是否有一种逐字节读取 UART 的方法没有问题?  谢谢你。

此致、

Nick

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

    SDK 中包含一个 UART 回显示例、它完全符合您的想法、只需获取接收到的一个字节并将其传回。 这可能是一个很好的起点-您可以在具有 CCS 的 Resource Explorer 中找到代码、或者导航并打开 IAR 项目以:

    UART 驱动程序: \examples\rtos\CC2640R2_LAUNCHXL\drivers
    更复杂的 UART 代码: \examples\rtos\CC2640R2_LAUNCHXL\SYSBIOS
    更复杂的是、您可以在 GitHub 上查看我们的 BLE 串行示例 :github.com/.../ble_examples

    这些路径可能会因您安装的 SDK 而异、但一般来说、它们将包含在 TI RTOS 或 simplelink SDK 的安装中。

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

    为什么您会失去与主设备的同步? 您可以执行以下操作:
    解决方案1:如果您确切知道数据包长度。 您可以使用具有数据包长度的 UART 回调。

    解决方案2:如果您不能准确地知道数据包长度。 您可以使用循环缓冲区
    -为 UART 读取配置一个字节的串行任务。 然后、该任务进入睡眠模式并等待通过 UART 回调唤醒
    出现 UART 回调。 将 Rx 数据存储到循环缓冲器中。 唤醒串行任务。
    -唤醒后、串行任务将检查循环缓冲区中要处理的数据。
    -完成此过程后、串行任务将配置 UART 读取一个字节。 然后、该任务进入睡眠模式并等待通过 UART 回调唤醒
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢反叛分子和维伊的答复。  事实证明、问题(以及许多其他令人困惑的问题)是由制造商忘记的定制硬件上的组件导致的。  现在、使用 NPI 传输层、所有功能都正常。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    太棒了! 感谢您的报告-哪家制造商? (其他用户可能会发现这一点?)

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我经常不得不面对这一点:)。 因此、我通常使用开发套件来确保一切顺利。 这将有助于更轻松地找到原因