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.

[参考译文] TM4C1294KCPDT:基于 ARM 的微控制器论坛

Guru**** 2521030 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1167248/tm4c1294kcpdt-arm-based-microcontrollers-forum

器件型号:TM4C1294KCPDT

你(们)好

一段时间以来、我们注意到一个严重的问题、即系统启动并在 EEPROM 初始化后读取 EEPROM 值。
(SysCtlPeripheralEnable (SYSCTL_Periph_EEPROM0);
 EEPROMInit();)

EEPROMRead (((uint32_t *)&eepromStruct, 0,sizeof (eepromStruct));

每次一个或多个值为0、而不是保存在一周或一年之前。 很有问题!!

如果我做得对,写不是问题,看起来是对的。

EEPROMProgram ((uint32_t *)&eepromStruct, 0、sizeof (eepromStruct));

是否应该使用不同的地址而不是0? 当我读取 EEPROM 的第一部分 时、它容易受到攻击或敏感? 实际上、我应该/可以使用哪些地址?

我在 Robert Adsett (5年前)的一篇文章中阅读了这篇文章

"我曾遇到 EE 故障、尤其是在电源故障和高 EMI 条件下、断电或干扰导致的故障可能会导致器件中的任何位置出现写入。 我听说过设备,如果在断电期间中断,故障将优先影响第一个位置(一些人出于这一原因保留了前几个位置) "

因此、我可能应该开始写入较高的地址。

TIA

Maccabi

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

    Maccabi、您好!

    [引用 userid="488819" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1167248/tm4c1294kcpdt-arm-based-microcontrollers-forum "]

    我在 Robert Adsett (5年前)的一篇文章中阅读了这篇文章

    "我曾遇到 EE 故障、尤其是在电源故障和高 EMI 条件下、断电或干扰导致的故障可能会导致器件中的任何位置出现写入。 我听说过设备,如果在断电期间中断,故障将优先影响第一个位置(一些人出于这一原因保留了前几个位置) "

    [/报价]

    罗伯特的确这样说 、但他的前言是:

    "特别是 Bob、我们将有更好的 TM4C 来源、但让我分享一些来自其他器件的现场观察结果。"

    因此、这一说法并不能证明他在使用 TM4C129x 器件的 EEPROM 方面的经验。

    如果您使用的是 TM4C129器件、 那么我最初可以想到的唯一原因是勘误表 MEM#07。 我不确定这是否适用于您的案例。

    除此之外,任何特定的地址都不应比另一个地址更容易受到影响。 这不是我们在任何时候看到的 TM4C129器件出现的问题。

    您可以采取的另一个步骤是调整启动过程以确保 EEPROM 已正确初始化:

        //
        // Enable the EEPROM module.
        //
        SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);
        
        //
        // Wait for the EEPROM module to be ready.
        //
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EEPROM0))
        {
        }
        
        //
        // Wait for the EEPROM Initialization to complete.
        //
        ui32EEPROMInit = EEPROMInit();
        
        //
        // Check if the EEPROM Initialization returned an error and do not
        // proceed if so.
        //
        if(ui32EEPROMInit != EEPROM_INIT_OK)
        {
            while(1)
            {
            }
        }

    此致、

    Ralph Jacobi

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

    感谢 Ralph 的回答、

    我确实缺少了一些东西:

     while (!SysCtlPeripheralReady (SYSCTL_Periph_EEPROM0)) !!!

    我希望这是解决我的问题的方法。

    根据您的经验、这是否是我出现问题的原因?  

    此致、

    Maccabi

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

    Maccabi、您好!

    我以前没有看到过您的特定问题、因此我无法从个人经验中说、但在正确初始化 EEPROM 的最佳实践中、该步骤与标准外设不同、 以前的器件专家可能已经观察到您的问题、并实施了最佳实践来避免这种情况。 我只是没有这种背景可以肯定地评论。

    此致、

    Ralph Jacobi