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.

[参考译文] MSP430G2553:更改 DCO 校准会导致 MCU 子集上的 I2C 接口发生故障

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1328078/msp430g2553-changing-dco-calibration-causes-i2c-interface-to-fail-on-a-subset-of-mcus

器件型号:MSP430G2553

我正在为一个在核心使用 MSP430G2553的客户端开发一种产品。 根据我们的制造合作伙伴提供的最新一批已组装的预生产单元(直接从 TI 采购 MSP430)、我们收到的24个单元中有4个单元的 I2C 接口已间歇性不工作。 这一点很一致、即一旦单元通电、I2C 接口将继续保持其出现的任何状态(正在工作或未工作)、直到下电上电。 我还发现、如果单元上电不工作、我可以通过看门狗计时器将 MCU 复位(WDTCTL = 0;)、此后 I2C 接口似乎可以正常工作。

在深入探究该问题后、我发现更改 DCO 校准会直接影响 I2C 初始化的可靠性。 也就是说、如果我在这些选择单元上保持 DCO 不变、则 I2C 每次都将起作用。 如果我将 DCO 重新配置为8、12或16 MHz、初始化就会变得不可靠。 同样、这种情况仅发生在我们的一小部分设备上(24个中的4个)、其余设备在16MHz 运行并且不会出现 I2C 问题、这在我们开发该项目2年以上的时间中从未注意到。

通过结合 MSP430g2xx3代码示例 msp430g2xx3_DCO_calib.c 和 msp430g2xx3_uscib0_i2c_12.c 、我可以重现此问题;在禁用看门狗之后向 I2C 示例添加以下内容。

if (CALBC1_16MHZ==0xFF)					// If calibration constant erased
{											
    while(1);                               // do not load, trap CPU!!	
}
DCOCTL = 0;                               // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_16MHZ;                   // Set range
DCOCTL = CALDCO_16MHZ;                    // Set DCO step + modulation

运行该示例代码、有时我可以出现 I2C 接口、我将看到尝试写入地址48h (使用逻辑分析仪观察 SDA 和 SCL 引脚)、而其他时候我将看到同一 I2C 信号上没有任何活动。  如果不 添加上述代码、I2C 接口将初始化、我将看到每次都尝试写入地址48h。

我还通过 单独运行 msp430g2xx3_DCO_calib.c 示例测试了 DCO。 在这些相同的故障单元上将 DCO 配置为16MHz 时、P1.4上的输出处于16MHz 的100kHz 范围内、因此校准似乎在容差范围内。

什么情况会导致 DCO 发生变化 从而导致 I2C 无法工作? 我可以理解 DCO 是否略超出容差会导致 I2C 时钟频率不一致、但似乎没有出现这种情况、并且在这些情况下我看不到任何 I2C 使用寿命的迹象。

提前感谢您提供的任何帮助。

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

    您是否确定这是发生故障的唯一 I2C? MCU 是否可能整体冻结或以其他方式发生故障?

    一种可能是 功率斜坡问题。 MCU 将在大约 VCC = 1.8V 时启动、但要在16MHz 下运行、它需要达到接近3.3V。 由于在 main 的开始处加速、缓慢的功率斜坡可能未达到所需的 VCC。 不同的电路板是否有可能具有(稍微)不同的斜升速率? 快速实验是插入类似"__delay_cycles ( );"作为主函数的第二行(当然、在关闭看门狗之后)、看看它是否改变了行为。

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

    谢谢、Bruce、感谢您的回复和建议。 我想您已经有所收获、因为这可以解释为什么通过 WDT 持续地重置 MCU 会导致 I2C 接口正确初始化、以及为什么我在使用电池或电源运行单元时会更频繁地出现这种情况。

    要回答您的第一个问题、我不确定受影响的只是 I2C 接口、但我有信心 MCU 不会冻结。  我们的生产固件具有由霍尔效应传感器触发的 LED 闪烁例程、我可以继续触发该例程、在我注意到受影响的器件上存在 I2C 故障后、GPIO 和计时器仍可正常工作。 不过、我尚未测试计时器是否以预期速度运行。 我不会注意到其他外设可能会受到影响。

    我曾尝试在禁用看门狗后添加非常显著的2秒周期延迟、但这并不是我所期望的银色项目。 受影响的单元仍然无法初始化 I2C。 我想进一步深入研究功率斜 升、因此我用几个示波器捕获旁路电容和引脚之间 DVCC (引脚30)处的电压、以检查工作单元和故障单元之间是否存在斜升差异。  以下是捕获结果、但似乎没有显著差异。 触发电平设置为1.8V、因此时间增量是相对于信号达到1.8V 时的值。

    图1:故障单元、从0V 上电
    捕获2:故障单元、从1V 上电(快速下电上电)
    图3:正常单元、从0V 加电
    图4:良好的单元、从1V 上电(快速下电上电)

    需要注意的几个方面是、有一个100uF 的大输入电容、电池供电进入 PCBA。 这就是有一个相当好的上升时间的原因。 然后输入电压会流经一个3.3V 稳压器、并且输出端有一个相当大的10uF 电容。 我们的产品 可驱动 电机、因此这些功能可防止 MCU 在电机以较低的电池电压启动时欠压。 最后、就在3.3V 电压进入 AVCC 和 DVCC 之前、我准备了1uF 和0.1uF 的旁路电容器。 故障单元的电路与正常单元相同。

    当我获得这些捕捉时、我注意到、在快速下电上电后、故障单元的故障频率高于从0V 通电时的频率。 我很好奇、 MCU 的内部电容是否存在任何变化、该变化可能导致 观察 VDCC 迹线时不会出现这种情况。

    Capture1

    捕捉2

    主题3

    图4

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

    尊敬的 Rob:

    现在的状态是什么?  

    如果您需要更多支持、请告诉我。

    谢谢。

    于浩

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

    尊敬的 Yuhao:

    是的、我在这方面仍然需要支持、这样我就可以更好地了解根本原因、如果从硬件设计角度而言我可以做些什么来缓解这个问题。

    谢谢。
    Rob

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

    有没有办法在这方面从 FAE 获取支持?

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

    自从我第一次发表评论以来已经过去了3周、我还没有收到任何来自 TI 员工的支持。 据我所知、这是从 TI 获取支持的唯一方法、除非我通过旁路渠道与 FAE 连接、我好像需要这样做。 对于我正在从事的项目、在我们准备投产时、我们已经订购了10万件此 MCU、我很惊讶它如此难以获得支持。