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.

[参考译文] TMS320F28069:TMS320F28069

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/652383/tms320f28069-tms320f28069

器件型号:TMS320F28069
主题中讨论的其他器件:C2000WARE

您好!

我们 要将器件置于低功耗关断模式、我们使用空闲模式和通过 CAN 消息唤醒。 此方案工作正常。

但是、我们需要进一步降低电流、因此需要将器件置于待机或 HALT 模式、但需要在 CAN 消息上唤醒。 如何执行此操作?

 是否有任何一个使用了 CAN 消息作为唤醒的待机或 HALT 模式?  

请提供建议。 我们需要尽快解决这个问题。

此致、

Pandurang Khutal

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

    只有在空闲模式下、才可以使用 CAN 或任何外设在 LPM 模式下唤醒器件。

    您可以通过几种方法进一步降低功耗。 您是否已禁用其他外设时钟? 此外、由于 CAN 以最高1MHz 的频率运行、因此您可以在进入空闲状态之前降低系统时钟。 一旦 CAN ISR 开始执行、您可以恢复全速操作。


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

    是的。 我禁用了其他外设的时钟、现在电流为@40mA。 系统使用电池运行、需要减小电流、以便延长电池寿命。 因此、我们需要使用待机或 HALT 模式。 我们是否可以通过任何方式唤醒控制器? 我知道 GPIOA 端口可以唤醒控制器、但我们需要使用 CAN 消息唤醒?

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

    我们已使用 GPIO30引脚将控制器从 HALT 模式中唤醒。 代码片段如下所示。 现在、在所有模式下都使用 CAN 消息来唤醒控制器。 我已从 PCAN 传输 CAN 消息以唤醒控制器。 但在 IDLE、STANDBY 和 HALT 模式中消耗的电流是相同的。 您能不能建议以下代码中有什么错误?

    我们还禁用了外设的时钟。 要求是进一步降低电流、从而尝试将器件置于待机或 HALT 模式。

    睡眠模式工作电流睡眠模式电流
    空闲130mA60mA
    待机130mA60mA
    停止130mA60mA


    //此函数根据任何将器件置于睡眠模式的请求被调用。 在这个功能之前、所有时钟被禁用
    void enter_lpm (void)

    Dint;

    EALLOW;
    当器件以跛形模式(PLLSTS[MCLKSTS]= 1)运行时、//不要进入 HALT 低功率模式。
    //仅在 PLL 不处于跛形模式时进入低功耗模式。
    if (SysCtrlRegs.PLLSTS.bit.MCLKSTS!= 1)

    //SysCtrlRegs.LPMCR0.bit.LPM = 0x0000;// LPM 模式=空闲
    // SysCtrlRegs.LPMCR0.bit.LPM = 0x0001;// LPM 模式=待机
    SysCtrlRegs.LPMCR0.bit.LPM = 0x2;// LPM 模式=停止


    //选择唤醒源
    GPIO_lpmSelect (hal.gpioHandle、GPIO_Number_30);
    EDIS;

    EnterIntoLMPModes();





    #pragma CODE_SECTION (EnterIntoLMPModes、"ramfuncs");
    void EnterIntoLMPModes (空)

    EALLOW;
    /*将闪存置于最低功耗*/
    FlashRegs.FPWR.bit.PWR = 0;
    /*禁用 XCLKOUT */
    SysCtrlRegs.XCLK.bit.XCLKOUTDIV = 3;
    EDIS;

    //强制流水线清空以确保写入
    //返回前发生最后配置的寄存器。

    _asm (" RPT #7 || NOP");

    /*执行 IDLE 命令以在 CAN 上唤醒*/
    //
    空闲;



    //this is in cmd file for loading ramfuncs
    ramfuncs :load = FLASHG// YJL 以适应引导加载程序
    运行= RAML1、// RAML0_L1以避免与 CAN 引导加载程序发生任何冲突
    load_start (_RamfuncsLoadStart)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    load_size (_RamfuncsLoadSize)、
    PAGE = 0

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

    Pandurang、

               查看您当前的数字,您似乎根本没有进入低功耗模式。

     

    一些与 LPM 相关的位/寄存器受 EALLOW 保护。 可以想象、EALLOW 在代码的其他位置被意外关闭。 在调试完成之前、请注释所有 EDIS 指令。

     

    连接调试器后、在执行 IDLE 指令之前、检查 LPMCR0寄存器是否写入了正确的值。 实际上、您应该在调试器已连接的情况下单步执行代码、以确保代码按应有的方式工作。 例如、它实际上是否跳转到 RAM 来执行闪存断电函数和 IDLE 指令?

     

    请"按原样"在 C2000ware 中运行 Example_2806xHaltWake 项目、并查看您获得的当前编号。 如果您使用该代码作为参考、您应该能够轻松找出代码的错误。 它还会告诉您在您自己的硬件上需要的数字。 此外、您的硬件是否能够测量仅流入您的 MCU 的电流? 换句话说、您测量的电流是否也会流向电路板上的其他一些元件?

     

    如果您使用串联电阻器进行电流测量(以利用欧姆定律)、请非常小心选择的值。 选择高阻值电阻器以获得可测量的压降很有吸引力(因为 HALT 模式电流在 uA 领域)。 但是、这样一个电阻器也会在加电期间使内核"电流"耗尽、并将器件置于一个未定义的状态。 考虑到所有3个 LPM 中的电流值相同、我怀疑这是发生的情况。 您的代码可能根本无法执行。 这就是我希望您在连接调试器的情况下单步执行代码的原因。

     

    无需通过代码禁用待机或 HALT 模式中的外设时钟。 在设计中自动完成的操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请仔细阅读此帖子。 它提供了一些有用的信息和提示: e2e.ti.com/.../577005
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Haresh、

    感谢您的更新。

    我们尚未使用电阻器来测量电流。 使用万用表/电源电流显示屏测量电流。

    我们已经对上述代码进行了调试、发现代码正在进入 RAM 区域并清除闪存功率位。 请参阅以下代码。 我们的观察结果是、在调试器弹出错误之前、它不会进入空闲线。 此错误未进入空闲睡眠模式。

    不能单步执行目标程序:
    (错误-1156 @ 0x8856)
    器件可能在低功耗模式下运行。 是否要使其退出此模式? 选择"是"以强制器件唤醒、然后重试此操作。 选择"否"以在不唤醒器件的情况下重试此操作。
    (仿真包7.0.48.0)

    因此、我们认为代码未执行 idel 模型命令、因此未进入 HALT 模式。 您能不能建议上面的代码有什么问题?

    #pragma CODE_SECTION (EnterIntoLMPModes、"ramfuncs");
    void EnterIntoLMPModes (空)

    EALLOW;
    /*将闪存置于最低功耗*/
    FlashRegs.FPWR.bit.PWR = 0;
    /*禁用 XCLKOUT */
    SysCtrlRegs.XCLK.bit.XCLKOUTDIV = 3;
    EDIS;
    //强制流水线清空以确保写入
    //返回前发生最后配置的寄存器。
    _asm (" RPT #7 || NOP");
    /*执行 IDLE 命令以在 CAN 上唤醒*/
    //
    空闲;


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

    只有在 IDLE 指令成功执行后、才会得到该错误。

     

    您是否按照我的建议从 C2000ware 运行示例代码? 这一步非常重要。

     

    当电流处于 uA 范围内时、依靠电源中的显示屏并不是一个好主意。 请使用在 uA 领域具有良好精度的台式计量器。

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

    您好、Haresh、

    根据您的建议、我使用了万用表、并在所有三种模式下测量了电流。 这些电流低于。

    空闲睡眠模式电流40mA

    待机睡眠模式电流29mA

    停止睡眠模式电流26mA

    通过从 RAM 运行 LMP 代码、我能够将器件置于 HALT 模式、但它不会在 CAN 消息上唤醒。 您能否使用上面的代码检查什么会导致问题的发生?

    我在待机模式下检查了器件是否正确唤醒了 CAN 消息以及用于中止模式唤醒的相同逻辑、但器件未被唤醒。

    谢谢、

    Pandurang Khutal

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

    Pandurang、

     

    26mA 的 HALT 模式电流看起来不正确。 器件未处于 HALT 模式或您的仪表读数不正确。 这是 C2000ware 的示例代码吗? 请确认。 如前所述、在 uA 领域测量电流非常棘手。 如果仪表没有足够的分辨率/精度,您可能会得到错误的读数。 请记住、您可以在尽可能低的范围内获得最佳精度。 当您启动代码时、您处于 MCU 的"运行"模式、其中100mA 范围是合适的、但在 HALT 模式中、10mA 范围是合适的。 同样、当您从 HALT 模式中唤醒时、您会回到运行模式。 您使用的仪表应具有出色的自动测距功能、能够无缝切换范围、而不会中断 MCU 的电源(或电流不足)。 我们在实验室中使用6 1/2位万用表。 您使用的万用表的品牌/型号是多少?

     

    如何确保仅测量流入 MCU 的电流? 我们讨论的是哪个电源轨(Vdd 或 Vddio)? 您是否使用片上 VREG?

     

    在不连接任何万用表的情况下执行"使用 CAN 的 HALT 模式唤醒"测试。 一旦您使该流量正常工作、请将万用表带入实验中。

     

    您是否已确保满足 HALT 模式唤醒信号的最小脉宽要求(如数据表中所示)? 您能否提供唤醒信号的示波器捕获?

     

    CAN 比特率是多少?

     

    您使用的是什么时钟源?

     

    您能否与我私下分享您电路板的原理图?

     

    总之、这是我希望您遵循的调试顺序:

    1. 从 C2000ware 运行示例代码、无需使用万用表。 甚至无需唤醒器件。 目的是简单地确定器件是否进入 HALT 模式。 不要禁用 XCLKOUT 输出。 如果器件进入 HALT 模式、XCLKOUT 将自动消失。
    2. 如果#1成功、请放入万用表、查看您看到的电流值是否与数据表中提到的值一致。
    3. 如果#2成功、尝试从 CAN 总线唤醒。 请仔细阅读器件 TRM 的第1.4.3节、了解待机模式和停机模式之间的差异。

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

    您好、Haresh、

    我已经尝试 使用 C2000ware 的示例代码 、所消耗的电流为@26mA、是相同的。 为了测量电流、我们使用 Tenma 72-7720万用表。

    我们尚未使用片上 VREG。 我们将测量电路板的总电流 、而不是 Vdd 和 Vddio。

    为了实现唤醒、我们在没有将万用表与连接到电路板的电源串联的情况下尝试了、但控制器仍然无法唤醒。 CAN 比特率为250kbps。 我们使用外部 OSC 作为时钟源、PLL 使能、内核频率为90MHz。

    根据数据表、XCLKOUT 输出在 HALT 模式中默认被禁用。 控制器已正确唤醒。

    一个观察结果是、我们使用来自 TI-CAN1042HVDRQ1的 CAN 收发器、它将 STANDBY 引脚作为控制引脚。 控制器进入 HALT 模式后、引脚的状态是什么。 引脚状态将保持还是将变为三态?

    我们现在没有用于  直接监控 Vdd 和 Vddio 线的板。 进入电路板的电源为12V、通过使用 LDO、我们生成了进入微控制器的3.3V 电压。 我们通过将万用表与12V 电源串联来测量电流。

    问题是控制器未通过 CAN 消息在 HALT 模式中唤醒。 但使用相同的逻辑、控制器在待机模式下唤醒。 请建议。

    谢谢、

    Pandurang Khutal

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

    如果您要测量电路板的电流消耗、您如何确定 MCU 是问题原因。 12V 时为26mA、为312mW!! 这一点特别有趣、因为您使用 c2000ware 示例测量的电流与您的应用程序代码相同。 这告诉我、在电路板的某个位置、即 F2806x 之外、您有312mW 的功率。

    器件引脚将在 HALT 模式中保持其状态。

    1.您是否能够出于调试目的监控任何 GPIO? 您可以在某些事件中设置/清除 GPIO、以确保代码按预期执行。 在 IDLE 指令被执行前放置一个。 将另一个放置在唤醒 ISR 中。
    2.如果您能够监控 XCLKOUT 引脚、则可以查看器件是否正在进入 HALT 模式。 如果 XCLKOUT 暂停并重新启动、这将被确认。
    3.如果您也可以观察到外部 XTAL、我们可以验证当唤醒脉冲保持足够长的时间以便 XTAL 在释放之前再次启动时。 在250kHz 时,比特率4us 脉冲*应该*足够长,以便 XTAL 开始,但只有您可以确认,因为它是特定于应用/电路板的。

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

    Pandurang、

               如前所述、您需要使用工作台万用表、其中的6个1/2数字表示 HALT 模式电流。

     

    您不应测量电路板的总电流以实现暂停。 您必须仅测量流入 VDD 和 VDDIO 电压轨的电流。 正如 Mark 提到的、电路板上的其他组件可能会导致这个26mA 的电流。 如果您有用于 MCU 电源轨的串联铁氧体磁珠、则可以将其拆下并在该点插入万用表。

     

    关于收发器、GPIO 引脚确实保持其状态为 HALT。 对于唤醒、您是否测量了 CANRX 引脚的脉冲宽度?

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

    您好、Haresh、

    根据我们的讨论、我们修改了代码并在电路板上进行了测试、但仍然无法通过 CAN 消息将控制器从 HALT 模式唤醒。

    我更改了唤醒源、而不是 CAN 消息上的唤醒。我使用 GPIO 引脚27作为唤醒源、并从 HALT 模式正确唤醒。

    您能不能建议为什么它没有从 CAN 消息唤醒?

    谢谢、

    Pandurang Khutal

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是脱机处理的。
x 出现错误。请重试或与管理员联系。