本帖最后由 leijixiaomile 于 2017-6-12 14:52 编辑
CYBLE 关于低功耗的官方文档是AN92584: http://www.cypress.com/documentation/application-notes/an92584-designing-low-power-and-estimating-battery-life-ble?source=search&keywords=an92584
这里列出,我觉得比较重要的关于低功耗的点:
1. 在Cydwr文件的system中设置debug 为GPIO口,这个可以减少mA级别的电流;
2. 设置时钟: 在cydewr文件的clock中,设置LFCLK的时钟源为WCO,同时选择WCO的power mode为low power.
3. 进入低功耗时,需要停ILO、ECO,然后调用深度睡眠函数:
CySysClkIloStop();
CySysClkEcoStop();
CySysPmDeepSleep();
注意:把BLE(指BLE子系统)设置进入低功耗的语句: CyBle_EnterLPM(CYBLE_BLESS_DEEPSLEEP)如果成功调用,BLE会把ECO停掉,唤醒会打开。所以如果使用了BLE,并且采用了AN中的状态机制,使系统进入低功耗,就不需要关ECO与开ECO,BLE的状态机制会自行处理。
4. AN中的状态机制: 在主循环中调用 CyBle_EnterLPM(CYBLE_BLESS_DEEPSLEEP),使BLE进入低功耗。其中BLE底层会自动处理BLE的功耗模式,如果BLE在传输数据,不会让BLE进入deepsleep,只有当BLE空闲时,才会进入低功耗模式。
5. AN中的状态机制:判断BLE是否进入了低功耗?判断用户的应用是否处理完? 如果都是,进入deepsleep。如果BLE没有进入低功耗,根据用户的应用情况,把系统设置为sleep模式。
6. 其中BLE在保持连接以及广播过程中,是可以进入deepsleep模式的。BLE有WCO控制其自动唤醒,进行数据交互,底层的机制用户不需要考虑。进行步骤4中的操作即可。
7. 关于用户用到的组件,在进入deepsleep之前,需要把组件sleep,系统唤醒后,需要把组件唤醒。如果组件跟外设连接,在组件sleep之后有漏电流时,需要设置组件的IO状态(模拟高阻基本可以满足需求),避免漏电流产生,系统唤醒后把组件的IO状态设置回正常工作的状态。
8. 用到IO时,为避免产生漏电流,需要在系统进入深度睡眠时,设置IO的状态。如果IO用作中断唤醒源,外部的上拉、下拉电阻尽量大,同时IO口设置成数字高阻态。
9.影响功耗的点: BLE的连接间隔及slave latency(BLE中断的唤醒频率),中断唤醒的频率,外设的漏电流(需要杜绝不必要的漏电流),WCO的精度等。
本文如有纰漏,还请各位大神不吝斧正。
个人新建cypress PSoC 交流群: 497718076, 欢迎大家加群讨论。
|