8 posts / 0 new
Last post
zhouchen
Offline
Last seen:6 days 14 hours ago
加入:2015-09-25 01:45
DA14585数据长度测试异常

我用的是DA14585的SDK 6.0.10 运行工程为app_ble_profile 往字符服务UUID为3777,也就是字符服务Long Value 里面写入数据,数据长度小于或等于20个byte,写入都是正常的,但是当写入的字符大于20byte,数据无法写入且异常断开连接,后蓝牙进入广播状态。DA14585蓝牙协议为5.0且Long Value的字符长度默认设置为50个byte.按道理不会受限20个byte,附件为测试及用BPA600抓得数据 包。

Device:
CYibin
Offline
Last seen:3 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
你好,

你好,

即使写入数据长度超过50个,也不应该断开的。请将你的抓包文件打包上传

zhouchen
Offline
Last seen:6 days 14 hours ago
加入:2015-09-25 01:45
Hi CYibin:

Hi CYibin:
文件打包上传不了.上传文件只支持pdf和zip格式,所以我只传了抓包的DPF文档,我用的测试代码是6.0.10SDK 默认的app_ble_profile工程,没做任何修改,你把程序下进去用lightblue就可以测试验证出来.

CYibin
Offline
Last seen:3 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
你好,

你好,

这个问题在 580 的 SDK 中不存在;

对比 SDK5.0.4 和 SDK6.0.10,可发现 SDK6.0.10 提供的接口中,对于 gattc_write_req_ind 事件结构体,少了一个 last 标志位成员,即 585 无法处理分包数据写请求。

解决该问题的办法是把 MTU 改大。比如,long value 特征数据长度最大值是 50 的话,可把 MTU 配置为 53。如下:

static const struct gapm_configuration user_gapm_conf = {
/// Device Role: Central, Peripheral, Observer, Broadcaster or All roles. (@see enum gap_role)
.role = GAP_ROLE_PERIPHERAL,

/// Maximal MTU. Shall be set to 23 if Legacy Pairing is used, 65 if Secure Connection is used,
/// more if required by the application
.max_mtu = 53,

zhouchen
Offline
Last seen:6 days 14 hours ago
加入:2015-09-25 01:45
好的,我先试试。

好的,我先试试。

zhouchen
Offline
Last seen:6 days 14 hours ago
加入:2015-09-25 01:45
试过之后我发现,这样改是可以的,不过对比580跟585

试过之后我发现,这样改是可以的,不过对比580跟585,580一次最多可以写526个byte,585这样改可以支持到180多个byte.

CYibin
Offline
Last seen:3 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
580 一次最多可以写 526bytes,跟手机 APP

580 一次最多可以写 526bytes,跟手机 APP 的实现有关系;理论上,你可以“一次”发送无尽长度的数据,APP 可将这些数据分包(L2CAP层次以上的分包)发送给 580。

585 使用 BLE 4.2 协议的数据扩展包的话,一次(真正的一次,一个 L2CAP 包)可发送 251-3 = 248bytes 的数据,使用方式,可参考 DSPS 例程

CYibin
Offline
Last seen:3 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
你好,

你好,

发送超过 20 个bytes 的数据时,手机端发送 prepare_write_request 事件,但一直等不到 prepare_write_respone 事件而断开,我需要跟 SDK 确认一下这个事件的处理情况。