请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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小时唤醒一次、具体取决于电池。
此致、并提前感谢您。