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.

[参考译文] CC2541:不键合

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1056975/cc2541-not-bonding

器件型号:CC2541

您好!

我的控制器 CC2541不能与 Motog 手机绑定。 以下是日志:

NRF Connect、2021-11-25
无名称(B0:B1:13:85:DD:88)
V 23:21:19.615正在开始配对...
D 23:21:19.615 device.createBond()
D 23:21:19.681 [广播]操作接收到:android.bluetooth.device.action.BOND_STATE_CHANGED、绑定状态更改为:bond_bonding (11)
D 23:21:19.690 [广播]操作接收到:android.bluetooth.device.action.BOND_STATE_CHANGED、键合状态更改为:BON_NONE (10)
I 23:21:19.690定色失败
D 23:21:21.583 [回调]连接状态已更改、状态为0、新状态为已连接(2)
I 23:21:21.583连接到 B0:B1:13:85:DD:88
I 23:21:21.599从0000fd02-0000-1000-8000-00805f9b34fb 接收的通知、值:(0x) 81-FF-00-42-00-02-19-5E-0E
收到 a 23:21:21.599 "(0x) 81-FF-00-42-00-02-19-5E-0E"
v 23:21:21.646正在查找服务...
D 23:21:21.646 GATT.discoverServices()
已更新 I 23:21:22.042连接参数(间隔:7.5ms、延迟:0、超时:5000ms)
D 23:21:22.747 [Callback]服务发现状态为0
I 23:21:22.747已发现服务
V 23:21:22.796通用访问(0x1800)
-器件名称[R](0x2A00)
-外观[R](0x2A01)
-外设隐私标志[R](0x2A02)
-重新连接地址[W](0x2A03)
-外设首选连接参数[R](0x2A04)
通用属性(0x1801)
-服务已更改[i](0x2A05)
   客户端特征配置(0x2902)
器件信息(0x180A)
-系统 ID [R](0x2A23)
-模型编号字符串[R](0x2A24)
-序列号字符串[R](0x2A25)
-固件版本字符串[R](0x2A26)
-硬件版本字符串[R](0x2A27)
-软件版本字符串[R](0x2A28)
-制造商名称字符串[R](0x2A29)
- IEEE 11073-20601法规认证数据列表[R](0x2A2A)
- PnP ID [R](0x2A50)
未知服务(0000fa00-0000-1000-8000-00805f9b34fb)
-未知特征[R W](0000fa01-0000-1000-8000-00805f9b34fb)
-未知特性[N WNR](0000fa02-0000-1000-8000-00805f9b34fb)
   客户端特征配置(0x2902)
未知服务(0000fb00-0000-1000-8000-00805f9b34fb)
-未知特性[N R](0000fb01-0000-1000-8000-00805f9b34fb)
   客户端特征配置(0x2902)
-未知特性[R W](0000fb02-0000-1000-8000-00805f9b34fb)
-未知特性[N W](0000fb03-0000-1000-8000-00805f9b34fb)
   客户端特征配置(0x2902)
-未知特性[N R](0000fb04-0000-1000-8000-00805f9b34fb)
   客户端特征配置(0x2902)

控制器在其他手机中被绑定、有时也会在那里失去绑定、因此无法发现。 然后需要进行粉末循环休息。

我的初始化代码位于此处:

 

