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.

[参考译文] ~0.5%器件上的信息内存段 D 丢失

Guru**** 2392095 points
Other Parts Discussed in Thread: MSP430G2533, MSP430G2231

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1110594/loss-of-information-memory-segment-d-on-0-5-of-devices

器件型号:MSP430G2533
主题中讨论的其他器件: MSP430G2231

........................................................................................................................................

问题:
大约0.5%的器件上的信息内存段 D 丢失。 用于校准数据的信息 D、因此器件会失去校准。 重新校准成功重新写入信息 D。闪存其余部分没有问题。 由于安全保险丝熔断、我无法检查其他信息段(特别是 C 和 B)。 但是、段 C 和 B 未使用。 我正在考虑将校准存储在 D 和 C 中、并在启动时运行数据完整性检查、但我更希望找到根本原因、而不是添加此带辅助。

........................................................................................................................................

硬件描述:
处理器-以16MHz 运行的 MSP430G2533 (请参阅下面的注释以了解闪存时钟时序)
电源- 3.3V、250mA -具有大量大容量电容的刚性 LDO
编程环境-低噪声、ESD 安全、受温度控制的组装区域
工作环境-室内/室外使用、典型温度在30-100 F 之间、无冷凝
故障器件-故障器件上的高温或高湿度无使用迹象

........................................................................................................................................

时钟说明:
根据 MSP430G2xx 数据表:闪存时序发生器工作频率、fFTG、必须在大约257kHz 至大约476kHz 的范围内(请参阅器件专用数据表)。

我将以250kHz 的频率运行闪存、刚好低于此规格的底部。 我的理解是、如果写入闪存时该值太高、可能会导致一个泄漏的弱写入。

注1 -我错误地运行了接近1MHz 的闪存时钟、并且看到了同样的问题。 将代码降至250kHz 会导致相同的问题。 损耗发生在大约0.5%的器件上、样本大小为7000个器件、5000 @ 1MHz、2000 @ 250kHz。

注2 -在采用 MSP430G2231的类似器件上以1MHz 和250kHz 闪存时钟运行相同的闪存代码、我看到信息段 D 的零丢失。0%的器件、3000个器件的样本大小、2000 @ 1MHz、1000 @ 250kHz。

........................................................................................................................................

固件描述:
固件在正常运行期间不会写入信息 D。 信息 D 用于编程后的校准、然后在正常器件使用中的正常代码执行期间保持不变。

这些器件的 JTAG 安全保险丝熔断、因此我无法通过这种方式进入它们。 。 我添加了诊断代码来显示操作器件中的0x1000和0x1002内容、因此可在数据损坏后检查内容。 在损坏的器件上、数据被复位为0xFFFF、看起来好像正在进行擦除。 它不会被单个位或类似的位破坏。

当数据丢失后重新运行校准时、器件会成功地重新写入信息 D 并保留而不会进一步丢失(任何重新校准的器件都不会再次丢失其信息 D)。 不过、这可能只是一个将低赔率相乘的游戏。 0.5% x 0.5%= 0.0025%

////////////////////////////// CALIBRATION 1 STARTED ///////////////////////////////
    __disable_interrupt();                      // Disable Interrupts

    /* Code that does average sampling goes here */

////////////////////////////// ERASE FLASH /////////////////////////////////////////
    Flash_ptr = (unsigned int *) 0x1000;        // Initialize Flash RF pointer
    FCTL1 = FWKEY + ERASE;                      // Set Erase bit
    FCTL2 = FWKEY+FSSEL1+FN5+FN4+FN3+FN2+FN1+FN0;// MCLK/64 = 250 kHz as FCLK
    FCTL3 = FWKEY;                              // Clear Lock bit
    *Flash_ptr = 0;                             // Dummy write to erase Flash segment D
    while(BUSY & FCTL3);                        // Wait for flash write to finish

////////////////////////////// WRITE FLASH /////////////////////////////////////////
    FCTL1 = FWKEY + WRT;                        // Set WRT bit for write operation
    *Flash_ptr = average;                       // Write value to flash
    while(BUSY & FCTL3);                        // Wait for flash write to finish
    FCTL1 = FWKEY;                              // Clear WRT bit

////////////////////////////// CALIBRATION 1 FINISHED ///////////////////////////////
       
////////////////////////////// CALIBRATION 2 STARTED ////////////////////////////////

    /* Code that does average sampling goes here */

