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.

[参考译文] MSP430FR6047:器件可能在从 AM 转换到 MSP430FR602/3/4(如 MSP430FR6047 勘误表中所述)期间进入锁定状态。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1526287/msp430fr6047-device-may-enter-lockup-state-during-transition-from-am-to-lpm2-3-4-stated-in-errata-of-msp430fr6047

器件型号:MSP430FR6047

工具/软件:

在我的应用程序中、主代码启动后进入 LPM3 模式 。 在以下条件下、应用将退出 LPM3:

  1. 每个都会发生中断 15.625ms  、并为其 ISR 提供服务 不退出 LPM3 模式

  2. 每一次 125ms  、系统使用指令退出 LPM3、LPM4_EXIT为提供服务 超级循环 (while(1U)) 一次 、然后返回到 LPM3 模式。 该循环每 125ms 重复一次 。

  3. 这两者都是如此 LPM3 和活动模式 UART 保持有效 并使用运行 SMCLK 配置任何功能 、在上运行 频率与 MCLK 相同 (8MHz )

根据上述条件、 此情况是否属于器件勘误表范围 声明:

“器件可能会在从 AM 转换到 LPM2/3/4 期间进入锁定状态。  在从 AM 转换到 LPM3/4 的电源模式期间请求 SMCLK 时找到。“

