我用的是DA14585的SDK 6.0.10运行工程为app_ble_profile往字符服务UUID为3777,也就是字符服务long值里面写入数据,数据长度小于或等于20个字节,写入都是正常的,但是当写入的字符大于20byte,数据无法写入且异常断开连接,后蓝牙进入广播状态.DA14585蓝牙协议为5.0且长值的字符长度默认设置为50个字节。按道理不会受限20个字节,附件为测试及用BPA600抓得数据包。
你好,
即使写入数据长度超过50个,也不应该断开的。请将你的抓包文件打包上传
嗨CYibin:文件打包上传不了。上传文件只支持PDF和拉链格式,所以我只传了抓包的DPF文档,我用的测试代码是6.0.10SDK默认的app_ble_profile工程,没做任何修改,你把程序下进去用lightblue就可以测试验证出来。
这个问题在580的SDK中不存在;
对比SDK5.0.4和SDK6.0.10,可发现SDK6.0.10提供的接口中,对于gattc_write_req_ind事件结构体,少了一个最后的标志位成员,即585无法处理分包数据写请求。
解决该问题的办法是把MTU改大比如,长值特征数据长度最大值是50的话,可把MTU配置为53.如下:
static const结构gapm_configuration user_gapm_conf = {///设备角色:中央,外围设备,观察员,转播或所有角色。(@see枚举gap_role)。角色= GAP_ROLE_PERIPHERAL,
///最大MTU。必须被设置为23,如果使用传统的配对,65如果使用安全连接,///更多,如果需要的应用程序.max_mtu = 53,
好的,我先试试。
试过之后我发现,这样改是可以的,不过对比580跟585580一次最多可以写526个字节,585这样改可以支持到180多个字节。
580一次最多可以写526bytes,跟手机APP的实现有关系;理论上,你可以“一次”发送无尽长度的数据,APP可将这些数据分包(L2CAP层次以上的分包)发送给580。
585使用BLE 4.2协议的数据扩展包的话,一次(真正的一次,一个L2CAP包)可发送251-3 = 248bytes的数据,使用方式,可参考DSPS例程
发送超过20个字节的数据时,手机端发送prepare_write_request事件,但一直等不到prepare_write_respone事件而断开,我需要跟SDK确认一下这个事件的处理情况。
你好,
即使写入数据长度超过50个,也不应该断开的。请将你的抓包文件打包上传
嗨CYibin:
文件打包上传不了。上传文件只支持PDF和拉链格式,所以我只传了抓包的DPF文档,我用的测试代码是6.0.10SDK默认的app_ble_profile工程,没做任何修改,你把程序下进去用lightblue就可以测试验证出来。
你好,
这个问题在580的SDK中不存在;
对比SDK5.0.4和SDK6.0.10,可发现SDK6.0.10提供的接口中,对于gattc_write_req_ind事件结构体,少了一个最后的标志位成员,即585无法处理分包数据写请求。
解决该问题的办法是把MTU改大比如,长值特征数据长度最大值是50的话,可把MTU配置为53.如下:
static const结构gapm_configuration user_gapm_conf = {
///设备角色:中央,外围设备,观察员,转播或所有角色。(@see枚举gap_role)
。角色= GAP_ROLE_PERIPHERAL,
///最大MTU。必须被设置为23,如果使用传统的配对,65如果使用安全连接,
///更多,如果需要的应用程序
.max_mtu = 53,
好的,我先试试。
试过之后我发现,这样改是可以的,不过对比580跟585580一次最多可以写526个字节,585这样改可以支持到180多个字节。
580一次最多可以写526bytes,跟手机APP的实现有关系;理论上,你可以“一次”发送无尽长度的数据,APP可将这些数据分包(L2CAP层次以上的分包)发送给580。
585使用BLE 4.2协议的数据扩展包的话,一次(真正的一次,一个L2CAP包)可发送251-3 = 248bytes的数据,使用方式,可参考DSPS例程
你好,
发送超过20个字节的数据时,手机端发送prepare_write_request事件,但一直等不到prepare_write_respone事件而断开,我需要跟SDK确认一下这个事件的处理情况。