7 posts / 0 new
Last post
kiam
Offline
Last seen:8 months 4 days ago
加入:2019-07-25 08:44
DA14580 MTU

如果你使用notification发送数据的话,受MTU size限制,每个notification的长度为20字节。

请问可以修改这个值吗?比如一包数据传输125个字节,如何操作?谢谢!

Device:
CYibin
Offline
Last seen:6 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
你好, MTU 是可以修改的。可改为需要的值

你好,

MTU 是可以修改的。可改为需要的值

kiam
Offline
Last seen:8 months 4 days ago
加入:2019-07-25 08:44
我修改了,上位机对应蓝牙软件也收到返回值。但是数据发送异常

我修改了,上位机对应蓝牙软件也收到返回值。但是数据发送异常,对应的蓝牙接受软件也得做出相应得修改才行吧?

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

你好,

app 应该不用。你用的什么 app,出现什么异常?

kiam
Offline
Last seen:8 months 4 days ago
加入:2019-07-25 08:44
我们自己团队研发的一个APP ,IOS和安卓系统都有

我们自己团队研发的一个APP ,IOS和安卓系统都有,我搜索了一下工程里MTU,把所有原本23的位置都换成了67,然后修改了如下函数,加了user_gattc_exc_mtu_cmd(connection_idx);

void default_app_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{

if (app_env[connection_idx].conidx != GAP_INVALID_CONIDX)
{

if (user_default_hnd_conf.adv_scenario==DEF_ADV_WITH_TIMEOUT)
app_easy_gap_advertise_with_timeout_stop( );

default_advertise_stop_operation();

app_prf_enable (param->conhdl);

user_gattc_exc_mtu_cmd(connection_idx);

if ((user_default_hnd_conf.security_request_scenario==DEF_SEC_REQ_ON_CONNECT) && (BLE_APP_SEC))
{
app_easy_security_request(connection_idx);
}

}
else
{
// No connection has been establish, restart advertising
EXECUTE_DEFAULT_OPERATION_VOID(default_operation_adv);
}

return;

}

发送出去的数据如果大于23字节,APP端是收不到的。发现发送缓存区的数据没有更新,还是指令交互的内容,不是这次更新的数据包

kiam
Offline
Last seen:8 months 4 days ago
加入:2019-07-25 08:44
你好,我进行修改MTU的部分如下:

你好,我进行修改MTU的部分如下:

static const struct gapm_configuration user_gapm_conf={
.role = GAP_PERIPHERAL_SLV,
.irk={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/// Device Appearance (0x0000 - Unknown appearance)
//Fill in according tohttps://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
.appearance=0,
.appearance_write_perm=GAPM_WRITE_DISABLE,
.name_write_perm=GAPM_WRITE_DISABLE,
/// Maximal MTU
.max_mtu= 67,//23,
/// Peripheral only: *****************************************************************
/// Slave preferred Minimum of connection interval measured in ble double slots (1.25ms)
/// use the macro MS_TO_DOUBLESLOTS to convert from milliseconds (ms) to double slots
.con_intv_min = MS_TO_DOUBLESLOTS(10),

......

连接函数中修改:

void user_app_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{
default_app_on_connection(connection_idx, param);
connection_status = true;
user_gattc_exc_mtu_cmd(connection_idx);
app_easy_gap_param_update_start(connection_idx);
// notity
send_type = 0;
notify_timer = 0;

}

用Hollong BLE抓包的话,如附件情况:

但是空中ATT数据没有更新,还是上一条数据,不是我发的64字节数据,我在发64字节数据之前,上报了一个电量信息,是10字节。修改MTU之后,收到的ATT一直是10字节电量信息,使用的是notification

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

你好,

请提供更多信息以便分析:

附上实现 Notify 的代码

用于 notify 的特征的 value 长度是多少?

提供 notify 的抓包情况