主题中讨论的其他器件:SysConfig、
工具与软件:
尊敬的团队:
在 basic_ble 演示中、我在 App_Stack itDoneHandler 中启动一个 open-and-reopen (周期为1秒)的 UART 驱动程序循环。 然后、我使用 ET 跟踪电流、并发现第一轮打开 UART 驱动器的电流消耗略 高于 后续四轮、如下所示。
为什么会发生这种情况? 请提供帮助。
谢谢。
BR
Connor
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.
工具与软件:
尊敬的团队:
在 basic_ble 演示中、我在 App_Stack itDoneHandler 中启动一个 open-and-reopen (周期为1秒)的 UART 驱动程序循环。 然后、我使用 ET 跟踪电流、并发现第一轮打开 UART 驱动器的电流消耗略 高于 后续四轮、如下所示。
为什么会发生这种情况? 请提供帮助。
谢谢。
BR
Connor
尊敬的 David:
代码提取很简单。
#include <ti/drivers/UART2.h> #include <util.h> void uart_init(void); UART2_Handle _uartHandle = NULL; Clock_Struct clkOpenUart; Clock_Struct clkCycleUart; #define UART_RX_BUFF_SIZE (256 * 4 + 128) uint8_t uart_buf[UART_RX_BUFF_SIZE]; void _uart_deint(void) { UART2_close(_uartHandle); Util_constructClock(&clkOpenUart, (void*) uart_init, 1000, 0, false, 0); // Util_constructClock(&clkOpenUart, (void*) BLEAppUtil_invokeFunctionNoData, // 1000, 0, // false, // (uint32_t)ttm_usart_init); Util_startClock(&clkOpenUart); } void uartReadCallBack(UART2_Handle handle, void *buf, size_t count, void *userArg, int_fast16_t status) { } void uartWriteCallBack(UART2_Handle handle, void *buf, size_t count, void *userArg, int_fast16_t status) { } void uart_init(void) { UART2_Params uartParams; UART2_Params_init(&uartParams); UART2_Params_init(&uartParams); uartParams.readMode = UART2_Mode_CALLBACK; uartParams.writeMode = UART2_Mode_CALLBACK; uartParams.readReturnMode = UART2_ReadReturnMode_PARTIAL; uartParams.baudRate = 115200; uartParams.readCallback = uartReadCallBack; uartParams.writeCallback = uartWriteCallBack; _uartHandle = UART2_open(CONFIG_UART2_0, &uartParams); UART2_read(_uartHandle, uart_buf, 244, NULL); Util_constructClock(&clkCycleUart, (void*) _uart_deint, 1000, 0, false, 0); Util_startClock(&clkCycleUart); }e2e.ti.com/.../util.ce2e.ti.com/.../8176.util.h
您好、Connor、
感谢您提供信息。 您正在从 App_Stack 421itDoneHandler 调用 uart_init()吗? 我怀疑此处的电源策略可能会有所不同。 您能否分享 Power_getConstraintMask ()的回报? 您可以查看此处内部功率驱动器的详细信息 /docs/drivers/doxygen/html/_power_8h.html.
BR、
David。
尊敬的 David:
您好、Connor、
感谢您的耐心等待。 我使用了您共享的文件(UART 和时钟设置)来尝试重现您看到的行为。 但是、在第一次 UART 事件期间、没有相同的 UART 额外电流消耗。 我想问您是否已经修改了 Jan 在开始时建议的额外延迟(500ms)的文件(虽然从代码上看它不像)? 我们是否遗漏了对项目的任何其他修改?
顺便说一下,我使用 basic_ble 示例(SDK 版本8.10 ),在 SysConfig 中选择了"Disable the Display Module"选项-> Advanced Settings ,然后按如下所示修改 appMain ()函数:
void appMain(void) { // Call the BLEAppUtil module init function BLEAppUtil_init(&criticalErrorHandler, &App_StackInitDoneHandler, &appMainParams, &appMainPeriCentParams); uart_init(); }
请告诉我您的想法。
BR、
David。
尊敬的 David:
感谢您的尝试!
实际上、这个问题的关键在于以下步骤:上电--> UART 打开(电流消耗较高)--> UART 关闭--> UART 打开(电流消耗较低(正常))--> UART 打开-->
我希望下图有助于理解。
总之、"第1个 UART 打开"比"第2个 UART 打开"消耗的电流更高、上电后"第1个 UART 打开"消耗的电流是重现该问题的关键。
这很奇怪…
因此、您能否说明一下 导致各种电流消耗的原因?
谢谢。
BR、
Connor。
您好、Connor、
与团队进一步讨论时、这可能与 UART 无关。 在进行 UART RX 时、UART 驱动器不允许待机。 因此、不要考虑来自 UART 的问题、而是在首次进入待机模式之前增加电流的问题。 您是否可以尝试用如下代码替换您的 UART2_open()-> UART2_READ()-> UART2_CLOSE ()序列:power_setConstraint (PowerLPF3_disallow_standby);等待一段时间(时钟定时器)、然后等待 Power_releaseConstraint (PowerLPF3_disallow_standby);
BR、
David。
尊敬的 David:
非常感谢您和团队的辛勤工作。
我已经测试了提到的序列: power_setConstraint (PowerLPF3_disallow_standby);等待一段时间(时钟定时器)、然后等待 Power_releaseConstraint (PowerLPF3_disallow_standby)。 请看下图。
正如您所提到的、此问题似乎与 UART 驱动程序无关。
您能否弄清楚为什么在首次进入待机模式之前电流增加?
期待您的回复。
谢谢!
BR、
Connor。
您好、Connor、
好的、有趣的。 您能帮我完成最后一次寄存器状态检查吗?
请看一下第一个 UART/待机事件的 CMKD 寄存器、我们假设等待30秒后。 特别是 CKMD.HFXTTARG.IREF、它将为我们提供有关当前状态的信息。 CKMD.HFXTTARG.IREF 值应以8启动(在 Power_init (之后))、然后针对每个待机条目减小1、直到振幅稳定。
BR、
David。
您好、Connor、
感谢您提供额外的信息。 让我们尝试启用 初始 HFXT 振幅补偿 SysConfig 配置固件。
如果应用要求 HFXT 振幅在启动后已处于理想范围内、则可以使用 PowerCC23X0_Config.startInitialHfxtAmpCompFxn 来启用初始 HFXT 振幅补偿。 如果启用了初始 HFXT 振幅补偿、则在启动时/启动后将找到最优振幅、这意味着在 HFXT 准备就绪之前需要更长时间、但当它准备就绪时、振幅将已经处于最佳范围内。 请注意此处提到的时序权衡。
BR、
David。
尊敬的 David:
非常感谢您的帮助。
启用 初始 HFXT 振幅补偿 看起来是可行的、如下图所示。
但我已经注意到、"启用初始 HFXT 振幅补偿将导致更多的闪存使用率以及从启动到首次射频操作的时间更长。" 该句子在 PowerCC23X0.h 中进行了描述
CCS 可以轻松占用更多闪存。 我的问题是如何测量 从启动到首次射频操作的时间。 任何文档中都有描述吗? 或者、通过 "basic_ble"进行测量的推荐方法是什么?
谢谢!
BR、
Connor。
您好、Connor、
很高兴看到进步。
我建议查看用户指南的这一部分: https://software-dl.ti.com/simplelink/esd/simplelink_lowpower_f3_sdk/8.10.00.55/exports/docs/ble5stack/ble_user_guide/html/ble-stack-5.x-guide/debugging-index-cc23xx.html#debugging-rf-output。如果您启用射频输出引脚(RX、TX)、那么应该可以轻松地确定引导(您可以在此处使用另一个 GPIO)与使用逻辑分析仪进行首次射频操作之间的时间。
BR、
David。