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/CC2640R2F:SDK 1.40:通知/指示最大大小保持20字节,而读取大小可增加至251

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/660392/rtos-cc2640r2f-sdk-1-40-notification-indication-max-size-remains-20-bytes-while-read-size-can-be-increased-to-251

器件型号:CC2640R2F
主题中讨论的其他器件:CC2541

工具/软件:TI-RTOS

使用 simplelink_cc2640r2_sdk_1_40_00_45并在服务上创建读取/指示字符、指示大小限制为20、而读取大小限制为251。

它是否符合 BLE 标准、或者这是 SDK 1.40版的已知限制?

是否在 simplelink_cc2640r2_sdk_1_50_00_71或 simplelink_cc2640r2_sdk_1_50_00_58中对此进行了修复?

请参见 gattServApp_SendNotiInd 的实现以及粗体行

/*********
*@fn gattServApp_SendNotiInd
*
*@简要发送 ATT 通知/指示。
*
*@param connHandle -要使用的连接句柄。
*@param cccValue -客户端特征配置值。
*@param Authenticated -是否需要经过身份验证的链接。
*@param pAttr -指向属性记录的指针。
*@param taskId -要通知确认的任务。
*@param pfnReadAttrCB -读取回调函数指针。
*
**@return SUCCESS or FAILURE
*/
static bStatus_t gattServApp_SendNotitInd (uint16 connHandle、uint8 cccValue、
uint8已认证、gattAttribute_t *pAttr、
uint8 taskId、pfnGATTReadAttrCB_t pfnReadAttrCB)
{attHandleValueNoti_t
Notti;
uint16



字节;bStatus_t status;//如果属性值长于(ATT_MTU-3)八位字节,则//仅可以
发送此 MTU 值的第一个(len_attributes -3)八位字节。// 
NOTI.pValue =(uint8 *) GATT_BM_alloc (connHandle、ATT_Handle_Value_Noti、
GATT_MAX_MTU,&len );
if ( Noti.pValue != NULL )
{
状态=(*pfnReadAttrCB)(connHandle、pAttr、oti.pValue、&oti.len、
0、len、GATT_LOCAL_READ);
如果(status == Success)
{
oti.handle = pAttr->句柄;

if (cccValue & GATT_CLIENT_CFG_NOTIY)
{
状态= GATT_Notification (connHandle、&Noti、Authenticated);
}
else // GATT_CLIENT_CFG_Indicate
{
STATUS = GATT_Indication (connHandle、(attHandleValueInd_t *)和通知、
已验证,taskId );
}
}

if ( status !=成功)
{
GATT_BM_FREE ((gattMsg_t *)&NOTI、ATT_Handle_Value_NOTI);
}
}
否则
{
状态= bleNoResources;
}

返回(状态);
} 

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

    这符合 BLE 规范。 实际上、用黑体字表示的注释直接取自蓝牙核心规范版本4.2 [第3卷、第 F 部分]第3.4.7.2节。 该函数在1.50.00.58中没有变化。

    总之、您可以发送的指示的大小为 ATT_MTU-3。 需要为每个连接协商 MTU。 活动连接的 MTU 大小是多少? 您是否有随附的监听器捕获?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 1.50.00.71呢? 它会在那里发生变化吗?
    2. 我了解 到 simplelink_cc2640r2_sdk_1_40_00_45不仅支持 BLE 4.2、还支持 BLE 5.0。
      BLE 5.0的指示/通知 MTU 大小有哪些规格、 simplelink_cc2640r2_sdk_1_40_00_45是否符合这些规格?
    3. 我在 应用程序和堆栈项目中将 MAX_PDU_SIZE 设置为255。
      我已经测试了 BLE 读取操作,它可以一次性发送>100字节。
    4. 是否确实需要监听器工具? 根据 此 https://www.novelbits.io/bluetooth-5-speed-maximum-throughput/、我需要几天的时间来获取和测试、而不是告诉我如何启用 BLE 5.0功能并使用指示/通知实现高吞吐量、这应该是可行的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.不 您可以看到1.50.00.71支持 BLE 5.0、但根据蓝牙核心规范版本5.0 [第3卷、第 F 部分]、第3.4.7.1节、有关指示和通知的规范未更改

    2.见#1

    3.首先要在项目中设置 MAX_PDU_SIZE,还必须通过无线方式执行 MTU 交换,并确保对等设备也支持大型 MTU。 您将在应用程序中收到一个事件,通知您协商的 MTU。

    4、绝对是的。 在没有监听器的情况下、开发无线应用要困难得多。 如果您对吞吐量感兴趣、我建议查看 github.com/.../ble_examples 中的吞吐量示例
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Sean 的帮助、

    1.好的。 在所有 SDK 上、每个指示数据包的指示限制为20字节。
    2.我很想用一张表格来说明每个 TI BLE SDK 支持哪些 BLE 版本和功能。
    3、读操作对大数据包也可以正常工作。 指示是失败的指示。
    4.与使用监听器相比、用于主动连接 MTU 大小的"getter" API 对我来说耗时更少。 有没有?

    另一个问题-请告诉我您是否希望打开另一个 TT:

    尝试发送这些20字节长的指示、并且指示之间的延迟小于100ms、大多数情况下会失败。 仅当连续指示之间的延迟为100ms 或更长时、它们才会在每次发送时成功。
    我在 CC2541上遇到了类似的问题、但问题得到了解决-我记得关于需要激活的"每个连接间隔的多个数据包"宏的一些问题、但我无法确切地记住它是什么-您能提供帮助吗?

    此致、

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

    我刚刚在 以下网站上写下了 MTU 交换以及如何最大化的一个很好的摘要:e2e.ti.com/.../2430638

    第一。 抱歉、但事实并非如此、指示仅限于 ATT_MTU-3、使用我们的 SDK、最大 ATT_MTU 为251。 这意味着您可以发送超过200B 的指示。 我们有一个示例、将使用通知来实现此目的。 请参阅 Github github.com/.../ble_examples 上的吞吐量演示

    2。 我同意这一点很有用、并参考每个 SDK 的版本说明。

    4. linkDB_getinfo ()将填充包含 MTU 大小的结构 linkDBInfo_t。 请参阅 linkdb.h

    对等设备在其应用层必须确认指示、如果在指示挂起时尝试执行其他 GATT 过程、则会收到错误。 为了减少这种开销、我将使用通知。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、我将在接下来的几周内尝试这些建议。 现在、我将稳定读取、而不是指示。