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.

[参考译文] CCS/TM4C1294NCPDT:数据验证错误、文件加载失败

Guru**** 2560390 points
Other Parts Discussed in Thread: TM4C1294NCPDT, TM4C1294KCPDT, EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/933964/ccs-tm4c1294ncpdt-data-verification-error-file-load-failed

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: TM4C1294KCPDTEK-TM4C1294XL

工具/软件:Code Composer Studio

您好!

我使用的是带 TM4C1294NCPDT 的定制板、突然收到此错误。

我没有改变任何东西。 我刚刚在 CCS 调试器中使用 JTAG 进行了刷新、这会导致该错误。

Cortex_M4_0:闪存编程器:闪存编程超时。
Cortex_M4_0:文件加载程序:验证失败:地址0x00000000处的值不匹配请验证目标存储器和存储器映射。
Cortex_M4_0:GEL:文件:C:\Users\Drai\Documents\Repos\PoE_Digital\ATS-poeclock\Debug\ATS-poeclock.out:发生数据验证错误、文件加载失败。

现在、我已经尝试了 TI 提到的所有内容、之后每次发布都没有解决方案。 这些帖子都没有为其提供任何解决方案。

我已经检查了链接器文件 GEL 文件、还验证了目标配置是否正确。  

CCS 版本7.3.0

我之前遇到过这个问题、但没有进行任何修改、一周后、我又面临这个问题。 今天早上它在工作、现在晚上它出现了错误、我没有改变任何东西。

