微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 多次GATT_WriteCharValue return 0x16 (bleTimeout) 多次GAPCentralRole_EstablishLink return 0x11 (bleAlreadyInRequestedMode)

多次GATT_WriteCharValue return 0x16 (bleTimeout) 多次GAPCentralRole_EstablishLink return 0x11 (bleAlreadyInRequestedMode)

时间:10-02 整理:3721RD 点击:

我要传600Byte至另一个蓝芽板,我使用GAPCentralRole_EstablishLink连接,

连接后我重复触发GATT_WriteCharValue,有时会return 0x16 bleTimeout,

然后我断开连线 重新连接,多次连接会常常return 0x11, 必须要等待18秒左右才能连接成功,请问该如何解决?

是否有更好传大笔资料的方法?

传数据快,最好是使用write without response

然后连接参数是怎么设置的?

如果是CC2640可以使用MTU

参考:http://processors.wiki.ti.com/index.php/CC2640_BLE_Throughput


我是使用CC2541

我最近使用Sniffer抓包去看连线的资料

发现没更新的连线间隔是100ms

我使用GAPCentralRole_UpdateLink( simpleBLEConnHandle,
                                 DEFAULT_UPDATE_MIN_CONN_INTERVAL,
                                 DEFAULT_UPDATE_MAX_CONN_INTERVAL,
                                 DEFAULT_UPDATE_SLAVE_LATENCY,
                                 DEFAULT_UPDATE_CONN_TIMEOUT );更新连线间隔

#define DEFAULT_UPDATE_MIN_CONN_INTERVAL      16//10//400//200

#define DEFAULT_UPDATE_MAX_CONN_INTERVAL      16//10//800

我改成这样 发现稳定度有增加

也有看到WriteRsp回传 连线间隔也变成20ms

但我想要让速度更快 请问write without response要如何做?

但我发现GAPCentralRole_UpdateLink更新完成的时间是700~800ms左右

是否每次连线都要重新更新连线间隔?

是否有方法可以连上线就改变好间隔 不需要再次更新?

write without response是从设备这边的参数属性,需要在从设备这一端的代码里面修改。

static uint8 SerialPortServiceDataProps = GATT_PROP_WRITE_NO_RSP | GATT_PROP_NOTIFY;

static gattAttribute_t SerialPortServiceAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED] =
{
// Simple Profile Service
{
{ ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */
GATT_PERMIT_READ, /* permissions */
0, /* handle */
(uint8 *)&SerialPortService /* pValue */
},

// Characteristic Data Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&SerialPortServiceDataProps
},

请问是否有可以重新连线不必重新更新连线间隔的方法?

连接参数更新可以有几个地方 一个是可以在每次建立连接之后就自动修改连接参数。

这个是在

// Whether to enable automatic parameter update request when a connection is
// formed
#define DEFAULT_ENABLE_UPDATE_REQUEST TRUE

如果设为TRUE 则在每次连接建立以后,就会根据前面宏定义设置的值自动更新一次连接参数

第二个是在代码里,你想要更新连接参数的时候,调用bStatus_t GAPRole_SendUpdateParam( uint16 minConnInterval, uint16 maxConnInterval,uint16 latency, uint16 connTimeout, uint8 handleFailure ),立刻发出连接参数更新请求来更新连接参数。这个方法是在连接建立以后,想要修改连接参数的时候就可以调用函数触发的。

从理论上来说,新的连接建立,默认参数是遵循建立连接的发起方的默认参数的,如果从设备不申请修改,则一直按照主设备的默认参数工作。

WBJ,你好!如果是还用write without response模式,那么主设备如何知道write的数据从设备是成功收到呢?

协议栈底层还是会有ACK的,只是没有application层的回调了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top