CC2541作为Peripheral设备进入低功耗PM3问题
hi,TI工程师:
我项目中将CC2541作为Peripheral广播数据,手机App作为Central接收数据
1,在CC2541没有App连接的情况,CC2541可以进入PM3,功耗在2.2uA
2,在CC2541有App连接的情况,CC2541主动断开App的连接,然后进入PM3,功耗在242uA左右
调用GAPRole_TerminateConnection()
调用{uint8 enable=FALSE;GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &enable );}
删除定时器,确认进入PM3
3,在CC2541有App连接的情况,但是App主动断开连接,之后CC2541主动进入PM3,功耗在2.2uA
请问情况2跟情况3有什么区别,我该如何设置让情况2的功耗也在2.2uA?
你的问题2说得有点不太明白。你是说你必须调用了GAPRole_TerminateConnection()和{uint8 enable=FALSE;GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &enable );} ,删除了定时器,才能进入PM3?
还是说已经做了上述操作,并进入了PM3,但功耗是242uA?
我调用了GAPRole_TerminateConnection()和{uint8 enable=FALSE;GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &enable );} ,删除了定时器;已经单步调试确认进入了PM3,但是功耗是242uA
检查下是否还有其他外设开启,比如串口?PM3能进去,激活是靠是靠按键吗?
不是外设问题吧;如题,第一种情况和第三种情况进入PM3都能达到2.2uA,可见不是外设问题;只有第二种不能达到,问题应该是在CC2541(从机)主动断开连接和安卓APP(主机)断开连接上吧?@TI兄弟们
确认没有开启其他外设!
情况1和情况3已经能够达到PM3低功耗,说明外设设置已经最优!
情况2与情况3,差别仅仅是,“CC2541主动断开了一个App的GAPP连接” or “App主动断开GAPP连接”
情况2与情况1,差别是,手机App连接了,且CC2541主动断开连接
----------------------
我想要的效果是,在手机App通过BLE连接到CC2541时,CC2541主动断开GAPP连接,且能进入PM3低功耗(2.2uA)
目前我采取的操作显然没有到达效果,但是因为BLE协议栈不开源,我不知道该情况2和情况3,协议栈里面有哪些不同操作
我采取哪些措施可以得到2.2uA的低功耗
确认激活是用按键激活
你在断开前的操作顺寻改改。如下是bloodpressure的例子。
你断开先启动一个定时器,delay一下,再做关advirsting和disconnect的操作。
1. osal_start_timerEx( bloodPressureTaskId, BP_DISCONNECT_EVT, BP_DISCONNECT_PERIOD );
2.
// Disconnect after sending measurement
if ( events & BP_DISCONNECT_EVT )
{
uint8 advEnable = FALSE;
//disable advertising on disconnect
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &advEnable );
HalLedSet ( HAL_LED_1, HAL_LED_MODE_ON );
// Terminate Connection
GAPRole_TerminateConnection();
return (events ^ BP_DISCONNECT_EVT);
}
已测,不成功!
1,按照你的方法,功耗还是242uA
2,方法2,先GAPRole_TerminateConnection();然后延时500,再关闭广播,也失败,功耗仍是242uA
你的方法进行过测试吗?
我暂时环境可测功耗,你如果方便测,可用默认simpleperipherial 例子按上述方法试试,看是否仍然有这样的现象。
如果默认工程经过你测试,仍存在这个现象,我们可以与产品线沟通这一问题。
bloodpressure的例子我看过了,您给出的方法在里面应该是可用的;但是那是在没有APP连接的情况,如同楼主的第一种情况一样,可以实现低功耗目标:2.2uA;
但是,这种方法修改后,楼主的第二种问题并没有解决哦。
1,我的项目工程就是simpleBLEPeripheral改过来的,修改了performPeriodicTask函数发送我的业务数据
2,我仔细看了simpleBLEPeripheral原工程,没有CC2541主动断开GAPP连接然后进入PM3的流程吧,都需要自己修改
3,我单步调试发现:
4,手机App主动断开连接会调用gapRole_ProcessGAPMsg函数,处理GAP_LINK_TERMINATED_EVENT事件,这样的流程会进入2.2uA低功耗
5,而CC2541主动断开连接GAPRole_TerminateConnection函数,并不会导致系统调用gapRole_ProcessGAPMsg处理GAP_LINK_TERMINATED_EVENT事件,这个流程就导致242uA的功耗
6,疑问:有没有那个函数是模拟手机App的断开连接呢?
我验证了,调用GAPRole_TerminateConnection,会调用GAP_LINK_TERMINATED_EVENT事件,我只是没法测电流
我的调用
if ( events & SBP_PERIODIC_EVT )
{
// Perform periodic application task
//performPeriodicTask();
if ( gapProfileState == GAPROLE_CONNECTED )
{
uint8 adv_enabled = FALSE;
// Disconnect
GAPRole_TerminateConnection();
// stop advertising
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &adv_enabled );
}
return (events ^ SBP_PERIODIC_EVT);
}
请问一下这个功耗是怎么测出来的的啊,测得哪里的电流啊,刚接触不太懂。