TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

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

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

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

Barbara Wu:

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

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

如果是CC2640可以使用MTU

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

ShihPC:

回复 Barbara Wu:

我是使用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左右是否每次连线都要重新更新连线间隔?是否有方法可以连上线就改变好间隔 不需要再次更新?

Barbara Wu:

回复 ShihPC:

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 },

ShihPC:

回复 Barbara Wu:

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

Barbara Wu:

回复 ShihPC:

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

这个是在

// 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 ),立刻发出连接参数更新请求来更新连接参数。这个方法是在连接建立以后,想要修改连接参数的时候就可以调用函数触发的。

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

user4962397:

回复 Barbara Wu:

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

Barbara Wu:

回复 user4962397:

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

赞(0)
未经允许不得转载:TI中文支持网 » 多次GATT_WriteCharValue return 0x16 (bleTimeout) 多次GAPCentralRole_EstablishLink return 0x11 (bleAlreadyInRequestedMode)
分享到: 更多 (0)