ble_cc26xx_2_01_00_44423 使用的是这个版本,现在遇到问题是:我用Nrf51822 扫描cc2640,当nrf51822 那边出现
#define |
BLE_HCI_CONNECTION_TIMEOUT 0x08 |
的时候,cc2640就复位了。这个正常吗?
设置连接超时如下:
// Supervision timeout value (units of 10ms, 1000=10s) if automatic parameter
// update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT 60
判断断开连接的处理如下:
case GAPROLE_ADVERTISING:
UART_DEBUG_DISPLAY_MESSAGE("BLE Advertising.\r\n");
break;
case GAPROLE_CONNECTED:
{
#ifdef UART_DEBUG
UART_DEBUG_DISPLAY_MESSAGE("BLE Connected.\r\nPeerAddr:");
uint8_t displayBuff[10];
GAPRole_GetParameter(GAPROLE_CONN_BD_ADDR, displayBuff);
BF_UtilReverseArray(displayBuff,B_ADDR_LEN);
UART_DEBUG_DISPLAY_HEX(displayBuff,B_ADDR_LEN);
GAPRole_GetParameter(GAPROLE_PROFILEROLE,displayBuff);
UART_DEBUG_DISPLAY_MESSAGE_VALUE("GAP Role:",displayBuff[0]);
SimpleBLEPeripheral_ConnParamParamDisplay();
#endif
Protocol_BleState(true);
}
break;
case GAPROLE_CONNECTED_ADV:
UART_DEBUG_DISPLAY_MESSAGE("BLE Connected Advertising.\r\n");
break;
case GAPROLE_WAITING:
SimpleBLEPeripheral_freeAttRsp(bleNotConnected);
UART_DEBUG_DISPLAY_MESSAGE("BLE Disconnected.\r\n");
uint8_t params8b;
GAPRole_GetParameter(GAPROLE_CONN_TERM_REASON,¶ms8b);
UART_DEBUG_DISPLAY_MESSAGE_VALUE("Disconnect Reason:",params8b);
Protocol_BleState(false);
break;
case GAPROLE_WAITING_AFTER_TIMEOUT:
SimpleBLEPeripheral_freeAttRsp(bleNotConnected);
UART_DEBUG_DISPLAY_MESSAGE("BLE Timed Out.\r\n");
break;
case GAPROLE_ERROR:
UART_DEBUG_DISPLAY_MESSAGE("BLE GAP Role Error.\r\n");
break;
default:
break;
}
SimpleBLEPeripheral_freeAttRsp(bleNotConnected)
{
// See if there's a pending ATT response message
if (pAttRsp != NULL)
{
// See if the response was sent out successfully
if (status == SUCCESS)
{
UART_DEBUG_DISPLAY_MESSAGE_VALUE("Rsp sent, retry:",rspTxRetry);
}
else
{
// Free response payload
GATT_bm_free(&pAttRsp->msg, pAttRsp->method);
UART_DEBUG_DISPLAY_MESSAGE_VALUE("Rsp retry failed:",rspTxRetry);
}
// Free response message
ICall_freeMsg(pAttRsp);
// Reset our globals
pAttRsp = NULL;
rspTxRetry = 0;
}
}
user4049846:
我帮你查询了一下,可以参考一下
e2echina.ti.com/…/107058
Viki Shi:
连接超时应该只会断开连接,你测试的情况是每次超时都会复位还是偶尔才这样?
Gerry Fan:
回复 Viki Shi:
每次都是。因为设备复位后,时间会重置,所以每次出现0x08,时间就没了。另外。我打印主机那边的log,发现都是连接上以后,大概4s 发现不了服务的话,会出现这个0x08,0x08 不是HCI_ERROR_CODE_CONN_TIMEOUT连接超时吗?为什么已经连接上了,只是没有发现服务,也会报这个错误吗?
Gerry Fan:
回复 Viki Shi:
另外 cc2640 从机端的连接参数是:// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic
// parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL40// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic
// parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL40// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_DESIRED_SLAVE_LATENCY0// Supervision timeout value (units of 10ms, 1000=10s) if automatic parameter
// update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT60,
主机端nrf51822 在更新连接参数时候,不做处理,是不是有改善呢,就不会出现连接超时?
主机端连接参数设置:
#define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(20, UNIT_1_25_MS)/**< Determines minimum connection interval in millisecond. */
#define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(75, UNIT_1_25_MS)/**< Determines maximum connection interval in millisecond. */
#define SLAVE_LATENCY0/**< Determines slave latency in counts of connection events. */
#define SUPERVISION_TIMEOUTMSEC_TO_UNITS(4000, UNIT_10_MS)/**< Determines supervision time-out in units of 10 millisecond. */
就是注释掉:连接参数更新的请求。case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST:// Accepting parameters requested by peer.//err_code = sd_ble_gap_conn_param_update(p_gap_evt->conn_handle,//&p_gap_evt->params.conn_param_update_request.conn_params);//APP_ERROR_CHECK(err_code);break; // BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST
Gerry Fan:
回复 user4049846:
嗯,也是一个思路,复位就那几种原因,排除一下。
da qin zheng sheng:
正常情况应该不会复位的。