关于CC2541低功耗的几个问题
先给情景:要用让CC2541不断广播,又尽可能要低功耗(暂不考虑连接之后的功耗)
问题1:我创建了定时任务不会影响PM2状态的进入么?
如果我不定义POWER_SAVING,开着我的定时任务osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ),我整块板子的电流有6.5ma
如果我定义POWER_SAVING,开着我的定时任务,电流有800ua
如果我定义POWER_SAVING,关闭我的定时任务,电流有650ua
那么好像不管我是否开着定时任务,只要我定义了POWER_SAVING就进入了PM2,而是否开着我的定时任务只影响了150ua的电流,没有影响我进入PM2
问题2:修改发射功率对电流影响会有多大?
我在初始化之后放了一句HCI_EXT_SetTxPowerCmd(LL_EXT_TX_POWER_MINUS_23_DBM);但是并没有影响我的电流啊,仍旧和没放一样,都是800ua,我不知道我修改功率有没有成功。
问题3:广播数据量的大小对功耗的影响有多大?
static uint8 advertData[] =
{
0x02, // length of this data
GAP_ADTYPE_FLAGS,
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
0x03, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID ),
};
这个广播数据例程里就是这样,能去掉某些么?能减少多少的功耗?
下面贴一部分代码,方便查看,一些我添加或者比较重要的语句我加了颜色
代码1:
osalInitTasks();
HCI_EXT_SetTxPowerCmd(LL_EXT_TX_POWER_MINUS_23_DBM);//我把这个改变发射功率的语句放在了任务初始化之后,但是感觉没有起作用啊,电流没变
代码2:
uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
{
VOID task_id; // OSAL required parameter that isn't used in this function
if ( events & SYS_EVENT_MSG )
{
uint8 *pMsg;
if ( (pMsg = osal_msg_receive( simpleBLEPeripheral_TaskID )) != NULL )
{
simpleBLEPeripheral_ProcessOSALMsg( (osal_event_hdr_t *)pMsg );
VOID osal_msg_deallocate( pMsg );
}
return (events ^ SYS_EVENT_MSG);
}
if ( events & SBP_START_DEVICE_EVT )
{
GPIO_init();//一些相关IO口初始化
HalAdcInit();//ADC的初始化
VOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs );
VOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs );
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );//开启我的一个定时任务
return ( events ^ SBP_START_DEVICE_EVT );
}
if ( events & SBP_PERIODIC_EVT )//我的一个定时任务
{
if ( SBP_PERIODIC_EVT_PERIOD )
{
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );//重装载
}
performPeriodicTask();//具体任务
return (events ^ SBP_PERIODIC_EVT);
}
return 0;
}
首先,功耗涉及到软件和硬件电路部分,不要指望设置POWER_SAVING就能完全降低功能,建议检查你设备用法和硬件连接,休眠前要关闭设备
1) OSAL判断没有定时任务事件,才会进入休眠状态
2) 看HCI_EXT_SetTxPowerCmd有没有生效,通过安卓手机APP来看RSSI强度
3) 请百度BLE4.0广播帧格式