CN / EN
CN / EN

提问

设计支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

GR5515使用蓝牙发送数据返回SDK_ERR_NO_RESOURCES GR551x

154****com

2022-08-03 22:48

您好,我在使用GR5515I0ND 基于SDK1.7.0开发BLE的过程中,遇到以下问题,当5515作为从机向主机ESP32发送大量数据时,发送的中途总是会出现以下错误(0x10)SDK_ERR_NO_RESOURCES,我的蓝牙发送函数如下:

sdk_err_t ebs_tx_data_send(uint8_t conn_idx, uint8_t *p_data, uint16_t length)
{
sdk_err_t error_code = SDK_ERR_NTF_DISABLED;
gatts_noti_ind_t send_cmd;

if (PRF_CLI_START_NTF == s_ebs_env.tx_ntf_cfg[conn_idx])
{
// Fill in the parameter structure
send_cmd.type = BLE_GATT_NOTIFICATION;
send_cmd.handle = prf_find_handle_by_idx(EBS_IDX_TX_VAL, s_ebs_env.start_hdl, (uint8_t *)&s_char_mask);

// Pack measured value in database
send_cmd.length = length;
send_cmd.value = p_data;

// Send notification to peer device
error_code = ble_gatts_noti_ind(conn_idx, &send_cmd);
}

return error_code;
}
sdk_err_t app_ble_data_send(uint8_t *p_data, uint16_t length)
{
sdk_err_t ret_code = BLE_SUCCESS;
uint16_t loop_cnt = 0;
uint16_t remainder = 0;
uint8_t i = 0;
uint16_t timeout = 0x1000;

if(!connect_flag)
return BLE_L2C_ERR_CONNECTION_LOST;

loop_cnt = length / send_once_size;
remainder = length % send_once_size;
for(i = 0; i < loop_cnt; i++)
{
g_ble_tx_done = 0;
ret_code = ebs_tx_data_send(connect_index, p_data + i * send_once_size, send_once_size);
while(g_ble_tx_done == 0)
{
if(timeout)
{
timeout--;
}
else
{
break;
}
}
if(ret_code)
{
return ret_code;
}
}

if(remainder)
{
g_ble_tx_done = 0;
ret_code = ebs_tx_data_send(connect_index, p_data + i * send_once_size, remainder);
while(g_ble_tx_done == 0)
{
if(timeout)
{
timeout--;
}
else
{
break;
}
}
}

return ret_code;
}

请帮忙指导,谢谢

0收藏

0赞成

yao****com

2022-08-04 18:30

hi~

您好:

您这个问题的原因是调用 ebs_tx_data_send 接口发送数据太频繁,协议栈缓存buffer不够。

在频繁调用这个数据发送接口时,需要做一下数据发送结果的判断,确保数据已经发送成功再调用接口。

由于在不同的服务中调用该接口,数据发送成功返回的事件名称不一样,请参考以下示例。

示例:

在GR551x_SDK_V1.7.0\projects\ble\dfu\ble_dfu_fast\Keil_5示例工程中,

调用了接口 sdk_err_t fast_otas_notify_cmd_data(uint8_t conn_idx,uint8_t* p_data,uint16_t len) 发送数据,数据发送完成会对应返回一个“ FAST_OTAS_EVT_CMD_NOTIFY_COMPLETE ”事件。如果频繁使用这个接口,则需要判断一下返回了该事件,再调用接口进行数据发送。

希望对你有帮助,如有其它问题,欢迎多多交流哟~

1条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注