如果是这样、则如何退出该锁定状态。

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

    您好、

    是否使用 UART 将 MCU 从 LMP 唤醒至 AM? 如果没有、我会说您的代码没有问题。  

    此致、

    现金好

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

    现金奖励、

    感谢您的答复。

    在本例中、UART 始终处于活动状态、我们使用 DMA 自动将任何接收到的数据传输到缓冲区。

    我的担心与器件勘误表相关、其中说明了这一点 在从活动模式 (AM) 转换到 LPM3 期间 (例如在 ISR 退出或状态寄存器修改期间)、如果任何外设(CPU 除外)请求 SMCLK、CPU 可能会进入锁定状态

    我们将此错误解释如下:

    • 我们有一个计时器中断、每 15.625ms 触发一次 。

    • 在每 125ms (即每第 8 个中断发生一次)中、我们退出 LPM3 并while(1)在返回到 LPM3 之前服务于该循环一次。

    • 因此、在返回到 LPM3 期间、会发生从 AM 到 LPM3 的转换。

    • 由于我们的 UART 始终处于活动状态、因此如果在此确切转换期间通过 UART 接收到任何数据、则可能会请求 SMCLK、从而满足勘误表的条件。

    我们在这种解释中是正确的吗? 如果不是、此错误 陈述的正确解释是什么。

    下面是我所询问的勘误表的快照。 此外、其中一个解决方法是在接收到 UART 字节之前唤醒 CPU。   

    等待富有成效的回应。

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

    如果 UART 真的处于活动状态、那么这不是问题。 但是、如果 UART 始终处于空闲状态、比如在没有主动发送或接收数据的情况下、这可能是一个问题。

    另一方面、如果 UART 真的是如此活动、那么您并不真正处于 LPM3。 如果请求了 SMCLK、您将获得 LPM1。 因此、您仍然可以使用 LPM1、消除所有疑问。

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

    您好、

    同意 David 的意见。 如果 UART 始终处于活动状态、则不会进入 LPM3、因为 UART 已使用 SMCLK。 而对于您的应用、正如我所说的、不要使用 UART 将 MCU 从 LPM3 唤醒、这将有助于您避免此错误。 仅使用计时器唤醒 MCU、当 MCU 恢复到 AM 时、您可以通过 UART 发送和接收数据。 LPM3 模式下接收数据的更多信息。 将 RX 引脚配置为 GPIO 输入并使用下降沿在 LPM3 模式下唤醒 MCU。 第一条 8 位消息将用作唤醒器件的虚拟消息。  

    此致、

    现金好

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

    感谢您的答复。

    很抱歉、由于此行造成混淆、即

    “在本例中、UART 始终处于活动状态。“

    我的意思是、我的 UART 初始化已经完成、并配置为接收和发送。 完成此操作后、我进入 LPM3 模式、然后准备好在 LPM3 模式下接收任何字节。 这种情况是否使我的申请属于所述的错误,即  

    “器件可能会在从 AM 转换到 LPM2/3/4 期间进入锁定状态。  在从 AM 转换到 LPM3/4 的电源模式期间请求 SMCLK 时找到。“

    如果我想在 LPM3 模式下接收一个字节而不符合上述勘误表、如何实现这一点。

    接下来、我还有一个问题:

    如果我们在 ACLK(即 32768Hz)上运行 UART、那么不应发生此问题、因为 ACLK 在 LPM3 模式下处于活动状态。

    但在使用 ACLK 生成波特率的用户手册中、与使用 SMCLK (8MHz) 相比、TX 和 RX 误差百分比将增加。

    如上图所示、RX 和 TX 误差百分比对于 ACLK 来说太高。

    这些错误的确切含义是什么? 它们是否与位时序有关?例如、在传输过程中、+16.02%或–17.19%的 TX 误差是否意味着每个位都关闭了该百分比? 对于 RX、这一错误是 37.3%、23.24%、这意味着什么。

    我们的产品具有基于光学 LED 的通信功能、这些误差在实时或现场场景中会有什么影响。

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

    勘误表中描述的问题可能发生在您的情况下。 为什么? 因为字符到达可能导致 UART 在转换到 LPM3 的同时请求 SMCLK。 例如当计时器 ISR 退出时。

    使用 ACLK 是勘误表中介绍的权变措施、这样可以正常使用。

    时序误差是指在每个位时间中心的采样偏离位的实际中心的程度。 如果这太接近位时间的边沿、则会发生错误。 还取决于另一端器件的精度 该指南详细介绍了如何计算时序错误。

    请注意、使用 SMCLK 和 LPM3 也有位时序错误。 时钟启动需要时间、这会使位时间偏斜、因为它们都以开始位的下降沿为基准。 在较低的比特率下问题更少。

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

    还有一点要注意、正如我在前一篇文章中所说的、 将 RX 引脚配置为 GPIO 输入并使用下降沿唤醒处于 LPM3 模式的 MCU。 使用 GPIO 中断将 MCU 从 LPM 模式唤醒、因为 GPIO 端口不会请求 SMCLK。 它可以帮助您避免此问题。  

    此致、

    现金好

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

    尊敬的 Cash & David:

    感谢您之前的答复。

    我们想进一步阐明关于 UART 运行的一点。 目前、我们正在将三个 UART 外设与三个外部器件连接、所有这些器件都使用 SMCLK 作为 BRCLK 以 9600 波特率运行 LPM3 模式中运行 。 但是、由于基于 SMCLK 的 UART 操作存在相关的勘误表、我们正在考虑切换到使用 ACLK (32.768kHz) 来实现低功耗操作。

    我们查看了数据表、并观察到在使用 ACLK 时在此波特率下 RX 和 TX 误差百分比相对较高。

    问题 1: — 是否可以使用此配置来处理这个高得多的错误?

    但是、我有一些疑问。

    如果我们使用 BRCLK = 32768Hz 且所需的波特率为 9600、那么每位理想的 BRCLK 周期数为:

    32768/9600≈3.41

    使用 UCBRSx = 0x92(调制位模式:10010010)、如用户指南中的建议:

    TX case(以 9600 速发送):
    如果我们根据调制模式松散地估算发送侧时序、那么对于 8 位传输、每位使用的 BRCLK 数量遵循以下模式:
    {4、3、3、4、3、 3、4、3}→总共= 27 个 BRCLK

    8 位上的理想总 BRCLK = 3.41 × 8 = 27.28

    因此整个字节范围内的 TX 误差为≈μ s
    (27−27.28)/ 27.28 × 100 =−1.02%

    这似乎低于数据表规定的 TX 误差 (~±17%)。
    这个计算是否正确?

    RX case(在 9600 时接收):
    RX 端包含多个错误:

    1. 同步错误:
      采样频率最高可达±0.5 BRCLK。

    2. 每位调制错误:
      使用 3 秒和 4 秒的模式时、调制近似为每位 3.41 BRCLK。

    对于单独的位:

    • 如果使用 3 个 BRCLK:误差=−0.41 BRCLK(≈−13%)

    • 如果使用 4 个 BRCLK:误差=+0.59 BRCLK(≈+17%)

    尽管每个位会累积此误差、但调制模式会使总漂移受到限制。 然而、将调制引起的漂移与±0.5 BRCLK 同步误差相结合、在最坏的情况下、采样点可能会漂移高达 1 BRCLK、即位周期的~33%(对于 3 BRCLK 位)。

    因此、我们的主要关切是:

    问题 2.
    如果与 MSP 的连接器件也在使用相同的基于 ACLK 的 UART 设置进行通信(即 TX 和 RX 都受到类似的调制/同步错误)、这是否会导致显著的位时序不匹配和通信故障?  

       

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

    我使用 32768 LFXT 以 9600bps 的速度使用了 MSP430 UART、几乎没有麻烦。 我遇到的唯一问题是、通信是在两个 MSP430 之间进行的、并且他们使用了不同的调制模式。  例如、当另一端是 (real) PC 串行端口时、就没有问题。

    传输计算结果错误。 您关心的是接收器对数据进行采样时。 这将或多或少地位于每个位时间的中间、以开始位的下降沿为基准。 数据表编号反映了逐位计算。  

    错误将因位而异。 一个时间有点短、另一个时间有点长。 调制模式会尝试偶数化、以便接收器不会在太接近边沿时进行采样。