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.

[参考译文] CC2340R5:连接器件-中心角色、GAP 发起方

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1420110/cc2340r5-connecting-devices---central-role-gap-initiator

器件型号:CC2340R5
Thread 中讨论的其他器件: SysConfigBLE-STACK

工具与软件:

CCS 版本:12.7.1.

SDK 版本:8.10.01.02

项目: basic_ble
从 basic_ble 工程中删除了 menu.c。

SYSCONF:  
启用的外设+中心角色。

已配置常规配置。


已配置中央配置。

已配置外设配置。


配置的是 FreeRTOS。

选择"Central"后、我必须减少堆

在项目中添加

UART 用于配置和管理连接。
连接通过 UART 初始化、并指定器件地址。

调用连接的函数

静态 bool Connect_Device (uint32_t dev_addr)

bool ret=false;
uint8_t addr[8]={0、0、0、0x50、0xBF、 0xA0、0、0};

addr[2]=(dev_addr >> 16)和0xff;
addr[1]=(dev_addr >> 8)和0xff;
addr[0]= dev_addr & 0xff;

//暂时禁用广播
BLEAppUtil_advStop (peripheralAdvHandle_1);
//设置连接参数
BLE4.12.4510ams_t Util_Connect connParams ={
.peerAddrType = ADDRTYPE_PUBLIC 和 MASK_ADDRTYPE_ID、
.phys = DEFAULT_INIT_PHY、
.TIMEOUT = 0
};
//复制选定的地址
memcpy (connParams.pPeerAddress、addr、B_ADDR_LEN);
//启动连接
if (BLEAppUtil_connect (&connParams)== Success){
RET = true;
}
// Re 启用广播
BLEAppUtil_advStart (peripheralAdvHandle_1、&advSetStartParamsSet_1);

回流塔;
}

在外设模式下、该器件可以正常工作。
激活 GAP 启动器 BLEAppUtil_connect 函数返回成功。
但没有事件,正如我所理解的,没有连接。
Connection_start 和 Central_start 函数也会返回成功。
上面给出的我的 Connect_Device 函数的实现方式与 menu.c 中的相似

怎么了? а CC2340R5不发挥 Ω 的核心作用?