uint16 scanduration = 6000U; 
  uint16 advertOffTime = 2000U;
  uint16 advertisingduration = 2000U;
  uint8 enable_update_request = FALSE;//TRUE;
  uint16 desired_min_interval = 20U;
  uint16 desired_max_interval = 20U;
  uint16 desired_slave_latency = 0U;
  uint16 desired_conn_timeout = 1000U;
  uint16 rssi_read_rate = 500U;
  uint8 initial_advertising_enable = TRUE;

  // Set the GAP Role Parameters
  GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
  GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &advertOffTime );
  GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, scanResponseLength, scanRspData );
  GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );
  GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_ENABLE, sizeof( uint8 ), &enable_update_request );
  GAPRole_SetParameter( GAPROLE_MIN_CONN_INTERVAL, sizeof( uint16 ), &desired_min_interval );
  GAPRole_SetParameter( GAPROLE_MAX_CONN_INTERVAL, sizeof( uint16 ), &desired_max_interval );
  GAPRole_SetParameter( GAPROLE_SLAVE_LATENCY, sizeof( uint16 ), &desired_slave_latency );
  GAPRole_SetParameter( GAPROLE_TIMEOUT_MULTIPLIER, sizeof( uint16 ), &desired_conn_timeout );
  GAPRole_SetParameter( GAPROLE_RSSI_READ_RATE, sizeof( uint16 ), &rssi_read_rate );
  GAPRole_SetParameter( TGAP_LIM_DISC_SCAN, sizeof( uint16 ), &scanduration );
  GAPRole_SetParameter( TGAP_GEN_DISC_ADV_MIN, sizeof( uint16 ), &advertisingduration );
  

  // Set the GAP Characteristics
  GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName );

  //GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, advertisingduration );
  // Set up the advertising interval
  static const uint16 advInt = 500U; //500before
  GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
  GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
  GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
  GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );    

  // Initialise the observer
  {
    uint8 scanRes = 60;
    GAPRole_SetParameter ( GAPOBSERVERROLE_MAX_SCAN_RES, sizeof( uint8 ), &scanRes );
  }
  // Setuo Scanning interval 

  GAP_SetParamValue( TGAP_LIM_DISC_SCAN_INT, 160  ); //Interval between the start of two consecutive scan windows (100ms)
  GAP_SetParamValue( TGAP_LIM_DISC_SCAN_WIND, 128 ); //The duration in which the Link Layer scans on one channel, (80 ms)
  
  // Setup the GAP Bond Manager
  uint32 passkey = 0;
  uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE;
  uint8 mitm = FALSE;
  uint8 ioCap = GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT;
  uint8 bonding = TRUE;
  //uint8 bondAction = GAPBOND_FAIL_TERMINATE_ERASE_BONDS;//GAPBOND_FAIL_TERMINATE_LINK;
  
  
  GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof ( uint32 ), &passkey );
  GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof ( uint8 ), &pairMode );
  GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof ( uint8 ), &mitm );
  GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof ( uint8 ), &ioCap );
  GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof ( uint8 ), &bonding );
  //GAPBondMgr_SetParameter( GAPBOND_BOND_FAIL_ACTION, sizeof ( uint8 ), &bondAction );

  
  //GAPBondMgr_SetParameter(GAPBOND_ERASE_ALLBONDS, 0U, NULL);
  
  // Initialize required GATT services
  GGS_AddService( GATT_ALL_SERVICES );

当器件未连接时(如下所示)、我是否需要定期调用广播、或者 BLE 堆栈将自动处理广播?

 if(gapRole_state != GAPROLE_CONNECTED && gapRole_state != GAPROLE_CONNECTED_ADV)
 {
        periph_mode = osal_start_timerEx( gapRole_TaskID, START_ADVERTISING_EVT, 1 );
 }

当我检查 b债券[index].publicAddr 时,我看到 MOTOG 的蓝牙设备地址仍然存在于寄存器中。

我找不到发生这种情况的原因吗? 我的 RAM 存储器几乎被消耗了。 它在这里是否有任何依赖关系?

期待您的建议。 谢谢你。

最棒的