有人可以帮我解决这个问题吗? 我认为它与闪存相关、但没有解决方案。  

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

    您好!

     很遗憾听到您的问题。 您可以尝试一些操作吗?

     -您是否在不同的计算机上看到相同的问题?

     -您可以尝试其他 JTAG 电缆吗?

     -您使用什么调试探针? 您还有其他要尝试的吗?

     -您能执行"解锁"操作吗? 解锁是批量擦除操作。

     -您能否检查您的电路板并确保任何组件上都没有松动的焊接连接?

     -您的 RBIAS 引脚连接是什么? 即使应用不需要以太网 PHY、也需要 RBIAS 电阻器。 在这种情况下、可使用4.7KOhm 10%容差电阻器代替 RBIAS 引脚和 GND 之间的4.87KOhm 1%容差电阻器。

     -如果您使用以太网,是否在以太网信号上有适当的保护二极管? 如果没有保护二极管、则可能会损坏器件。

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

    您好、Charles、

    1.是的、我在回来的一段时间内遇到了另一台笔记本电脑、我不知道是什么解决了它。 这是第二台笔记本电脑。

    2.我尝试了不同的 JTAG。 不仅是电缆、而且是整个东西。

    我正在使用 Tiva TM4C1294XL Launchpad 调试探针。 我尝试了另一个、我遇到了相同的问题。  

    4、我试了一下、但我觉得没有什么不同。

    5.我尝试了几块电路板,但我遇到了同样的问题。

    我的板上有以太网、上面有保护二极管。

    我观察到、当我尝试写入闪存时、调试器会转至 boot_cortex_m.c 文件并停留在该函数中

    __attribute__((section(".text:_c_int00_noargs"),已使用,裸机))
    void _c_int00_noargs (void)

    _c_int00_template (0、1);

    当我尝试对其进行重新刷写时、我会收到此错误

    Cortex_M4_0:闪存编程器:闪存编程超时。
    Cortex_M4_0:文件加载程序:验证失败:地址0x00000000处的值不匹配请验证目标存储器和存储器映射。
    Cortex_M4_0:GEL:文件:C:\Users\Drai\Documents\Repos\PoE_Digital\ATS-poeclock\Debug\ATS-poeclock.out:发生数据验证错误、文件加载失败。

    我不知道原因是什么。 我的代码在下午1点工作、我尝试在下午4点重新刷新代码、这个问题开始了。 我的代码中没有进行任何更改。

    此致、

    Deepak

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

    您好!

      [引用 user="Deepak rai]1. 是的、我在回来的一段时间内遇到了另一台笔记本电脑、我不知道是什么解决了它。 这是第二台笔记本电脑。[/quot]

    因此、这与计算机无关。

    [引用 user="Deepak rai]2. 我尝试了另一个 JTAG。 不仅仅是电缆、而是整个东西。[/引述]

    可以排除 JTAG 电缆。

    [引用 user="Deepak rai"]

    我正在使用 Tiva TM4C1294XL Launchpad 调试探针。 我尝试了另一个、我遇到了相同的问题。  

    [/报价]

    您的意思是 尝试另一种方法。 您构建的不同定制板或用作调试探针的不同 LaunchPad。 如果您使用的是同一 Launchpad、则可能与 Launchpad 有关。 我绝不会建议用户使用 Launchpad 作为调试探针、使用蓝色导线调试到目标系统。 您应该拥有自己的真实调试探针、而不是使用应用手册中所述的 Launchpad 来调试另一个电路板。

    [引用 user="Deepak rai]4. 我尝试过它、但我认为它没有产生任何影响。[/引述]

    好的、器件看起来不错。  

    [引用 user="Deepak rai]5. 我尝试了几个电路板、但遇到了同样的问题。

    正如我在#3中怀疑的那样、您使用的 Launchpad 作为调试探针可能是一个问题。 如果 JTAG 连接和任何与调试相关的内容(例如 Launchpad 上的 ICDI)、则您拥有的任何电路板都将出现问题。

    [引用 user="Deepak rai]6. 我的板具有以太网、并且上面有保护二极管。[/quot]

    保护二极管。 请确保您也要小心使用 RBIAS。

    话虽如此、我建议您使用真正的调试探针、如 XDS100、XDS200或 JLink。  

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

    您好、Charles、

    我已经尝试过3种不同的 LaunchPad 板进行调试、它们都为我提供了相同的错误。 是的、我将尝试一个真正的调试探针、但我认为这不是问题、因为我尝试了3个不同的探针。 以及多个定制板上。

    您对此有什么想法吗?

    我观察到、当我尝试写入闪存时、调试器会转至 boot_cortex_m.c 文件并停留在该函数中

    __attribute__((section(".text:_c_int00_noargs"),已使用,裸机))
    void _c_int00_noargs (void)

    _c_int00_template (0、1);

    当我尝试对其进行重新刷写时、我会收到此错误

    Cortex_M4_0:闪存编程器:闪存编程超时。
    Cortex_M4_0:文件加载程序:验证失败:地址0x00000000处的值不匹配请验证目标存储器和存储器映射。
    Cortex_M4_0:GEL:文件:C:\Users\Drai\Documents\Repos\PoE_Digital\ATS-poeclock\Debug\ATS-poeclock.out:发生数据验证错误、文件加载失败。

    此外、我们拥有 TM4C1294KCPDT 的定制板、我们希望增加闪存、并切换到 TM4C1294NCPDT。

    这个新 MCU 是我最近看到的这个问题。 问题是否与变更相关? 我还验证了 targetConfig 文件和 GEL 文件。

    此致、

    Deepak

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

    您甚至可以连接到目标吗? 或者您只遇到编程问题、但连接到目标还是可以的?

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

    查尔斯

    我能够进行编程、但在我的代码中、我需要将一些值保存在闪存存储器中、这时我会看到这些事件。

    我观察到、当我尝试写入闪存时、调试器会转至 boot_cortex_m.c 文件并停留在该函数中

    __attribute__((section(".text:_c_int00_noargs"),已使用,裸机))
    void _c_int00_noargs (void)

    _c_int00_template (0、1);

    当我尝试对其进行重新刷写时、我会收到此错误

    Cortex_M4_0:闪存编程器:闪存编程超时。
    Cortex_M4_0:文件加载程序:验证失败:地址0x00000000处的值不匹配请验证目标存储器和存储器映射。
    Cortex_M4_0:GEL:文件:C:\Users\Drai\Documents\Repos\PoE_Digital\ATS-poeclock\Debug\ATS-poeclock.out:发生数据验证错误、文件加载失败。

    一旦我遇到这个问题、我必须重新刷新它、它会重新编程电路板、并且再次发生相同的周期。

    此致、

    Deepak

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

    您能否检查您的 TM4C1294NCPDT 是否正确?

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

    查尔斯

    我已经验证过、您提到的所有三个方面都是相同的。  

    此致、

    Deepak

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

    [引用 user="Deepak rai"]我可以进行编程,但在我的代码中,我需要将一些值保存在闪存中,这就是我看到这些事件的时候。

    您是保存到闪存还是 EEPROM? 您在什么地址写入闪存?

    您能展示您的代码片段吗?

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

    大家好、Charles、我将使用 FlashPBSave 函数保存到 Flash 存储器中。

    //将更新的本地结构写入闪存
    TimerIntDisable (Timer1_base、timer_TINA_TIMEOUT);//禁用 Timer1的 Timer A 计时器
    FlashPBSave ((unsigned char *)&Parms);//保存闪存参数。
    TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);//启用 Timer1的 Timer A 超时中断

    这就是我要使用的内容。

    我已经使用它来对其进行初始化。

    void Parms_init (parameters* parms){

    unsigned char *pucBuffer;

    //验证参数块结构是否与闪存参数块大小匹配。
    assert (sizeof (parameters)=FLASH_PB_SIZE);

    FlashPBInit (FLASH_PB_START、FLASH_PB_END、FLASH_PB_SIZE);//初始化参数块。

    pucBuffer = FlashPBGet ();//获取闪存中最新参数块的指针。

    如果(pucBuffer){//如果不存在参数块则返回 Null。
    打印青色("使用保存的块的参数\n");
    memcpy (parms、pucBuffer、sizeof (parameters));//从闪存复制参数块。
    }否则{//如果不存在参数块,则活动参数是出厂默认值。
    print_Cyan ("使用出厂默认设置的参数\n");
    memcpy (parms、&ParmsFactory、sizeof (parameters));

    #define FLASH_PB_START 0xF0000

    #define FLASH_PB_END 0xF4000

    #define FLASH_PB_SIZE 512

    我不认为该功能是一个问题、因为我们已经使用了多年、除了切换 MCU 之外没有做任何更改。

    此致、

    Deepak  

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

    您是否有空间为闪存参数块分配32KB (两个擦除扇区)? 为了实现容错操作、至少需要两个擦除块。 另请参阅以下文章 :https://e2e.ti.com/support/microcontrollers/other/f/908/t/646502?TM4C129ENCPDT-FlashPBSave-fails-after-8-times

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

    尊敬的 Bob:

    我没有额外的16KB 存储器、但仍用于测试目的、我尝试了您的建议、但也无法正常工作。

    即使在第一次保存时、我的代码也会转到此函数

    __attribute__((section(".text:_c_int00_noargs"),已使用,裸机))
    void _c_int00_noargs (void)

    _c_int00_template (0、1);

    卡在那里。 我想知道导致这种情况的原因。 这是我在此之后遇到数据验证错误的主要原因。

    此致、

    Deepak

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

    您能否将项目缩减、使您仍然遇到错误、但它可以在 EK-TM4C1294XL LaunchPad 上运行、并且仍然重现错误? 然后、如果您可以向我发送已去除符号的项目、我可能能够对其进行一些调试。

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

    Bob、

    这对我来说并不容易。 这将需要很多时间。

    我不知道到底发生了什么。 昨天 FlashPBSave 工作正常、今天再次出现了该问题。 我没有改变任何东西。

    还有其他方法可以检查它吗?

    此致、

    Deepak

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

    我理解这种困难、但要找出问题、从出现故障的系统开始、并进行更改来找出停止故障的原因、比尝试独立重现问题要快得多。  首先、我建议禁用用作参数块写入超时的计时器中断、让我们看看这是否会产生影响。

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

    Bob、

    我尝试过它。 它没有产生任何影响。 我还尝试了 XDS 100调试探针、但仍未更改。

    当我看到我以前的一个承诺正在工作时、我尝试了一些改变。 之前提交代码和新代码之间的变化与 FlashPBSave 函数没有关系。 但是、删除这些更改后、我的代码会在一段时间后再次开始使用此函数。

    __attribute__((section(".text:_c_int00_noargs"),已使用,裸机))
    void _c_int00_noargs (void)

    _c_int00_template (0、1);

    导致上一个函数的前一条语句是

    Map_FlashProgram ((((uint32_t *) pui8Buffer、(uint32_t) pui8New、g_ui32FlashPBSize); 位于 FlashPBSave 函数中。

    正如您说过的、我有32KB 的闪存可用于参数块。  

    现在、我只需添加与任何内容无关的2行代码即可中断代码。 我想知道导致这种情况的原因、因为每次添加新代码时、它都会停止工作、有时它会中断、然后再次开始使用我之前删除的新代码行。

    我检查了我的内存分配、目前我正在使用428KB (40%)的闪存、然后最后90KB 用于保存在内存中的其他设置、其中32KB 用于参数块。  

    对于 NCPDT 的闪存存储器、我需要考虑什么吗?

    此致、

    Deepak

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

    在对 MAP_FlashProgram()的调用上放置一个断点,并验证所有三个参数是否都是32位对齐的(一个数字可以四分频而不是余数)。

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

    Bob、

    我验证了这三个值在两种情况下的中断和运行时都是相同的。

    我还注意到,在不起作用的代码中,如果我在 MAP_FlashProgram()上放置一个断点,我的代码会  不断地执行相同的 MAP_FlashProgram()行,如果我删除了断点并运行相同的断点代码,则会转到此函数

    __attribute__((section(".text:_c_int00_noargs"),已使用,裸机))
    void _c_int00_noargs (void)

    _c_int00_template (0、1);

    正在工作的代码,即使在 MAP_FlashProgram()上放置断点,代码也会在我继续后恢复。

    此致、

    Deepak

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

    您是否运行的是实时操作系统? 如果是、哪一个?

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

    否 它不是 RTOS 项目。

    我仍然遇到这个问题、很难跟踪它。 与我所做的更改没有关联。

    我仍然不明白为什么 FlashPBSave 会有问题、只要给出的值正确且有可用的存储器。

    -Deepak

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

    Bob、

    我注意到、当我进行调试时、我会得到这个  

    _c_int00_noargs()我认为我以前没有得到它。 有什么想法为什么会发生这种情况?

    -Deepak

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

    我不知道这一点、尽管它看起来像复位入口点。 您使用的是哪种编译器?

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

    其18.12.2.  

    -Deepak

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

    c_int00_noargs()只是最终调用 main()的启动函数。 看起来您在文件 poeclock.c 中的函数 main()中的第210行上遇到了断点 此时是否设置了断点?