////////////////////////////// WRITE FLASH /////////////////////////////////////////
    Flash_ptr = (unsigned int *) 0x1002;        // Initialize Flash segment D pointer
    FCTL2 = FWKEY+FSSEL1+FN5+FN4+FN3+FN2+FN1+FN0;// MCLK/64 = 250 kHz as FCLK
    FCTL1 = FWKEY + WRT;                        // Set WRT bit for write operation
    *Flash_ptr = average;                       // Write value to flash
    while(BUSY & FCTL3);                        // Wait for flash write to finish
    FCTL1 = FWKEY;                              // Clear WRT bit
    FCTL3 = FWKEY + LOCK;                       // Set LOCK bit

////////////////////////////// CALIBRATION 2 FINISHED ///////////////////////////////
    __enable_interrupt();                       // Enable Interrupts
}

........................................................................................................................................

其他类似的线程:
https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/92849/flash-corruption-in-application-that-never-writes
https://www.embeddedrelated.com/showthread/msp430/37737-1.php

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

    如果只有信息 D 被擦除、我怀疑代码有问题。 导致您的闪存擦除代码运行的东西。 由于这种情况很少发生、因此很难跟踪。

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

    尊敬的 David:

    感谢你的答复。 我考虑过代码中的错误。 奇怪的是、0x1000和0x1002始终复位为0xFFFF、表示闪存擦除没有写入。 执行校准的函数执行擦除、然后对0x1000和0x1002进行两次写入。 如果这个代码块正在执行、我会看到损坏的数据-无效的校准值-而不是一次没有重新写入的干净擦除。

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

    您是否启用了看门狗? 如果是这样、错误代码执行可能会启动闪存擦除、但在到达代码以写入数据之前让看门狗复位 CPU。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="495359" URL"μ C/support/microcontroller /MSP-low power-microcontroller -group/MSP430/f/MSP-low power-microcontroller -forum/1110594/loss of 信息丢失内存段 d-on 0-5-of -devices"]处理器- MSP430G2533以16MHz 运行(请参阅以下闪存时钟计时说明)
    电源- 3.3V、250mA -高阻抗 LDO、具有大量大容量电容[/报价]

    加电/断电时、电源的上升/下降时间是多少?

    处理器最大频率取决于 VCC

    如果在上电或断电期间处理器频率超出 VCC 的规格、则 CPU 可能会执行错误、从而导致启动闪存擦除。

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

    切斯特、

    问得好。 有一个为 LDO 馈送电压的开关。 总上升时间为~1.5ms、我在初始化16MHz 时钟之前插入了100ms 延迟。 电压下降的情况是我认为的、但用于低电池电量检测。 测量速度不够快、无法停止执行或在电压下降时减少时钟。

    什么是检测这种情况并暂停/停止执行的最干净方法? G2533上没有 SVS。

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

    尊敬的 David:

    我禁用了看门狗、但根据 Chester 的建议、断电时执行错误代码似乎是可能的。

    感谢您提出的其他建议。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="495359" URL"~μ C/support/microcontroller /MSP-lower-power-microcontroller 组/MSP430/f/MSP-lower-microcontroller -forum/1110594/loss of 信息丢失内存段 d-on 0-5-of 器件"]这些器件的 JTAG 安全保险丝熔断、因此我无法进入这些器件。[/quote。]

    您是否尝试使用 BSL 获取信息 D 中的数据?

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

    您好、Gary、

    BSL 是在内部进行窥视的绝佳选择。 我没有尝试过、但会调查其中一个故障器件。 在当前修订版器件上、我有一个固件诊断屏幕、其中显示了信息 D 的内容、这是我知道器件返回时它正在被擦除的方式。 但是、我无法使用此诊断程序浏览其他存储器位置。

    我计划在下一个电路板修订版的复位线路中添加一个硬件电压监控器。 糟糕的是、这些 G 器件上没有 SVS。

    同时、我已使用 Info B 作为 Info D 的备份编写了自愈代码。在引导时、如果任一个代码为空、则另一个代码将复制到中。 如果两者都不为空、但它们不同、则选择 Info D 作为"主器件"并复制到 Info B 中。这允许重新校准器件(校准到 Info D 中)、且 Info B 在下一个下电上电周期从 Info D 接收新的校准值。

    如果这为我提供了0.5% x 0.5%的总缺陷率、我们将会获胜。

    感谢大家提供了大量用于诊断此问题的选项、并指出当在这些器件上打开时钟且没有 SVS 和1.8V BOR 电平时、以更快的速度运行时、电压下降会导致错误代码执行。