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.

[参考译文] CC2540:吞吐量测试-不稳定问题、连接中断

Guru**** 2560390 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/590186/cc2540-throughput-test---instability-issues-connection-is-dropped

器件型号:CC2540

我遵循以下说明并使用此 wiki 页面中建议的代码来测量 CC254x 吞吐量:  

我不使用密钥卡、而是使用 SmartRF05 + CC2541EM。 我不是按按钮、而是通过向外设的特征1写入特定数字来启动文件传输。 当外设识别到该命令时、它会根据 wiki 中提供的示例开始传输。  

我有以下问题:

gat_Notification 似乎将数据移位4个字节、例如、前4个字节从未传输。

2.在传输12个字节左右之后连接断开(不确定、传输的字节数量会有所不同)

3.我必须将"osal_memcpy (&nData.value、&burstData、20);"的语法修正为"osal_memcpy (nData.pValue、burstData、20);"

4.更改句柄值似乎不会改变任何东西。 我想更好地了解外设发送原始数据(nData.handle)时该数字的功能。 我的问题是否与中央设备有关? 我应该修改它吗?

5.通过查看监听器日志,可以在出现多个错误代码#6 (REQ_NOT_SUPPORTED )(下面的快照)后断开连接。

任何想法都非常感谢-谢谢!

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

    句柄应与具有"通知"属性的特性相对应。 您可以使用 BTOOL 进行双重检查、查看是否可以接收通知。

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

    我已按照您的建议修改了句柄、但结果相同。

    您是否有关于错误代码#6的更多详细信息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下是该问题的解决方案:

    -通过设置计时器并调用函数 SendData(),我仍然使用与 wiki 页示例(此主题中的第一个帖子)相同的结构。

    -不使用 GATT_Notification、而是使用函数 SetParameter (在外设示例中、它名为 SimpleProfile_SetParameter)

    为了使其正常工作,我修改了特性4。 它可以是任何其他类型的、但我选择了那个、因为在 SDK 示例中已启用通知。 然后、我将 Char 4值的大小更改为20字节。 为此、请查看该示例中的特征5是如何设置的。 它显示了一个包含5个字节的示例。  

    -运行 BTool 时,请确保先通过将特征4的配置属性设置为0x0001来启用通知(在 BTool 中,确保使用01:00格式)。  

    -在本例中,我通过向特征1写入命令(在本例中为数字6)来触发数据传输。 这样、我就可以通过 BTool 来控制它、而不是依靠按钮来控制它。  

    之后、只需监视正在发送的字节。 BTool 中的时间戳将有助于确定吞吐量。  

    静态空 sendData (void)
    {
    attHandleValueNoti_t nData;
    静态 uint16 counter=0;
    uint16 len;
    bStatus_t status;
    gattAttribute_t *pAttr;
    
    pAttr = simpleProfileAttrTbl;
    
    UINT8 BurstData[26]={0、0、0xCA、0xDA、0xB0、0x1A、0xCA、0xDA、0xFA、0xD0、0xC0、0xB0、0x10、0xF0、0xDE、0xC0、0xC0、0xFA、0x55、0xBA、0xF0、0xCA};
    
    BurstData[0]=(计数器和0xFF00)>8;
    BurrstData[1]=(计数器和0xFF);
    
    len = sizeof (burstData);
    
    SimpleProfile_SetParameter (SIMPLEPROFILE_CHAR4、SIMPLEPROFILE_CHAR4_LEN、BurstData);
    
    if (计数器>1000)
    {
    OSAL_STOP_timerEx (simpleBLEPeripheral_TaskID、SBP_BURST_EVT);
    计数器= 0;
    }
    
    
    }