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:端口 ti ble5stack 至 Zephir 项目

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1063614/cc1352p-port-ti-ble5stack-to-zephyr-project

器件型号:CC1352P
主题中讨论的其他器件: CC2651P3CC2651R3

你(们)好

我正在研究该项目的 BLE 支持。 如您所见、我们正在使用 Zephir 项目来实现我们的想法。

https://github.com/beagleboard/beagleconnect

我们可以考虑在 Zephir 上实现 BLE 功能支持的两种方法。

  • 使用 Zephir 的 BLE 协议栈、直接使用从 MAC 层移植的 Simplelink 射频 API。

虽然这种办法需要大量工作,但我们仍然作出了一些努力。 下面是我们在团队中完成的一些工作、您可以看到、只有部分广播功能、我们很难继续。 主要原因是 Zephir 的 BLE 堆栈不是为 TI 的 MCU 设计的、而是更适合具有超过128K RAM 的 Nordic MCU。 CC1352P 只有80K 的 RAM、因此很难朝这个方向发展。

https://github.com/cfriedt/zephyr-old/tree/simplelink-ble-for-zephyr/subsys/bluetooth/controller/ll_sw/ti

 https://github.com/leadercxn/zephyr/tree/cc135x_ble

  • 从 HCI 层开始、顶层应用程序使用 Zephyr 功能。

从这里开始可能更合适、我们已经看到了 Zephir 项目中的许多实施、例如 esp32、stm32wb、甚至 nrf53系列、它们应该是更合适的行。

https://github.com/zephyrproject-rtos/zephyr/tree/main/drivers/bluetooth/hci

我们甚至看到您在官方文档中提供了一些指导。 这些图表非常有用、并且非常清楚地说明了要做什么。

https://software-dl.ti.com/simplelink/esd/simplelink_cc13x2_26x2_sdk/5.20.00.52/exports/docs/ble5stack/ble_user_guide/html/ble-mesh/ti-zephyr-overview.html

但当我们朝这个方向开始时、我发现 TI ble5stack 强烈绑定到 TI RTOS、无法移植到第三方 RTOS。

simplelink_cc13x2_26x2_sdk_5_20_00_52/source/ti/ble5stack/iCall/src/iCall.c

/rom/enc_lib/c26xx_ecc_rom_api.a
/rom/r2/rt_init/rt7M_tL.a
/libraries/cc1352p/OneLib.A
/libraries/cc1352p/StackWrapper.A
/libraries/cc13x2r1/OneLib.A
/libraries/cc13x2r1/StackWrapper.A
/libraries/cc2651p3/OneLib.A
/libraries/cc2651p3/StackWrapper.A
/libraries/cc26x2r1/OneLib.A
/libraries/cc26x2r1/StackWrapper.A
/libraries/cc2651r3/OneLib.A
/libraries/cc2651r3/StackWrapper.A

/* Note that a static variable can be used to contain critical section
 * state since heapmgr.h template ensures that there is no nested
 * lock call. */
static ICall_CSState ICall_heapCSState;
#if defined(HEAPMGR_CONFIG) && ((HEAPMGR_CONFIG == 0) || (HEAPMGR_CONFIG == 0x80))
#include <rtos_heaposal.h>
#elif defined(HEAPMGR_CONFIG) && ( (HEAPMGR_CONFIG == 1) || (HEAPMGR_CONFIG == 0x81))
#include <rtos_heapmem.h>
#elif defined(HEAPMGR_CONFIG) && ( (HEAPMGR_CONFIG == 2) || (HEAPMGR_CONFIG == 0x82))
#include <rtos_heaptrack.h>
#else
#include <rtos_heaposal.h>
#endif

1、您能否提供代码示例以验证您的正式文档中的图表?

2、如果1无法帮助我们、 我们如何使 TI BLE3STACK 与 TI RTOS 解除绑定、我们可以使用 Zephir RTOS 作为协议栈运行的内核。