瓦伦

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

    尊敬的 Varun:

    对于绑定问题、我建议使用 BLE 监听器日志来获取有关失败原因的更多信息。
    目前调试有点困难、因为 CC2541认为绑定过程成功、而手机没有提供任何详细信息。

    我已经检查了您的初始化代码中设置的参数。 也许值得一看的是、更改其中的某些内容是否会有所帮助。 例如、我想知道手机是否可以拒绝 MITM=false 的绑定尝试。

    在所有情况下、当 RAM 几乎已满时、预计您会遇到一些内存损坏、从而可能导致器件无响应。

    我希望这将有所帮助、

    此致、

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

    您好 Clement、

    感谢您提供一些指导。 我正在阅读监听器日志 here.e2e.ti.com/.../Log-2021_2D00_11_2D00_26-13_5F00_57_5F00_53.txt

    我的内存使用情况最初如下:

    132 261字节代码内存(+ 14 923范围填充)
    35字节数据存储器(绝对值+ 80)
    7 859字节的 XDATA 内存
    179字节 iDATA 内存(+ 1绝对值)
    8位存储器
    900字节 const 存储器

    我尝试禁用部分器件以减少存储器(不是大约400字节)、如下所示

    126 204字节代码内存(+ 20 980范围填充)
    35字节数据存储器(绝对值+ 80)
    7 742字节的 XDATA 内存
    179字节 iDATA 内存(+ 1绝对值)
    8位存储器
    763字节 const 存储器

    并使 MITM= true。 但运气不好。

    最棒的

    瓦伦

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

    您好!

    如果您可以提供 BLE 监听器提供的日志、其中显示了所交换的蓝牙数据包的详细信息、这将有所帮助。

    根据您提供的最后一个日志、我会看到出现 "Error 22 (0x16):GATT CONN Terminate local host"。 这可能意味着手机关闭连接。 了解原因将会很有趣。

    此致、

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

    您好 Clement、

    我不熟悉 BLE。 只需确保。 BLE 监听器意味着 NRF 连接等应用、对吧? 我先前发送给您的日志、我 通过 此应用程序记录了它。 您是否建议我运行一段时间并获取详细日志? 我是否需要在此处启用任何选项? 您能给我一个示例日志吗?

    谢谢!

    最棒的

    瓦伦  

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

    您好!

    我更喜欢使用显示每个数据包详细信息的工具、例如 Elisys 或 TI 数据包监听器提供的系统。  

    话虽如此、我建议查看我在前一封邮件中提到的错误。

    此致、

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

    您好 Clement、

    我没有此软件狗(LaunchPad)。 不过、我有一个有趣的观察结果。 当我使用较旧的 BLE-CC254x-1.4.2.2刷写软件时, 模块连接良好, 但使用最新 的 BLE-CC254x-1.5.2.0时,会出现上述错误。

    我想知道您是否还使用了最新的 BLE 堆栈?

    最棒的

    瓦伦

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

    尊敬的 Varun:

    根据我们的测试结果、我们使用 BLE-CC254x-1.5.2.0进行测试的任何电话都没有出现错误。 但是、我认为我们没有专门测试过 Moto G 功率电话。 让我与我的团队一起仔细检查一下这个问题。  

    此致、

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

    您好 Clement、

    如果您允许、我是否应与您共享此文件?  e2e.ti.com/.../6663.peripheral.c

    在代码中、当我禁用观测器部分(gapRole_profileRole = GAP_PROFILE_PERipheral|GAP_PROFILE_맛 달  器;)时、它对连接非常有效、需要注意的一点是、我根本没有包括开始扫描发现。  

    请您仔细研究一下吗?

    最棒的

    瓦伦

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

    尊敬的 Varun:

    到目前为止、我尚未发现您共享的文件中存在任何问题。

    您与将 gapRole_profileRole 设置为 GAP_PROFILE_PERipheral (而不是 GAP_PROFILE_PERipheral|GAP_PROFILE_观测 器)相关的观察结果很有趣。 实际上、这允许保存至少120字节的存储器。 我认为这可能足以触发或不是绑定问题。

    -您能评估您的可用 RAM 容量吗?

    -您能否验证是否将 gapRole_profileRole 设置为 GAP_PROFILE_PERipheral|GAP_PROFILE_Observer 并将 gapObserverRoleMaxScanRes 设置为1可以使绑定正常工作?

    此致、

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

    您好 Clement、

    我很抱歉。 不知道我是如何错过通知的。 是的、我已经使用 Reducing gapObserverRoleMaxScanRes 进行了测试。 但它不起作用。  

    我的内存统计数据如下所示:

     132 312字节代码内存(+ 14 872范围填充)
    35字节数据存储器(绝对值+ 80)
    7 859字节的 XDATA 内存
    179字节 iDATA 内存(+ 1绝对值)
    8位存储器
    900字节 const 存储器

    基本上、当我将角色从 GAP_PROFILE_PERipheral|GAP_PROFILE_观测 器切换到  GAP_PROFILE_PERipheral 时、我仍然使用相同的库文件、因此我认为存储器消耗是相同的。 它可能与多角色配置有关吗?

    我正在附上有关连接问题 here.e2e.ti.com/.../-2021_2D00_12_2D00_03-15_5F00_03_5F00_11.avi 的视频记录

    而且连接时会发现不记得绑定、即使 我已经在绑定寄存器中、手机 的蓝牙 ID 仍然存储在寄存器中、

    最棒的

    瓦伦

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

    您好 Clement、

    我很抱歉。 不知道我是如何错过通知的。 是的、我已经使用 Reducing gapObserverRoleMaxScanRes 进行了测试。 但它不起作用。  

    我的内存统计数据如下所示:

     132 312字节代码内存(+ 14 872范围填充)
    35字节数据存储器(绝对值+ 80)
    7 859字节的 XDATA 内存
    179字节 iDATA 内存(+ 1绝对值)
    8位存储器
    900字节 const 存储器

    基本上、当我将角色从 GAP_PROFILE_PERipheral|GAP_PROFILE_观测 器切换到  GAP_PROFILE_PERipheral 时、我仍然使用相同的库文件、因此我认为存储器消耗是相同的。 它可能与多角色配置有关吗?

    我正在附上有关连接问题 here.e2e.ti.com/.../-2021_2D00_12_2D00_03-15_5F00_03_5F00_11.avi 的视频记录

    而且连接时会发现不记得绑定、即使 我已经在绑定寄存器中、手机 的蓝牙 ID 仍然存储在寄存器中、

    最棒的

    瓦伦

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

    您好 Clement、

    我有一个有趣的观察结果。 我禁用了所有服务并保存了大约1000字节的 RAM、现在没有连接或绑定问题... 您会建议什么解决方法?  那么、我如何进一步分析呢? 是否有办法了解堆内存的使用情况? 正如您在视频中看到的、我们使用的是分离平台、因此很难使用调试器。 是否有方法通过读取任何变量或 API 来监视堆使用情况?  对于8k RAM、我们分配的可用存储器(最小值)是多少。  

    最棒的

    瓦伦

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

    尊敬的 Varun:

    现在发现问题的根本原因-做得好。

    我建议访问 https://www.ti.com/lit/swru271 (尤其是§3.4堆管理器)来调试这个问题。

    要获得与 RAM /堆相关的额外支持、请打开一个新线程。

    此致、

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

    结束此主题:开始新主题: (+) CC2541:了解堆内存使用-蓝牙论坛- BluetoothRegistered︎- TI E2E 支持论坛