cc2640我使用 simple_peripheral 例子 修改的程序,待机功耗1.7uA,但是BLE ON 连接后,功耗0.3mA。
我试着将下面参数修改,但发现没有效果 。如果 定义了 Original , 采用simple_peripheral 例子默认的参数
#ifdef Original
#define DEFAULT_ADVERTISING_INTERVAL 160
#else
#define DEFAULT_ADVERTISING_INTERVAL 1032 // 1032 * 0.625
#endif
#ifdef Original
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 80
#else
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 240 // 240*1.25=300ms
#endif
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 800 //units of 1.25ms, 800=1000ms
// Slave latency to use if automatic parameter update request is enabled
#ifdef Original
#define DEFAULT_DESIRED_SLAVE_LATENCY 0
#else
#define DEFAULT_DESIRED_SLAVE_LATENCY 4
#endif
#ifdef Original
#define DEFAULT_DESIRED_CONN_TIMEOUT 1000 //(units of 10ms, 1000=10s)
#else
#define DEFAULT_DESIRED_CONN_TIMEOUT 600
#endif
实验结果,定义Original , 和未定义的 的电流都是0.3mA左右,
请问我还需要修改那些参数?
cai jingliang:
按道理修改这个参数据, 应该能降低电流的,#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 240 // 240*1.25=300ms
Susan Yang:
回复 cai jingliang:
苹果对connection interval的要求, 其实还有其他的连接参数要求, 比如slave latency, supervision timeout, 如果不满足这些, IOS设备会拒绝.
The connection parameter request may be rejected if it does not comply with all of these rules:Interval Max * (Slave Latency + 1) ≤ 2 secondsInterval Min ≥ 20 msInterval Min + 20 ms ≤ Interval MaxSlave Latency ≤ 4connSupervisionTimeout ≤ 6 secondsInterval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout
cai jingliang:
回复 Susan Yang:
甜甜大香瓜,Susan Yang,两位好!
我看了你们回复后,对参数进行了修改,如下
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 120
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 320
#define DEFAULT_DESIRED_SLAVE_LATENCY 4
#define DEFAULT_DESIRED_CONN_TIMEOUT 600
这个参数,我算过了,是符合标准的,经过实验是可以降低功耗的,大约在2.1uA-80uA-120uA之间,
但改了个参数后,发现通信时(接收或发送)会实出现连接断开的情况,这样根本无法通信的。
请问这是怎么回事?
能不能提供一个你们测试OK的参数?
cai jingliang:
回复 cai jingliang:
经过进一步实验发现,接收来自IPHONE的数据是没有问题的,问题出面CC2640传送数据给IPHONE,会出断开连接。
IPHONE也收不到任何数据 !我的发送程序如下:
/******************************************************************************函数名称:输入:输出:描述: 直接发送数据函数******************************************************************************/void SendData_Notify(uint8_t *Buffer, uint8_t len){ attHandleValueNoti_t noti; uint16_t connHandle; uint16 value;
//获取Connection Handle GAPRole_GetParameter(GAPROLE_CONNHANDLE, &connHandle);
//读出CCC value = GATTServApp_ReadCharCfg(connHandle, simpleProfileChar4Config);
//判断CCC是否被打开 if ( value & GATT_CLIENT_CFG_NOTIFY ) { //分配发送数据缓冲区 noti.pValue = GATT_bm_alloc(connHandle, ATT_HANDLE_VALUE_NOTI, len, NULL);
//分配成功,则发送数据 if(noti.pValue != NULL) { //填充数据 noti.handle = simpleProfileAttrTbl[11].handle; noti.len = len; memcpy(noti.pValue, Buffer, len);
//发送数据 if(GATT_Notification(connHandle, ¬i, FALSE) != SUCCESS) { GATT_bm_free((gattMsg_t *)¬i, ATT_HANDLE_VALUE_NOTI); } } }}
这个发送函数在未修改任何参数的情况下是没有问题,跟IPHONE通信没有问题。
麻烦了,各位,就差电流最后一步,就可以提供给客户测试了。