我要传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层的回调了