1.首先我使用simplelink_cc2640r2_sdk_4_30_00_08/examples/rtos/CC2640R2_LAUNCHXL/blestack/hexfiles/cc2640r2lp_simple_peripheral.hex的文件烧录。
2.使用nrf connect连接。
3.在debug中发现了两次连接参数更新。如图,前两次的更新的间隔还不到1S,并且这两次都并非我配置的参数更新,只有第三次连接更新的时候,才是我配置的连接参数。如果我关闭连接参数更新,仍然会自动更新连接参数。
4.我尝试在peripheral.c更改
#define DEFAULT_ADVERT_OFF_TIME 30000 // 30 seconds
#define DEFAULT_MIN_CONN_INTERVAL 0x0006 // 100 milliseconds
#define DEFAULT_MAX_CONN_INTERVAL 0x0C80 // 4 seconds
实际上没有任何作用。
5.后面我增加了一段程序。
// Minimum connection interval (units of 1.25ms, 80=100ms) for automatic
// parameter update request
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 185
// Maximum connection interval (units of 1.25ms, 800=1000ms) for automatic
// parameter update request
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 208
// Slave latency to use for automatic parameter update request
#define DEFAULT_DESIRED_SLAVE_LATENCY 0
//when connected,how long Update Connection Parameter
#define DEFAULT_CONN_PAUSE_PERIPHERAL 15
// Supervision timeout value (units of 10ms, 1000=10s) for automatic parameter
// update request
#define DEFAULT_DESIRED_CONN_TIMEOUT 600//1000
// After the connection is formed, the peripheral waits until the central
// device asks for its preferred connection parameters
#define DEFAULT_ENABLE_UPDATE_REQUEST GAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS
uint8_t enableUpdateRequest = DEFAULT_ENABLE_UPDATE_REQUEST;
uint16_t desiredMinInterval = DEFAULT_DESIRED_MIN_CONN_INTERVAL;
uint16_t desiredMaxInterval = DEFAULT_DESIRED_MAX_CONN_INTERVAL;
uint16_t desiredSlaveLatency = DEFAULT_DESIRED_SLAVE_LATENCY;
uint16_t desiredConnTimeout = DEFAULT_DESIRED_CONN_TIMEOUT;
GAP_SetParamValue(TGAP_CONN_PAUSE_PERIPHERAL, DEFAULT_CONN_PAUSE_PERIPHERAL);
GAPRole_SetParameter(GAPROLE_PARAM_UPDATE_ENABLE, sizeof(uint8_t),
&enableUpdateRequest);
GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t),
&desiredMinInterval);
GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t),
&desiredMaxInterval);
GAPRole_SetParameter(GAPROLE_SLAVE_LATENCY, sizeof(uint16_t),
&desiredSlaveLatency);
GAPRole_SetParameter(GAPROLE_TIMEOUT_MULTIPLIER, sizeof(uint16_t),
注意我的timeout已经设置成了600,这样设置之后15S内出现了三次连接参数更新。这个是simple_peripheral例程上更改的,并且只在task初始化时修改了这段程序。
6.我发现并非所有的蓝牙设备都会出现这种问题,CC2540/1以及CC2642R并没有这个问题。
Kevin Qiu1:
连接参数更新参照任务5中的方式dev.ti.com/…/node
shimin zhang:
回复 Kevin Qiu1:
你好,CC2640R2F我使用的是默认的例程,没有修改任何东西也有问题呀。
同样的CC2642R和CC2541都没有此类问题。
Kevin Qiu1:
回复 shimin zhang:
你说的问题指的是前两次自动更新连接参数?看连接参数应该是手机发起的
shimin zhang:
回复 Kevin Qiu1:
似乎跟手机有关,不同手机会有不同的情况,不同蓝牙芯片也有不同的情况