This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/CC2650EM-5D-RD:待机模式下的电流峰值

Guru**** 2563930 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/587211/rtos-cc2650em-5xd-rd-current-peaks-in-standby-mode

器件型号:CC2650EM-5D-RD

工具/软件:TI-RTOS

大家好、

我正在一个低功耗项目中工作、已经研究了整个论坛、尽管有类似的问题、但对此没有任何答案。

我使用    tirtos_cc13xx_cc26xx_2_18_00_03随附的 pinStandby_CC2650DK_5nf_TI_CC2650F128示例 。

  • 根据数据表、当示例将模块置于 具有 RTC、CPU、RAM 和(部分)寄存器保持的待机模式时。 XOSC_LF I 应该得到1.2uA。
  • 我将在大约4秒内获得0.3uA、  大约1秒内获得5.5uA 的峰值。

对于0.3uA、这很好、但5.5uA 峰值不好。

是否有人知道5.5uA 可能来自何处?

我已尝试将所有 GPIO 设置为输出、并在以下代码中的  CC2650DK_5n.c 文件中连接到低电平

const PIN_Config BoardGpioInitTable[]={

Board_DK_LED3 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN, /* LED 最初关闭 *
Board_DK_LED4 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN, /* LED 最初关闭 *
BOARD_KEY_SELECT | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN, /*按钮为低电平有效 *
Board_key_up | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN, /*按钮为低电平有效 *
BOARD_KEY_DOWN | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN, /*按钮为低电平有效 *
BOARD_KEY_LEFT | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN, /*按钮为低电平有效 *
BOARD_KEY_RIGHT | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN, /*按钮为低电平有效 *
Board_3V3_EN | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MIN, /* 3V3域最初关闭 *
BOART_UART_TX | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_DRVSTR_MIN、 /*处于非活动电平的 UART TX 引脚*/
BOARD_LCD_MODE | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN,
Board_LCD_CSn | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN,
BOARD_SPI0_MISO | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN,
BOARD_SPI0_MOSI | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN,
BOARD_SPI0_CLK | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN,

PIN_TERMINATE /*终止列表 */
}; 

我已经在所有引脚中尝试了以下配置:

| PIN_GPIO_OUTP_EN | PIN_GPIO_LOW

| PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN  

| PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN

 


这是我的主代码:

//
//! μ@文件 pinStandby .c
//! @简介 引脚待机示例。
//!
//版权所有(C) 2015-2016德州仪器(TI)公司- http://www.ti.com/
//

重新分发和使用源代码和二进制形式,无论是否
进行//修改,只要
满足以下条件//:
//
//重新分发源代码必须保留上述版权
//声明、此条件列表和以下免责声明。
//
//二进制形式的再发行必须在

发行时提供的//文档和/或其他材料中复制上述版权//声明、此条件列表和以下免责声明。
////
未经

事先书面许可,不能使用德州仪器公司的名称或//其贡献者的名称来认可或推广源自此软件的产品//。
////
本软件由版权所有者和贡献者提供
//“按原样”,不

承认任何明示或暗示的保证,包括但不限于//适销性和对//特定用途适用性的暗示保证。 在任何情况下、版权
//所有者或贡献者都不对任何直接、间接、偶然、
//特殊、模范、 或相应的损害(包括但不
限于采购替代产品或服务;丧失使用、
//数据或利润; 或业务中断)、无论

出于何种原因使用
本软件(即使被告知可能会造成此类损坏)、还是出于任何原因而产生的任何//责任理论(无论是合同、严格责任还是侵权行为)//(包括疏忽或其他)。
// //*********


//! 此示例将在活动状态和待机状态之间循环器件。
//! 每次从待机模式唤醒时、CPU 都会切换 LED、
//! 引脚驱动器、然后立即返回待机状态。
//! 器件在待机模式下的时间默认设置为5s;这可以是
//! 通过更改"dandbyDurationUs"变量进行修改。
//!
//! 请注意、如果将 standbyDurationU 设置为< 1ms、则器件将实际
//! 进入 IDLE 而不是 STANDBY、因为没有足够的时间来
//! 进入/退出待机模式。
//!
//! 请注意、如果您在待机期间测量功耗、它将是
//! 当 LED 亮起时会升高、当 LED 熄灭时会降低很多。
//!
//! 请注意、为了获得最低待机电流、JTAG 引脚 TMS 和 TCK
//! 应在对器件进行编程后通过移除
//! SmartRF06 EB 的 P408上的跳线。 TMS 和 TCK 具有内部上拉电阻和
//! 当仿真器处于非活动状态时被驱动为低电平、因此在对
//! 器件应移除这些跳线、以避免额外的泄漏电流。
// //*********


//包括
//********* /#include

#include 
#include 
#include 
#include 
#include 

//
//全局
//********* /*
任务和任务堆栈*/
Task_StructmyTask;
Char myTaskStack[512];

/* LED 引脚表*
//PIN_Config LedPinTable[]=
//{
// Board_LED0 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX,//
Board_LED1 | PIN_GPIO_OUTP_EN | PIN_PushPull | PIN_DRVSTR_MAX,//*最初关闭* PIN_LED_PushPHREST_ON
/*终止列表*//}
;

/**********
*@简介 重复休眠一段时间的任务、允许重复
* 进入/退出待机模式。 每个
*上的 LED 状态都被切换 迭代。
*
*@param UARg a0:未使用
*
*@param UARG A1:未使用
*
*@返回 无-不应再回来
/
静态空 taskFxn (UArg a0、UArg A1)
{
/*局部*//
PIN_STATE 引脚状态;
// PIN_Handle hPin;
// uint_t currentOutputVal;
uint32_t 标准持续时间 U= 50000000;//[7f0]

/*分配 LED 引脚*//
hPin = PIN_OPEN (&pinState、LedPinTable);

/*永久循环*/
while (true)
{
/*睡眠、让电源策略将设备转换为待机*/

Task_sleep (standbyDurationU/Clock_tickPeriod);

/*读取所有引脚的当前输出值*//
currentOutputVal = PIN_getPortOutputValue (hPin);
//
/*切换 LED,一次配置所有 LED *//
PIN_setPortOutputValue (hPin、~currentOutputVal);
}
}

/*!*********
*@简介 应用程序主入口点
*
*@param 无
*
*@返回 国际-不应再回来
/
int main (void)
{
/*本地*/
Task_Params taskParams;

/*在启动内核之前执行 PIN 初始化*/
PIN_init (BoardGpioInitTable);

/*配置任务。 *
Task_Params_init (&taskParams);
taskParams.stack = myTaskStack;
taskParams.STACKSIZE = sizeof (myTaskStack);
Task_construction (&myTask、taskFxn、_taskParams、NULL);

/*启动内核。 *
BIOS_start();

/*永远不应该出现在这里;包括一个使编译器满意的返回*/
返回0;
}

请帮助、我需要将项目配置为每6小时唤醒一次、具体取决于电池。
此致、并提前感谢您。