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.

[参考译文] CC2640:无法通过通知向主设备发送大数据

Guru**** 2587365 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/598018/cc2640-unable-to-send-large-data-to-master-through-notifications

器件型号:CC2640

您好!

我正在使用 simple_peripheral 应用程序、我希望从主设备发送和接收数据。 我已经使用可以接收和发送到主设备的100字节数据进行了测试。

但是、当数据大于100字节时、我 能够从主器件正确接收数据。 但是 、当我从 simple_peripheral 向 Mater 发送数据(使用通知)时、它仅发送100个正确字节。

之后、它开始重复第一个索引中的数据。 我已经使用100字节、200字节、250字节和600字节的数据进行了测试,仅发现100字节的数据成功。 以下是我用于通过通知发送数据的代码

void sendData (uint16_t connHandle、uint8_t * offset)
{
uint16_t length = 20;
//如果启用通知
uint16_t value = GATTServApp_ReadCharCfg (connHandle、myccDes);
if (value & GATT_CLIENT_CFG_NOTIFY)
{
attHandleValueNoti_t 通知;
oti.len =长度;
NOTI.pValue = GATT_BM_alloc (connHandle、ATT_Handle_Value_Noti、Notti.plen、&Notti.len);

if (NOti.pValue!=空)
{
gattAttribute_t *pAttr;
pAttr= GATTServApp_FindAttr (dmyServiceAttrTbl、
GATT_NUM_ATTRS (domServiceAttrTbl)、
trampesCharVal (&T);
oti.handle = pAttr->句柄;
memcpy (oti.pValue、dataBuffer + offset[0]、length);// dataBuffer 具有所有数据
if (GATT_Notification (connHandle、&Noti、false)!=成功)
{
GATT_BM_FREE (((gattMsg_t *)&Noti、ATT_Handle_Value_Noti);
}
}

} 

可以帮帮我吗? 堆栈是否存在任何不支持更多数据的限制?

以下是主设备发送测试绿色数据的结果、而黑色是从从设备接收的数据。

100字节的测试结果

010601010101010101010101010101010102020202020202020202020202020202030603030303030303030303030303030303030303030303030303030

40604040404040404040404040404040506050505050505050505050505050505050505050606065d5e5f61626364


010601010101010101010101010101010102020202020202020202020202020202020306030303030303030303030303030303030303030303030303030304

0604040404040404040404040405060505050505050505050505050505050505050505050606065d5e5f61626364

使用120字节测试 REST

010701010101010101010101010101010202020202020202020202020202020202020303030303030303030303030303030303030303030303030

3040704040404040404040404040404040404050505050505050505050505050505050505050505060731323334ef03f0f107010101010101010101010101010101010101010101010101010101010207

0107010101010101010101010101010102020202020202020202020202020202020203030303030303030303030303030303030303030303030303030

407040404040404040404040404040505050505050505050505050505050505050506073132334ef03f0f1f2f306060606060606060707313233334ef03f0f1f2f3f3

正在等待您的回复。

此致

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

    您的 OP 中未指定 GATT 客户端如何向您发送数据或配置的 ATT_MTU 大小有效。 对于 GATT 通知、一个通知中的最大传输大小将为 ATT_MTU - 3个字节。 您发送的字节数不应超过 Notti.len 字节、但您不会检查此大小。

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

    您好、JXS、

    感谢您的回复。 我通过生成事件并处理数据来从客户端获取数据。 我已验证来自客户的数据是否正确。

    length=20显示应变速的最大大小。 在调试过程中、我在发送100个字节后得知。 程序输入:

     GATT_BM_FREE (((gattMsg_t *)&Noti、ATT_Handle_Value_Noti);

    这不应该发生。 我还尝试了非常小的大小、例如每个事务10字节。 它显示了相同的行为。

    正在等待您的回复。

    此致

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

    大家好、mabbas、

    在堆栈有机会发送 PDU 之前、您可能排队的数量超过 MAX_NUM_PDU (通知)。 您可以增加此定义以查看是否可以解决问题。 请参阅软件开发指南。
    此外、使用更大的 ATT_MTU 会更高效。

    祝你一切顺利

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

    您好、JXS、

    感谢您的帮助。 您能告诉我 在一个连接中可以发送的 PDU 的最大数量是多少??

    正在等待您的回复。

    此致

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

    抱歉、它是 MAX_NUM_PDU ("已更正先前的帖子")、可在软件开发指南 SWRU393 sec "5.7 Runtime BLE Protocol Stack Configuration"中找到

    祝你一切顺利