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.

[参考译文] CC2640R2L:BT

Guru**** 2522420 points
Other Parts Discussed in Thread: CC2640

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1308967/cc2640r2l-bt

器件型号:CC2640R2L
主题中讨论的其他器件:CC2640

您好!

我们有一个要求、即 TI bt 芯片 CC2640需要通过主机 CPU 进行控制、而 TI bt 芯片 CC2640需要 根据需要同时充当外设和中央设备。 我们找到了在 CC2640上运行"主机测试示例应用"的方法、并编写一个应用代码来发送 HCI/GAP/GAAT 消息。

  • 中央: 我们清楚这一点、并能够使用 Launchpad 通过"btool"验证相同的内容。  
  • 外设 : 我们有2个选项来使其工作
    • 使用 GATT_DB_OFF_CHIP 进行编译、并通过外部应用程序控制 GATT 服务器。 但问题是、  
      • 我们找不到一个实现了相同目标的示例。
      • 论坛不鼓励您选择这条路线。
      • 不确定我们可能会遇到什么坑洼地。 例如、在我们使用 GATT_AddService (0xFDFC)添加服务后、使用 GATT_AddAttribute (0xFDFE)添加属性无法确定如何启用 Notify (请查看 doc TI BLE 供应商特定 HCI 参考指南版本3.0.0)。  
      • 不幸的是、btool 也不支持验证此模式、
    • 阅读论坛,我们看到关于在固件中添加服务的建议,它自己并使用相同的示例(https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1096805/cc2652r-how-to-use-gatt-server-from-btool-host_test-app .我想知道实现以下两项目标的最佳方法是什么(假设固件本身中已添加了服务)
      • 我们的要求是、要写入此外设的任何数据都应发送到应用处理器。
      • 我们的要求 是应用处理器使用 NOTIFY 将数据发送到连接的中央设备。

您能否指导我们 实施外设的方法?

此致、

苏曼特·N

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

    你好,Sumanth 

    我相信这两种选择应该能够实现您正在寻找的功能。 我认为选项2从长远来看可能更好、因为这意味着您不必在每次设备引导时通过 HCI 命令重新创建服务。 您应该能够将服务/配置文件代码添加到项目中。 我建议参考自定义配置文件 SimpleLink Academy 实验、以了解有关创建您自己的自定义配置文件的信息。 我还建议参考 simple_peripheral 工程以查看如何将服务添加到现有工程。

    此致、

    1月

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

    大家好、Jan、

    感谢您的回复。

    在选择选项2时,想知道如何  将对该外设的写入发送到应用程序处理器?  更具体地说、应用处理器是否会接收 ATT_HandleValueInd (命令= 0xFD1D、事件= 0x051D)? 这样应用程序处理器就可以知道写入的值了吗?

    如果我们选择选项2从应用处理器向连接的中央设备发送通知,应用处理器需要发送什么命令?

    此致、

    苏曼特·N

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

    尊敬的 Sumanth:

    要启用通知、您需要将适当的数据写入 CCCD 以启用/禁用通知。 这可通过 GATT 写入操作来完成。 有关此方面的更多信息、请参考 自定义配置文件 SLA 实验室

    此致、

    1月

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

    大家好、Jan、

    我们已经完成了这个示例、但仍然无法获得我所提问题的答案。 您能帮我解决这个问题吗?

    "想知道如何将 写入此 外设的数据发送到应用处理器?  假定我已经如上面示例中显示的那样在 host_test 中添加了一个配置文件、并且它具有可写入的属性。 现在假设我从外部中心设备写入此属性。 此测试将出现在 cc2640芯片的 host_test 固件中。 现在如何从固件将相同的信息发送到应用程序处理器?"

    此致、

    苏曼特·N

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

    Sumanth、  

    Jan 目前 不在办公室、下周早些时候才能回复。 如果这是一个高优先级问题、但您无法在此期间解决此问题、请随时打开新问题。  

    谢谢。

    卢克

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

    尊敬的 Sumanth:

    可以为配置文件提供读取/写入回调、每当在特定特性上发生读取/写入时就会执行该回调。 这可能是捕获写入特征的数据并将其传递给应用的最佳方法。

    此致、

    1月

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

    大家好、Jan、

    从固件回调中,我们如何将写入外部应用程序处理器的数据转发给外部应用程序处理器? 我们是否应该为其添加自定义事件? 有一个同样的例子吗? 任何参考代码或任何指针对如何发送它?

    此致、

    苏曼特·N

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

    因此、您基本上想要回显从主机应用程序发送的数据?

    外设 cc2640是否会回显数据?

    我建议使用 iOS LightBlue 应用程序或 Android NRF Connect 作为主机应用程序。

    -克尔

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

    在我们的用例中  、CC2640需要通过主机 CPU 进行控制、即在我们的设置中、主机 CPU 是运行 Linux 的 ARM 处理器 、而 CC2640是需要由该 ARM 处理器控制的器件。 主机 CPU 是主设备。 它将决定 BT 必须在外设 模式下使用或用作中央模式。 如果希望 CC2640作为中央设备、它将决定连接到谁以及需要执行的操作。 如果它决定模式是否需要外设模式 、它将配置一些服务、这些服务将暴露写入和通知功能。 综上所述、我认为最好的办法就是在 CC2640上建立"主机测试示例应用"、并在主机 CPU 上编写一个应用代码、发送 HCI/GAP/GAAT 消息来实现相同的功能。

    对于 带有"host test"和"btool"的 Out 实验(就像 POC 一样)、我们明确了中心模式的工作。 我们想要的是外围 器件方面的帮助。

    如上所述、我确实在"主机测试固件"中添加了一个服务 、如 https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1096805/cc2652r-how-to-use-gatt-server-from-btool-host_test-app 中所述

    当外部移动应用程序连接到服务并执行写入操作时、数据将存储在 CC2640芯片上。 我们想要的是一种将此数据依赖给主机 CPU 的方法、以便它可以处理此数据。 你能帮助我做同样的方法吗?

    此致、

    苏曼特·N

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

    这将与多角色示例程序配合使用。 但由于存储器限制、您可以连接的器件数量受到限制。 因此、我建议使用具有更大闪存和 RAM 的 BLE MCU。

    -克尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们研究了两种方法、并专门制定了  1.  
    方法1:
    我们已经投入了很多个月的开发工作,通过使用"主机测试固件"来解决这个问题。 我们已经解决了以下问题  
    • 中央 配置文件。
    • 外设 配置文件-我们在此模式下添加了一项服务、并将移动设备连接至芯片。 我们只需要解决2小块拼图。

      [*A]将移动设备发送至芯片的数据发送给主机 CPU。 我们相信 写入可以在固件中进行回调、并且通过该回调、我们可以有一个自定义事件将数据发送到主机 CPU。 想了解这是否是正确的方法、如果想知道我们如何添加自定义事件。
      [*B]将数据从主机 CPU 发送到芯片 、以便它可以使用现有的功能 将数据发送到移动设备。 这可能需要我们添加自定义 GATT 命令。 想知道这是否是正确的方法、如果是、我们想知道如何添加相同的方法。
    因此、我们已经解决了双模 +与主机 CPU 的通信问题。 只有缺失的部分可能 包含一些定制命令。  
    方法2:  
    将我们的发展努力转向 多角色意味着我们将不得不抛弃目前的工作,而不是一个明确的路径,以多角色完成 ,无论是由于下面的原因。
    如果 您的专家认为方法1完全不可行、我们不介意重新启动。
    我们看到 muti 角色的问题如下:
    因此,如果你能用*A 和*B 来解锁我们,我将 不胜感激,除非你认为这是完全不可行的。  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、我认为您的主机 MCU 是通过蓝牙连接无线连接至 CC2640的。

    因此、CC2640使用有线连接或 UART 连接到主机 CPU。

    应使用网络处理器示例程序对 CC2640进行编程。 您基于 ARM 的主机 CPU 将发送 HCI 命令。 我是对吗?

    大多数情况下、这是主机 CPU 端为了实现您的要求而进行的大量编码。

    -克尔

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

    是的、使用 UART 连接到主机 CPU。 CC2640我认为应使用"主机测试"固件进行编程。 是的、主机 CPU 将发送  HCI/GAP/GaAT 消息。  

    是的、这需要对主机进行更多的工作。 我们相信、如果我们得到这两个问题的答案、就能够解决我们的问题。

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

    尊敬的 Sumanth:

    以下是我对您的两个问题的看法:

    [*A]将移动设备发送至芯片的数据发送至主机 CPU。 我们相信 写入可以在固件中进行回调、并且通过该回调、我们可以有一个自定义事件将数据发送到主机 CPU。 想要了解这是否是正确的方法,如果需要了解如何添加自定义事件。

    我认为在这里这将是正确的方法。 我建议添加一个移动设备可以写入的特征、并启用写入回调功能。 在写入回调中、您可以添加额外的逻辑以排队等待自定义事件、从而进行一些额外的处理(例如通过 NPI、UART、SPI 或其他一些通信协议将接收到的数据发送到主机 MCU。

    自定义配置文件 SLA 包含有关如何实施您自己的自定义配置文件以及有用的服务生成器的信息。 此外、还讨论了读取/写入回调。

    https://dev.ti.com/tirex/content/simplelink_academy_cc2640r2sdk_5_30_01_00/modules/blestack/ble_01_custom_profile/ble_01_custom_profile.html

    在 simple_peripheral 示例中,已有一个通过使用 SimplePeripheral_enqueueMsg ()函数的事件发布系统,且写入回调配置为调用 SimplePeripheral_charValueChangeCB ()。 为了在 host_test 中实现相同的配置、以作为开始使用这些引用会非常有用

    [*B]将数据从主机 CPU 发送到芯片 、以便它可以利用现有功能 将数据发送到移动设备。 这可能需要我们添加自定义 GATT 命令。 想知道这是不是正确的方法,如果是,我们想知道如何可以添加相同的方法。[/报价]

    应该能够实现自定义 NPI 命令来实现一些额外的功能、但您需要确保这在 host_test 端以及 CPU 端正确实现。

    此致、

    1月

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

    大家好、Jan、

    查看了  SimplePeripheral_enqueueMsg ()和 SimplePeripheral_charValueChangeCB ()。 从我的低估  SimplePeripheral_enqueueMsg ()将 事件从 ble 堆栈排队到固件上的应用堆栈,并且在应用堆栈 的上下文中,我们将使用 Profile_Get esoci eter()来获取已写入的值。 我的问题来自这里、如何将获取的数据发送到主机 CPU?

    1. 我们是否应该从 固件应用堆栈上下文中向主机 CPU 发送自定义事件。
    2. 是否有一个如何做同样的例子?
    3. 如果没有示例,你可以帮助我们如何实现同样的?

    此致、

    苏曼特·N

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

    您好!

    您对数据流方式的理解是正确的。 如何将数据从 CC2640R2器件传达给其他器件的确切方法由您决定。 您可以将另一个定制 HCI 事件/调用添加到 host_test 项目和主机 CPU、然后使用它。 这将允许您利用现有的 NPI 设置。 您可以在 CC2640R2和主机 CPU 之间设置单独的 UART/SPI/I2C/ETC 连接以发送应用数据。 此处要遵循的路径将取决于您的系统架构和您的偏好。

    我们没有专门展示此特性的示例、但我们确实 有前面提到的 host_test 示例以及一些可能也有用的 I2C、SPI、UART 示例。

    此致、

    1月

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

    大家好、Jan、

    感谢您的指导。 我们尝试实现相同的功能。 如果我们遇到困难、我们会向您提出更多问题。

    此致、

    苏曼特·N

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

    尊敬的 Sumanth

    没问题! 听起来不错! 我现在将关闭此主题、但如果您有任何问题、请随时回复此消息、我会尽快回复您。 如果主题帖已锁定、请打开相关问题、我们将在新主题帖中为您提供支持。

    此致、

    1月