3、如果我们想实现我们的想法、您有哪些更好的建议?  

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

    您好、Baozhu、

    我现在将其分配给一位专家。

    最好

    不需要

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

    嘿、Baozhu、

    这是您开始的一个非常有趣且具有挑战性的项目!

    您已经达到要点、并考虑了在我们的器件上使用 Zephir 的 BLE 堆栈所面临的挑战。 请注意、此最终案例没有任何示例、SDK 中也没有此示例、因此我只能通过鸟瞰图为您提供帮助、而不提供具体细节。

    [引用 userid="508442" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1063614/cc1352p-port-ti-ble5stack-to -Zephir-project"]

    1、您能否提供代码示例以验证您的正式文档中的图表?

    [/报价]

    simple_mesh_node 示例旨在利用 Zephir Mesh 堆栈。 这可能是 SDK 中可用的最接近终端应用的起点。 此示例专为使用蓝牙网状网络的节点而设计。 更具体地说、添加了移植层、以便我们可以使用 Zephir Mesh 提供的更高级别的堆栈功能、同时使用 TI BLE5堆栈的更低层来完成其余工作。 如果导入 simple_mesh_node,则应能够在移植端引用 mesh>ti>ble。

    [引用 userid="508442" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1063614/cc1352p-port-ti-ble5stack-to -Zephyr-project"]2、如果1无法帮助我们、 我们如何让 TI BLE3STACK 与 TI RTOS 解除绑定、我们可以使用 Zephyr RTOS 作为运行协议栈的内核[]。

    您可以尝试手动删除 TIRTOS 上的依赖项、这将是一项巨大的工作。 正如您指出的那样、你必须修改堆跟踪、因为它是由堆管理器完成的。

    [引用 userid="508442" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1063614/cc1352p-port-ti-ble5stack-to -Zephyr-project"]3、如果我们想实现自己的想法、您有哪些更好的建议?  [/报价]

    另一种选择是使用我们的 host_test 项目并实施双芯片解决 方案、使用另一个器件作为主机、您可以在其中使用 Zephir 蓝牙 LE 堆栈并使用 HCI 层与 MCU 进行通信。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="314474" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1063614/cc1352p-port-ti-ble5stack-To-Zephir-project/3936148#3936148"]您可以尝试手动删除 TIRTOS 上的依赖项,这将是一项巨大的努力。 正如您指出的那样、您必须修改堆跟踪、因为它是由堆管理器完成的。

    感谢您的支持、让我们从这里开始。 Zephir RTOS 具有良好的堆管理器。 捆绑 TI-RTOS 是此项目中最大的工作。

    如您所见、我无法查看以下二进制文件的源代码。 我无法知道它使用的 TI RTOS API。 您能否输出未针对 BLE5Stack 中使用的代码打开的所有 TI RTOS API 的列表?  

    ./rom/enc_lib/cc26xx_ecc_rom_api.a
    ./rom/r2/rt_init/rt7M_tl.a
    ./libraries/cc1352p/OneLib.a
    ./libraries/cc1352p/StackWrapper.a

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

    嘿、Baozhu、

    我看到 CC26X2的示例目录中有一个 multi_role.c 的 FreeRTOS 版本 您可以将其称为您要查找的内容。 也许您可以从这里开始、看看这是否是一个可行的起点。

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

    您好 Ammar,

    我在 multi_role 文件夹中找不到任何 FreeRTOS 代码。 您使用哪种 SDK?

    baozhu@bz:~/ti/simplelink_cc13x2_26x2_sdk_5_20_00_52$ find ./ -name multi_role.c
    ./examples/rtos/LP_CC1352P7_4/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352P_2_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352P1_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC26X2R1_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/LP_CC2652R7/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/LP_CC2652RB/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352P_4_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352R1_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/LP_CC1352P7_1/ble5stack/multi_role/Application/multi_role.c
    baozhu@bz:~/ti/simplelink_cc13x2_26x2_sdk_5_20_00_52$ cd ./examples/rtos/CC26X2R1_LAUNCHXL/ble5stack/multi_role/
    baozhu@bz:~/ti/simplelink_cc13x2_26x2_sdk_5_20_00_52/examples/rtos/CC26X2R1_LAUNCHXL/ble5stack/multi_role$ grep -nr freertos .
    baozhu@bz:~/ti/simplelink_cc13x2_26x2_sdk_5_20_00_52/examples/rtos/CC26X2R1_LAUNCHXL/ble5stack/multi_role$ 
    
    

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

    它在最新的 SDK 中提供、5.30: https://www.ti.com/tool/SIMPLELINK-CC13XX-CC26XX-SDK

    注意:SDK 在5.30中刚刚重命名、因此有关 SDK 的进一步更新、请参阅上述 SDK 链接。

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

    尊敬的 Ammar:

    圣诞节快乐!

    5.30和5.20版本之间没有任何区别。 multi_role 文件夹中仍然没有 FreeRTOS 代码。

    baozhu@bz:~/ti/simplelink_cc13xx_cc26xx_sdk_5_30_01_01$ find ./ -name multi_role.c
    ./examples/rtos/LP_CC1352P7_4/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352P_2_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352P1_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC26X2R1_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/LP_CC2652R7/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/LP_CC2652RB/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352P_4_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/CC1352R1_LAUNCHXL/ble5stack/multi_role/Application/multi_role.c
    ./examples/rtos/LP_CC1352P7_1/ble5stack/multi_role/Application/multi_role.c
    baozhu@bz:~/ti/simplelink_cc13xx_cc26xx_sdk_5_30_01_01$ grep -nr freertos ./examples/rtos/CC1352P1_LAUNCHXL/ble5stack/multi_role 
    baozhu@bz:~/ti/simplelink_cc13xx_cc26xx_sdk_5_30_01_01$ 
    

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

    嗯、我不确定我们缺少什么。 下面是 FreeRTOS 配置的完整路径:

    C:\ti\simplelink_cc13xx_cc26xx_sdk_5_30_01_01\examples\rtos\CC26X2R1_LAUNCHXL_ble5stack\multi_role\freertos

    很明显、FreeRTOS 没有单独的项目、该项目维护相同的项目文件。 例如、在 multi_role.c 中、您应该会看到 您可以遵循的 FreeRTOS 的#ifdefs。

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

    您好!

    我只需在 CC1352P 文件夹中搜索 multi_role。  但您指出它仍位于 CC26X2R1中。  CC1352P 和 CC26X2R1之间的 BLE 区别是什么?  它们是否兼容?

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

    您好、

    这里有一个相关的帖子 、解释了电路板之间的差异。 在有关 BLE 的代码方面、应用层之间的差异应该最小。 此处的目的是使用 CC26X2R1作为参考、以帮助您开始项目。