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.

[参考译文] TM4C1233H6PZ:TM4C1233H6PZ EEPROM 的数据丢失

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/572922/tm4c1233h6pz-data-loss-of-tm4c1233h6pz-eeprom

器件型号:TM4C1233H6PZ

大家好、

我现在到这里。

我遇到了 TM4C1233H6PZ 的 EEPROM 问题。

程序集如下所示:

e2e.ti.com/.../EEPROM.pdf

TM4C1233H6PZ 初始化。

EEPROM 初始化。

EEPROM 检查第5和第6个字节

第5字节和第6字节=0xFF (首次使用?)

是=> EEPROM 设置第一个字节= 0x00 /否=>下一步

EEPROM 检查第一个字节

第1个字节= 0x01 (不是第一次使用?)

是=>主程序和正常操作/否=> EEPROM 设置第一个字节= 0x01、复位 EEPROM 中的数据、写入第五和第六个字节= 0x11、擦除外部 EEPROM (25LC512)

(当 TM4C1233H6PZ 被启动时、程序将检查 EEPROM 的第一个字节和第五个+第六个字节。

如果 EEPROM 的第5个字节和第6个字节为0xFF、程序会将第1个字节清理为0x00。  

然后、程序检查第一个字节。

如果第1个字节不是0x01、程序将0x01写入第1个字节并复位整个 EEPROM、将0x11写入第5个字节和第6个字节。)

我的问题是 TM4C1233H6PZ 不是第一次使用、但不知怎么说、它"重置 EEPROM 中的数据、写入第5个字节和第6个字节= 0x11、擦除外部 EEPROM (25LC512)"。

自2014~2016年起、该产品的产量约为5000件、其中2件出现了此问题。

这 种问题的原因是什么?

硬件还是软件?

