微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于CC2541低功耗的几个问题

关于CC2541低功耗的几个问题

时间:10-02 整理:3721RD 点击:

先给情景:要用让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广播帧格式

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top