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.
工具与软件:
团队成员、您好!
我的一个客户想在 IDLE 状态下使用 I2C。 为此、他们使用 mmwave_L_SDK_05_04_00_01注释掉了 power_management.c 中 powe_idle3entryhook ()内的块
//选通 I2C 时钟
// PRCMPeripheralClkEnable (Power_module.dbRecords[8]、PRCM_GATE_CLK_DISABLE);
// CSL_REG32_fins ((CSL_APP_RCM_U_BASE + CSL_APP_RCM_IPCFGCLKGATE0)、APP_RCM_IPCFGCLKGATE0_IPCFGCLKGATE0_APP_I2C、
// PRCM_GATE_CLK_DISABLE);
但是、即使在上面注释掉了 I2C 门块、I2C 通信也似乎不时会失败。 我们能否提供一些指导、如何在空闲状态下使用 I2C?
此致、
Victor Park
您好、Victor:
我已经加入了我们的软件专家。 请允许我们在一天左右提供回复。
谢谢。此致、
Sivaprasad
您好、Victor:
需要尝试以下操作:
1.首先将问题隔离到 idle3entryhook ()和 idle3resumehook ()函数。 如果这两个函数都为空(所有注释掉的函数都是空的)、那么 I2C 是否仍然可以工作?
2.如果在上述情况下 I2C 正常工作,那么这些功能中的任何一个都存在问题。 请一定要在 idle3resumehook ()函数中注释掉"// Ungate I2C clock"部分。
请告诉我尝试这些方法的结果、我们可以继续这样做。
此致、
TIM
您好、Tim
1.我 注释了两个函数。 但 I2C 读取不起作用。
2.不起作用
还有什么可以尝试的呢?
在空闲模式下、无法在每个帧之间使用 I2C?
您能举几个例子进行说明吗?
Tim Henderson、您好!
请就客户的上述问题向我们提供帮助。
此致、
Victor Park
尊敬的 Taeheon、Victor:
您确定器件是进入空闲模式、而不是进入深度睡眠模式吗? 您是否能够在空闲函数中设置一个断点以确认您将进入空闲状态? 否则、器件可能会转而进入深度睡眠状态。 您可以进入 SysConfig、并在"Power"选项卡中调整时序阈值以进入深度睡眠和空闲模式。
如果我们确认您实际上正在进入空闲模式功能、那么我们可以进行进一步调试。
此致、
TIM
Tim、您好!
根据你的意见,我测试如下:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SDK:MMWAVE_L_SDK_05_04_00_01、
CCS:12.6、
来源: motion_and_presence_detection 示例、
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1. LPDS 的阈值设置为较大的值 、例如 睡眠阈值(99999999、99s)。
2.将帧速率设为2s (2000)、如下所示:
此设置用于测试目的、稍后将使用5fps (200)。
之后、当我继续调试时、如下所示、Power_idleFunc (slpTImeus)发生一个错误。
4.然后我用 Tera Term 检查了日志。 您可以在下面看到结果。
它是在 Power_disablePolicy()之后打印的;
slpTimeus 约为1.9s (帧速率:2s)。 PwrStateTaken 为2 (power_idle)。
如您所说、它可能已设置为深度睡眠、我如何将其设置为空闲?
此致、
Taeheon
大家好、Taeheon:
您是否能够在 idle3resumehook()和 idle3entryhook ()函数中设置断点? 或者设置 print 语句、然后从这些函数查看 TeraTerm 中的输出? 由于 PwrStateTaken 是 power_idle、因此它应该进入空闲状态、我不希望它进入 LPDS。
此外、您是否使用与默认设置不同的配置配置了 I2C?
您还提到 I2C 有时会出现故障。 这是否意味着它有时会工作? 是否存在正常工作或不正常工作的条件?
禁用低功耗模式时、I2C 是否正常工作?
此致、
TIM
Tim、您好!
您的问题的答案如下:
1.我们可以在 idle3resumehook ()和 idle3entryhook ()函数中通过 Teraterm 查看 print 语句的输出。
2. I2C 只会将 传输模式从阻塞更改为回调和 自有目标地址。
3. I2C 在 Power_enablePolicy ()和 Power_disablePolicy ()之间似乎不起作用。
4.如果我把低功耗模式设置为禁能、那么 I2C 运行正常。
此致、
Taeheon
大家好、Taeheon:
感谢您的确认。 您能否再次确认您尝试使用 idle3_resume/entry()两个函数进行尝试 空?
我们现在正在更深入地探讨这个问题、当我们发现任何其他事情可以尝试时、我会告诉您。
谢谢!
TIM
Tim、您好!
感谢您的帮助。
注释掉 idle3resumehook ()和 idle3entryhook ()函数中的所有代码并设置低功耗使能后、我测试了 I2C 通信是否正常。 因此、I2C 无法正常工作。 如果您看到任何我可以尝试的内容、请告诉我。
此致、
Taeheon
您好、Taehon:
让我内部检查一下、我希望能在一两天内回复。
谢谢!
TIM
大家好、Taeheon:
我已经和我们的研发团队确认、即使在空闲模式下、CPU 也处于深度睡眠模式。 要使用 I2C、首先需要将内核从深度睡眠状态唤醒。 有关唤醒中断列表、您可以参考 TRM。 请参阅第 23.6节:来自 PRCM 的唤醒机制。
但是、没有特定的 I2C WIC 来唤醒器件、因此您可能需要发挥创造力、找到唤醒 CPU 的权变措施。
如果您想使用 I2C、我建议最简单的替代方案是将 lowPowerCfg 设置为0、而不为此使用低功耗模式、因为在功耗方面、您可能看到的最佳节省效果可能是选通少数外设。
此致、
TIM
Tim、您好!
我想知道是否可以动态更改 LowPowerCfg 模式(enable <-> disable)。
此致、
Taeheon
您好、Taehon:
您能说明一下您想以什么方式动态更改它吗? 您是否建议在器件发出线性调频脉冲时、有时进入低功耗深度睡眠模式、有时则不进入? 或其他方面的内容。
谢谢!
TIM
您好、Tim
有。 在 lowPowerCfg = 1下运行时、我希望在下一个周期帧中动态更改为 lowPowerCfg = 0。 另外、我想要相反的结果。
是否是更改 power_management.c 中 powerManagementTask ()中 gMmwMssMCB.lowPowerMode = 0等值的正确方法? 我被使用 gMmwMssMCB.lowPowerMode 的任务弄糊涂了。 您能告诉我正确的方法吗?
此致、
Taeheon
您好、Taehon:
很抱歉耽误你的时间。 可能有几种方法可以做到这一点。 在"Power_SleepPolicy"中、此函数确定采用哪种电源模式(Power_setLowPowModeTaken)。 您可以更改该函数逻辑以跟踪帧计数、并且仅允许在奇数帧上进入低功耗模式。
您也可以按照您提到的方法设置 gMmwMssMCB.lowPowerMode = LOW_PWR_MODE_ENABLE 或 LOW_PWR_MODE_DISABLE 、具体取决于帧编号。
欢迎您尝试任何一个选项,我不确定他们会有什么副作用,除了提高功耗。
此致、
TIM