注意:基于 CC2642R1的类似工程正常运行。
Wireshark 显示正在从连接的器件广播。

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

    您好!  

    感谢您联系我们。  

    首先、我鼓励您评估连接是否成功建立。 可以通过查看器件的射频调试信号或使用比您拥有的更高级的蓝牙监听器来完成此操作。 作为参考、 调试指南 在此处展示了如何启用射频调试信号。  

    您还应确保器件保持响应、并检查堆和堆栈使用情况- 请参阅此处的 ROV 使用情况

    我希望这将有所帮助、

    此致、

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

    你可以看到、堆和任务一切都正常。
    器件保持响应、器件正在通过 BLE 进行连接。

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

    您好!  

    感谢您的分享、堆栈和堆看起来不错。  

    以下是您 应该考虑的其他因素:

    • 我看到您在启动连接之前禁用了广播。 这是一个好主意、因为它可以最大限度地增加可用的广播时间。 但是、您的方法并不完全正确、因为只有建立连接(或达到连接建立超时)后才应重新启用广播。  
    • 确保将要连接的地址传递到器件的方式没有错误。 您可以通过硬编码来确保这一点  
    • 我看到仅授权了一个连接(参阅 SysConfig)-此数字是连接总数(包括作为中央和作为外设的连接数量)。  
    • 确保  DEFAULT_INIT_PHY 是1M PHY  

    此致、  

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

    您好!
    感谢您的回答。

    1) 1)我做的第一件事是确保我所连接的设备的地址正确。

    2) 2) DEFAULT_INIT_PHY 是1M PHY

    3) 3) 我更正了参数"Max Number of Connections"= 2。 结果相同、缺少事件。

    4) 不幸的是,我没有任何其他机制来检查连接比 Wireshark。 因为我没有调试板。

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

    您好!  

    [报价 userid="603019" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1420110/cc2340r5-connecting-devices---central-role-gap-initiator/5446413 #5446413"]4) 很遗憾、我没有其它机制来检查 Wireshark 之外的连接。 因为我没有调试板。

    -您是否能够在 TI LaunchPad 上重现此问题?

    - 如果尚未完成,请检查以下内容:

    我看到您在发起连接前禁用了广播。 这是一个好主意、因为它可以最大限度地增加可用的广播时间。 但是、您的方法并不完全正确、因为只有建立连接(或达到连接建立超时)后才应重新启用广播。  [报价]

    此致、  

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

    1) 1)很遗憾、我没有库存的 TI LaunchPad。 我刚在星期五订购、将能够在本周结束前进行检查。
    2)我尝试不禁用广告在所有,它没有帮助.
    但想法本身是以下的。 我在发送 BLEAppUtil_connect 命令之前禁用了广告。 同时、我将超时设置为7秒。 根据我的理解、BLEAppUtil_connect 命令会进行阻塞。 完成 BLEAppUtil_connect 命令后、我可以安全地启用 ADS。

    请告诉我。 CC2340是否可以同时作为外设连接、并作为中央设备将其他器件本身连接? 或者在将其他器件连接到中央角色时、是否需要断开外设连接?

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

    您好、Clement、

    在此处添加最新更新:

    我查看了有关启用调试输出射频的推荐文档。
    我已经将设置添加到工程的 SysConfig 中:

    以前、"Max Number of Connections"设置为1。 据我所知、这是已连接设备的最大数量。
    但文档中不清楚。 是否为连接总数(包括外设和中央设备)?
    还是仅适用于 Central 的活动连接数?
    更改"Max Number of Connections"参数后、没有任何更改、仍然没有连接事件。

    然后、我需要用分析仪连接到 DIO9/3和 DIO11/5引脚、并从这些输入捕获迹线。
    是否需要在连接开始时同步迹线? 如何实现?
    我们能否为此使用另一个引脚、在启动时将输出哪个逻辑1?

    我想再强调一些在我最初的电子邮件中没有描述的内容。
    若要启动连接、需要调用 BLEAppUtil_connect (&connParams)函数。
    在结构中、connParams 尝试设置从0到30000的不同超时。
    但是对 BLEAppUtil_connect 命令的反应始终相同。
    无论我设置了什么超时、BLEAppUtil_connect 命令始终会在不超过1s 的时间内终止并返回成功。
    因此、命令无法正常运行、设置有问题、或者1s 内始终存在连接

    还有一点。 如果我设置 TIMEOUT = 0、则会 在中设置几次(2-3次)  BLEAppUtil_processGAPEvents (BLEAppUtil_msgHdr_t * pMsg)处理程序我收到了  GAP_Connecting_Canceled_event  提供一个路径。
    此外、在 BLEAppUtil_connect 命令完成后、我可以通过外设连接 device1。
    因此、ble-stack 始终保持有效。

    事实证明我目前缺少 CC2340套件。
    我会让我们的测试仪把它发送给我、或者让硬件人员将电线焊接到 DIO9/3 DIO11/5引脚。
    因此获取布线将存在轻微延迟。

    谢谢!

    Aida

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

    您好!  

    [报价 userid="603019" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1420110/cc2340r5-connecting-devices---central-role-gap-initiator/5447652 #5447652"]1)很遗憾、我没有 TI LaunchPad 库存。 我刚在星期五订购、将能够在本周结束前进行检查。
    [报价]

    您的设计与 TI LaunchPad 有何差异? 您是否在使用低频晶体(32kHz)?

    据我所知、BLEAppUtil_connect 命令正在阻塞。

    我恐怕这里有一个困惑。  BLEAppUtil_connect()是  不会 阻塞。  
    然后、我的建议是确保 在建立连接之前禁用广播。  

    请告诉我。 CC2340是否可以同时作为外设连接、并作为中央设备将其他器件本身连接? 或者在将其他设备连接到中央角色时是否需要断开外设连接?

    CC2340经过测试、可 同时保持多达8个连接(既可作为中央连接、也可作为外设连接)。  
    我关于禁用广告的建议是最大限度地增加可用的广播时间、但如果连接间隔和广播间隔足够大、则不需要。  

    此致、  

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

    您好!

    先前、最大连接数设置为1。 据我所知、这是已连接设备的最大数量。
    但文档中不清楚。 是否为连接总数(包括外设和中央设备)?
    还是仅中心的活动连接数?

    我确认您在此引用的是 一般配置、因此您设置了最大连接数量(即外设连接和中央连接之和)。  

    [报价 userid="531262" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1420110/cc2340r5-connecting-devices---central-role-gap-initiator/5447870 #5447870"]然后、我需要使用分析器连接 DIO9/3和 DIO11/5引脚、并从这些输入捕捉走线。
    是否需要在连接开始时同步迹线? 如何实现?
    为此、我们是否可以使用另一个引脚、启动时将输出哪个逻辑1?[/QUOT]

     一般而言、各种状态下预期的无线电活动是很容易识别的、因此您在这里不需要任何特殊情况。 如果你想"标记"你的日志,你可以在调用  BLEAppUtil_connect()之前切换第三个 GPIO。

    我想再强调几件我最初电子邮件中未提及的事情。
    若要启动连接、需要调用 BLEAppUtil_connect (&connParams)函数。
    在结构中、connParams 尝试设置从0到30000的不同超时。
    但是对 BLEAppUtil_connect 命令的反应始终相同。
    无论我设置了什么超时、BLEAppUtil_connect 命令始终会在不超过1s 的时间内终止并返回成功。
    因此、命令无法正常运行、设置有问题、或者1s 内始终存在连接 [报价]

    这是预期的,因为 BLEAppUtil_connect()不是阻塞函数。  

    我希望这将有所帮助、

    此致、  

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

    您好!
    非常感谢您的澄清。
    SimpleLink CC23xx SDK BLE5-Stack 用户指南中 GAP 引发器下存在一条警告

    <当初始化超时设置为0 (无限期等待)时、CC23xx 将保持启动器角色、直到成功建立连接。 如果在建立连接之前外围设备从网络中消失、则发起方退出该状态的唯一方法是调用 GapInit_cancelConnect () 或 BLEAppUtil_cancelConnect()。>

    我感到困惑。 从这个警告,我理解了以下。 调用 BLEAppUtil_connect()函数后、进入启动程序模式、所有内容将被阻止、直到建立连接或必须发出 BLEAppUtil_cancelConnect ()命令以退出启动程序模式。
    非零超时的工作方式与此相同。 在指定超时后、发起方将使用连接设备 或与进行通信 并终止其工作。

    这就是我们的实施方案的外观

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

    您好!  

    我谨建议您通过以下链接申请进行设计审查: https://www.ti.com/tool/SIMPLELINK-2-4GHZ-DESIGN-REVIEWS

    此致、  

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

    您好!
    感谢您的建议。
    我们将通过区域经理使用此服务并执行设计审查。

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

    您好!
    我在 CC2340R5上获取了 LaunchPad。

    从 SDK_8_10_01_02中获取原始工程 basic_ble。

    更改了 SysConfig
    1) 1)  器件角色 =
    2) 2) 最大连接数=<2>

    添加了一个任务 IBUS_task 、30秒后、尝试连接一个具有指定地址的器件。
    此任务在 APP_MAIN 中运行。

    void appMain (void)

      //调用 BLEAppUtil 模块初始化函数
      BLEAppUtil_init (App_Stack itDoneHandler,
                   &appMainParams,&appMainPeriCentParams);
       iBus_createTask();

    }


    void * iBus_task (void * arg0)

       struct timespec taskTimer;
       //创建信号量
       int32_t semConnectStatus = sem_init (&semConnect、0、0);
       if (semConnectStatus!= 0)
       {
         /*创建信号量时出错*/
         while (1){}
       }

      for (;;){
         //信标检查周期30s
         Clock_gettime (clock_monotonic、&taskTimer);
         taskTimer.tv_sec += IBUS_WAIT_Semaphore_SEC;
         //正在等待信标
         sem_timedwait (&semConnect、&taskTimer);
         Start_Connect ();
      }
    }

    静态 bool Start_Connect (空)

      //对设备寻址
      uint8_t addr[8]={0x28、0xE0、0x03、0x50、0xBF、 0xA0、0、0};
      bool ret = false;
      //检查连接
      if (FLAG_CONNECT == false){
         GPIO_WRITE (CONFIG_GPIO_LED_GREEN、1);
         //设置连接参数
         BLE4.12.4510ams_t Util_Connect connParams ={
           .peerAddrType = ADDRTYPE_PUBLIC 和 MASK_ADDRTYPE_ID、
           .phys = init_phy_1M、
           .TIMEOUT = 10000、
         };
         //复制选定的地址
         memcpy (connParams.pPeerAddress、addr、B_ADDR_LEN);
         //启动连接
         if (BLEAppUtil_connect (&connParams)== Success){
          RET = true;
        }
        GPIO_WRITE (CONFIG_GPIO_LED_GREEN、0);
       }
    回流塔;
    }

    我正在启动该项目以供执行。
    检查堆栈启动时没有错误。
    30秒后、Start_Connect 函数被调用并全部冻结。
    我一步一步地找到它悬挂的地方。


    元件 、函数 .

    iCall_errno_unknown_thread =-5
    当通过 iCall_EnrollService 或通过 iCall_registerApp 从尚未注册实体的线程调用此函数时。

    在我的标准器件上以类似的方式调用 Start_Connect 函数、但它没有在那里挂起、也没有错误。

     

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

    您好!  

    [报价 userid="603019" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1420110/cc2340r5-connecting-devices---central-role-gap-initiator/5455658 #5455658"]ICALL_errno_unknown_thread =-5
    当通过 iCall_EnrollService 或 iCall_registerApp 从尚未注册实体的线程调用此函数时。[/QUOT]

    如您所述、  如果访问 BLEStack 的线程/任务尚未注册调用 iCall_registerApp、则会生成 ICALL_errno_unknown_thread。 使用 BLEAppUtil 框架时、可在 BLEAppUtil_stackRegister 中进行此调用。  
    以下链接中提供了相同的信息: https://software-dl.ti.com/simplelink/esd/simplelink_lowpower_f3_sdk/8.10.01.02/exports/docs/ble5stack/ble_user_guide/html/freertos/tasks.html#creating-additional-icall-enabled-tasks 

    为了解决您的问题、我认为您应该:

    1. 打开 SysConfig -> BLE -> Advanced Settings -> ICALL 并在"Maximum Number of ICall Enabled Tasks"条目中添加一个。

    2. 在  iBus_task()开头添加以下代码
      // Register to the stack and create queue and event
      BLEAppUtil_stackRegister();

    我希望这将有所帮助、

    此致、  

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

    您好!
    我做了你建议的所有更改、但它没有解决问题。
    该错误仍然是相同的 ICALL_errno_unknown_thread =-5。

    我不明白为什么我们需要在堆栈中执行另一个注册 AppUtil?
    我们已经在创建 BLEAppUtil_createBLEAppUtilTask​​任务时的 BLEAppUtil_init 阶段执行了此操作。

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

    我重新生成了 Start_Connect 函数调用。
    现在没有错误、并且连接显示为事件 BLEAPPUTIL_LINK_ESTABED_EVENT。 我还获取了连接计数器的编号。
    事实证明、它能在 LaunchPad Connect 上工作。
    我将尝试比较原始 basic_ble 工程设置与标准软件的不同情况。

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

    请告诉我、我是否收到事件 BLEAPPUTIL_LINK_ESTABED_EVENT。
    值 gapEstMsg->devAddr 是否是连接期间接收到的实值?
    或者它是在 Util_Connect string.h 中指定的地址吗?

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

    您好!

     接收到 BLEAPPUTIL_LINK_ENVERSED_EVENT 时由 gapEstMsg->devAddr 保留的地址 是连接期间接收到的地址。  

    此致、  

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

    您好!
    告诉我、应在"中央配置"中为"监控超时"设置什么时间?
    以及它应该如何与 BLE3824MAMS_t Util_Connect 结构中的超时相关联?

    BLE4.12.4510ams_t Util_Connect connParams ={
    .peerAddrType = ADDRTYPE_PUBLIC 和 MASK_ADDRTYPE_ID、
    .phys = init_phy_1M、
    .timeout = 5000、
    };

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

    您好!
    我想强调以下几点。 它是随机确定的。
    如果在中央配置中、"监测超时"参数设置为大于 BLE387V Util_Connect 387ams_t 结构中的超时值、则会发出所有工作和事件。
    事实证明、GapInit_connect 函数应监控这些参数并返回错误、但实际上始终会返回成功。

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

    您好!
    会生成连接事件、但出于某种原因、连接参数 connectionHandle = 0。



    该情况出现在标准器件和 LaunchPad 上。

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

    您好!  

    [报价 userid="603019" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1420110/cc2340r5-connecting-devices---central-role-gap-initiator/5459041 #5459041"]

    会生成连接事件、但出于某种原因、连接参数 connectionHandle = 0。

    [报价]

    做得好、这些都是好消息。

    当  connectionHandle 为0时、这完全符合预期、因为第一个连接句柄通常为0。 请注意、无效的连接句柄是0xFFFF。  

    此致、