谢谢你。

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

    我已要求我的同事对此进行研究。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chen、
    我想知道第一个字节、第五个字节和第五个字节中有哪些值? 您只能检查第一个字节是否为0x1。 为了使第一个字节不等于0x1、该值可以是0x1以外的值。 因此、我想知道您是否可以读取第一、第五和第六个字节、以及您看到的确切值是多少?

    在收集更多信息之前、我不知道问题的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    感谢您的回复。

    这是代码。

    void main (void)

        /********* /

        /********* 變數宣告******** /

        int lcm_counter= 0x00;

        unsigned char function_selection = 0;

        /********* /

        /********* 初始化******* /

        Initializing ();  /* System Initialize */

        LCM_Reset (); // LCM 初始化*/

        /********* /

        /********* EEPROM **** /

        //EEPROM_Reset ();//重置 EEPROM */

        EERPOM 初始化();

    …………………μ A

    EERPOM 初始化()

        /******** 请查找 EEPROM_ADDRESS、如果您想了解更多详细信息*/

        无符号整型系数缓冲器= 0x00;

        unsigned char EEPROM_FIRST = 0;

        unsigned char char_buffer = 0;

        unsigned int int_buffer = 0;

        //从 EEPROM 读取数据

        EEPROM_READ_ON_Byte (&EEPROM_FIRST、0、1);

        EEPROM_READ_two_Byte (∫缓冲区、1、1);

        if (int_buffer > (volte_COE _MAX * 1000000))

        {

            EEPROM_FIRST = 0x00;

        }

        其他

        {

            INT_buffer = 0;

        }

        if (EEPROM_FIRST!= 1)

        {

            EEPROM_FIRST = 1;

            //擦除整个 EEPROM。 这并不是绝对必要的、因为与闪存不同、EEPROM 在编程之前无需被擦除。

            //但这将使我们能够在实验中更轻松地查看编程结果。

            EEPROMMassEras();

            /********* 使用指令更新後,全部內容皆為0xFF 图标 /

            EEPROM_IC_CHIP_ERASE ();   /***** 擦除内存 ic ***** /

            /********* 第一次使用******** /

            char_buffer = EEPROM_FIRST;

            EEPROM_Save_One_Byte (&char_buffer、0、1);//设置1 *

            /********* 第一次使用******** /

     

            /********* 語言********* /

            char_buffer = Language_default;

            EEPROM_Save_One_Byte (&char_buffer、0、2);//语言:英语*/

            /********* 語言********* /

     

            /********* 電瓶種類********* /

            char_buffer =电池类型;

            EEPROM_Save_One_Byte (&char_buffer、0、3);

            /********* 電瓶種類********* /

     

            /********* 溫度範圍********* /

            char_buffer =温度;

            EEPROM_Save_One_Byte (&char_buffer、0、4);

            /********* 溫度範圍********* /

     

            /********* 電壓校正 Voltage_Adjustment_ch0 ******** /

            INT_BUFFER = Voltage_Coefficients_ch0;

            EEPROM_Save_Two_Byte (∫缓冲区、1、1);//设置4003 *

            /********* 電壓校正 Voltage_Adjustment_ch0 ******** /

     

            /********* 電壓校正 Voltage_Coefficients_CH1 ******** /

            INT_BUFFER = Voltage_Coefficients_CH1;

            EEPROM_Save_Two_Byte (∫缓冲区、1、2);//设置4003 *

            /********* 電壓校正 Voltage_Coefficients_CH1 ******** /

     

    ……………………μ A 。

     

    在首次使用 MCU 之前、EEPROM 的值为0xFF。

    首次使用时、第一个字节设置为0x01、第五个字节和第六个字节设置为0x11 (例如)。

    正如您在代码中看到 的、如果第1、第5和第6个值不是上述值、程序将重置该值。

    我知道我不应该这样做,我应该保留他们的价值,但是…… 我做到了。

    问题是、生产产品上发生了什么情况、客户手中使用2年后 M4 MCU 中的 EEPROM 需要依靠大约2/5000个。

    所以我想知道为什么…

    我的同事在示例代码中发现了此文本....

    //如果电源电压为

    //! 当观察到该返回代码时不稳定、重试一次操作

    //! 电压稳定可能会清除该误差。


    它可能是由电压不稳定引起的。

    我将首先尝试、并告诉您是否是原因。

    谢谢你

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

    您好!

    如果在5000个中有2个问题、通常需要检查两年中执行的写入周期数、而不是代码。 可以超过该数字、芯片故障是正常的。 我们在这种存储器上遇到了类似的问题、2...6年后芯片出现故障、但写入周期数已超出、因此我们减少了写入次数。 如果您每次在另一个位置上写时检查并过度写入某个位置、则可以确定这是原因。

    这些记忆对于正常使用而言非常可靠、您每次检查和过度写入的做法在我看来是不寻常的、不必要的。

    对于2件、只需用新的替换即可。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我怀疑 EEPROM 已过期... 它具有有限数量的写入周期。
    大多数用于 EEPROM 的 Tivaware API 都提供了"错误检查"。 EEPROM 过期后、您将无法依赖它、但您可能可以让程序"仍然使产品正常工作、但不再依赖 EEPROM 数据-并向用户发出错误信号"。
    同时、也有一些可能的改进:
    -对 EEPROM 的写入频率较低-如果可能、仅在系统关闭之前(并且系统每天不会关闭数千次)
    -如果 EEPROM 发生故障,您可能可以将整个 EEPROM 页"传送到另一个扇区。 这些 EEPROM 具有"不同的页面"、当一个页面变旧而另一个页面从未使用时、它仍然是"新"的-因此您可以将数据偏移到另一个位置、从而使设备具有一些额外的使用寿命。
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尽管您回答正确、但我不排除低电压/电源故障问题。

    在主电源发生故障后、我使用电容充电来擦除/写入 EEPROM 的器件、这让我感到非常不安。 EEPROM 或闪存擦除/写入可能需要数百万个时钟周期、并会增加功耗。 FRAM/MRAM 将是更安全的替代方案。

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

    您好!

    O/p 使用25LC512芯片、此处不应用 Tiva API。。。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哇! 我不得不用 CTRL-F 来找到你所说的内容、Petrei!
    "我遇到 TM4C1233H6PZ 的 EEPROM 问题"这一开头的句子没有帮助、对吗?
    我想现在还有一个解决问题的选项:使用 TM4C EEPROM。 :)硬件更改应该为零。
    实际上、正如上文所建议的、FRAM 在我看来一直是 NVM 的最佳选择、具有低功耗和出色的使用寿命。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    25LC512是64Kx8、因此内部 EEPROM 太低、无法满足用户的需求。

    至于 FRAM、我不确定价格、在生产线上、即使是2c 差异也很重要。

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

    看情况而定。 TM4C 本身并不是最小和最便宜的选择、因此 FRAM 可能是一个选项。

    幸运的不是我们的决定 ;-)

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

    运营中心的 IC 成本约为1.67美元/年。 -相同大小的 FRAM、每个售价3.02美元-但不是很受欢迎。 8、000美元一整批-我相信这些不会"过时"。
    512kB 的 EEPROM? 真的??? 有趣的项目-"足够的数据"是否可以存储在更便宜的闪存中、而明智地选择将真正重要的数据存储在更小的 FRAM 中?

    抱歉、只是大声打字-很容易对其他项目给出盲目的意见、不知道实际要求! )

    顺便说一下、由于存在问题的 IC 甚至不是本论坛的 MCU、我想我们会感到非常疑惑! 我有这个 TM4C MCU、它接收来自汽车上4个不同轮胎的胎压数据-最近、Firestone 右前轮胎开始变得太平坦了。 您的男士能帮我解决这个问题吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意、我们对电源、ESD 保护措施和总体电路板构建/质量一无所知。
    所有这些"未知/未提供"(5K 中的两个)(故障率低于0.1%)可能不值得进行此类审查...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Bruno Saraiva">顺便说一句、问题 IC 甚至不是这个论坛的 MCU、我想我们太好奇了! 我有这个 TM4C MCU、它接收来自汽车上4个不同轮胎的胎压数据-最近、Firestone 右前轮胎开始变得太平坦了。 您的男士能帮我找出问题吗?[/引述]

    曾为我的前公司的一位客户从事过一个与此类轮胎压力测量系统相关的项目。 当时、他们使用了(ughh) MCP PIC16控制器以及其中一个 ISM 频段(433/866/915MHz)。 发送器部件(测量和传输)是一个一人汇编器代码项目... 我的这家公司后来也有其他汽车客户、我也学到了很多其他东西。

    从那时起、我只购买电子产品数量最少的汽车。

    但对于您的问题-我确信它与该测量系统无关、而是与阀门或轮胎无关。 问题是-该传感器通常包含在该(Schrader)阀中。 更换可能会有点贵。

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

    您存取存储器的频率如何? 您的代码是否在存储器中写入了超过100k 次、如果是、它可能不再起作用...

    您可以检查微控制器勘误表... 也许那里有一些东西...

    您能否更换这些主板、直至确定主要问题是什么?

    我没有经验、但5000块板中的2个问题可以被视为问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Thiago Borba Onofrae"]我没有经验,但5000块板中的2个问题可以视为问题?

    这取决于客户。 如果发现有问题、有些人会发回数千个批次。

    [引用 user="Thiago Borba Onofrae">您存取存储器的频率如何? 您的代码是否在存储器中写入了超过100k 次、如果是、它可能不再起作用... [/报价]

    IMHO 的磨损似乎不太可能。 除非在最高温度下发生 Mostl 擦除/写入访问、否则100k 代表保证的下限。 温度下降10度时的测量值。 您可以将平均值乘以2。

    我曾在一家公司处理过很多损坏的闪存/EEPROM 设置、所有这些都与不良的硬件设计或无知("过于乐观")的软件设计有关。 擦除/写入操作每节电池需要毫秒、功耗也会增加。 如果您在中间拉电流,则会得到观察到的结果...

    我认为 OP 可以通过在擦除/写入期间强制断电来测试这一点。 如果这会损坏大量器件、则可以进行硬件重新设计/修复。

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

    您好、F.M.、感谢您的回答!

    当您说"糟糕的硬件设计或无知("太乐观")的软件设计"时、您如何克服这些问题? 您在哪里了解如何实现更好的硬件和软件设计? 是否有人教过您或更像时间和经验?  

    此致!

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

    [引用 user="Thiago Borba Onofrae"]当您说"硬件设计不良或无知("过于乐观")软件设计"时、您如何克服这些问题?

    您可能不喜欢我的回答-离开此公司。

    [引用 user="Thiago Borba Onofrae"]您在哪里了解了如何实现更好的硬件和软件设计?

    当时我有一些经验,但在公司比较新(不到3年,而10年... 15年的"蜘蛛")、并从国外迁入。 更重要的是、它与大规模产品进行了交易、其中硬件成本压倒了(不需要任何不必要的)一切。 大约三分之一的整个代码涉及硬件错误修复和权变措施。 作为一种“外部”,批评项目并在最后证明正确并不是一种更加突出的做法...;-)而且由于公司或其开发部门不想改变,我确实这样做了。 我搬到了一家更加注重软件设计、更注重最大限度降低硬件成本的公司。

    [引用用户="Thiago Borba Onofrae">是否有人教过您、或者更像时间和体验?  [/报价]

    基本上、我自己学到了很多。 在大学里、我只是用一种编程语言(当时我已经知道)接受了培训、我做了很多项目、包括业余和商业项目、即我工作的公司。 从自己的错误中学习绝对是有益的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Thiago、对您的问题还有一些思考:
    -每隔10分钟、您就可以省去跳过数据表中的一个枯燥/累人的部分、然后您将花一个小时来确定不起作用的地方!
    ——良好发展的经验是最好的。 体验主要是一系列糟糕的决策! 尝试做出更便宜的错误决策、让您的职业生涯更容易演变。
    -对于您不熟悉的组件/解决方案、请使用制造商的评估套件-适用于 MCU、电源、充电器、甚至更简单的东西是运算放大器-它们的设计通常"全程"都能让您获得成功。
    -至于有人在授课? 除了教学指导原则之外、没有其他东西... 即使是为公司工作、您也只需了解他们的解决方案的工作原理(或不工作)、但这并不一定意味着这是最佳解决方案。 在这样一个瞬息万变的行业中、他们的旧设计和可靠设计可能会通过更新的可用选项轻松得到改进...
    每个人都很棒的一周!
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述用户="Bruno Saraiva">Chen Hiao、  

    您存取存储器的频率如何? 您的代码是否在存储器中写入了超过100k 次、如果是、它可能不再起作用...  

    您可以检查微控制器勘误表... 也许那里有一些东西...

    您能否更换这些主板、直至确定主要问题是什么?  

    我没有经验、但5000块板中的2个问题可以被视为问题?

    Thiago B. Onofre
    [/报价]

    尊敬的先生:

     在本产品中、如果用户仅使用常用 函数、则相关信息仅供使用

    EEPROM 读取:49次、写入:每次使用11次。

     如果用户使用所有功能、全 Function中、

    EEPROM 读取: 79次、写入:每次使用76次 μ s。

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

    [引述用户="Chen Hiao"] EEPROM 读:49次写:每次使用11次。

    读取访问没有问题、"写入"就是。

    [引述用户="Chen Hsiao"]写:每次使用11次。

    什么是"每次使用"?

    您能否将其分解为每小时(或每天)写入(可能是每节电池)?

    最常写入的单元/块将首先分解。

    如果这些故障器件的此数字远低于10000、您可能会在一开始排除磨损问题。

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

    当程序向 EEPROM 写入内容(未读取)时、我尝试使电压不稳定、并重复了该问题。
    我不确定这是否是根本原因。

    实际上、我是一名 HW 男子、知道汇编语言、但在 C 编码方面不太好。
    我的代码员将在向 EEPROM 写入内容之前进行电压检查、并检查写入是否成功。

    我们的产品没有内部电池、它仅使用经过测试的外部电池、因此电压可能很关键。

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

    如前所述、擦除/写入需要毫秒。 对于具有80MHz 内核时钟的 MCU 而言、这是一段很长的时间。

    问题是,当写访问被断电中断时,MCU 和 EEPROM 会发生什么情况? 您的电路板上可能有一些电解电容、将 Vcc 保持几毫秒。 我想它不会使您的系统保持足够长的时间来完成写入访问。

    我参与了一个处理类似问题的项目。 断电后、它必须将多个值保存到闪存/EEPROM 中。 该器件由市电供电(240V)、并具有一个电解电容、设计用于为此写入过程供电的时间足够长、包括一些安全裕量。 当然、它有一个传感器输入来检测电源故障。

    我的建议是这条线路上的内容。 您可能需要检测断电情况、以避免过多的写入访问。 您可能需要电源(CAP 存储)才能在完全中断前完成至少一个擦除/写入访问。 当然、这需要重新设计硬件。

    第二个选项是以连续顺序存储多个版本的数据、包括一些校验和、如果检测到损坏、则返回到最后一个"正确"集。 不涉及硬件更改、但涉及非常重要的软件更改。

    或者、您可以接受与此当前问题保持一致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    F.M.
    电容器还老化的电位计。 根据电压速率与实际系统电压以及温度的不同、这种老化会很快发生。 去年功能完美的电容器可能已经不够了...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我提到的安全裕度。 电解电容器通常会在指定的使用寿命内失去一半的容量。