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.

[参考译文] TMS320F28388D:重写引导加载程序后重新引导器件时、会发生闪存不可纠正的错误

Guru**** 2539810 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1412015/tms320f28388d-flash-uncorrectable-error-occurs-when-rebooting-device-after-rewriting-the-bootloader

器件型号:TMS320F28388D
主题中讨论的其他器件:UNIFLASH

工具与软件:

大家好!

一个应用程序重写了 从闪存引导的器件的引导加载程序。

如果我 将 应用程序和引导加载程序加载到器件、一切都会正常运行。 但是、当我 使用应用程序重写引导加载程序时、器件不会重新启动、但会收到闪存不可纠正的错误。 我已经在重写引导加载程序之前和之后尝试了读取引导加载程序的闪存、该存储器是相同的。

如果我尝试使用 UniFlash 读取存储器、器件会突然启动、一切都正常、直到我再次尝试重新启动它、此时它又无法启动。

谢谢。此致

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

    嗨、blackmamba、

    器件的闪存 API 无法在应用程序正在运行的同一闪存组中进行编程。 对于您的应用程序、当它尝试重写引导加载程序时(假设您的意思是您存储在闪存中的闪存内核/次级引导加载程序)、在更新期间、闪存 API 必须 从 RAM 运行。

    您能否提供一些您看到的错误的屏幕截图?

    谢谢。此致、

    Charles

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

    您好!

    我们的应用程序存储在闪存扇区 S1至 S7中、引导加载程序存储在扇区 S0中。 因此、我们将尝试从不同的闪存扇区中重写扇区 S0。 闪存 API 存储在 RAM 中。

    在读取存储器时、我们会看到 存储器已成功重新写入、但程序 并未开始运行。

    通过调试器、我们可以看到处理器到达位置0x3FB114、这是 NMI 寄存器的屏幕截图。

    谢谢、此致

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

    您好!

    >所以我们试图重写不同闪存扇区 S0。 闪存 API 存储在 RAM 中

    在该场景中、闪存 API 是否从 RAM 运行?

    谢谢!

    Charles

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

    您好!

    是的、闪存 API 从 RAM 运行。

    所有闪存操作均已成功运行、 我们可以看到存储器已加载引导加载程序。 但是、引导加载程序无法开始运行。

    谢谢

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

    写入引导加载程序时、下载到存储器后是否可以进行器件复位? 当器件复位回应用程序时、它是否识别当前更新的引导加载程序地址与之前的自定义引导加载程序之间的修订版本差异? 它如何确定是否分支到引导加载程序?

    谢谢!

    Charles

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

    在下载到存储器之后、我们尝试对器件进行重置、但不会 将器件重置回应用。 它在引导期间卡在位置 0x3FB114上。

    引导加载程序下载到闪存地址0x80000、器件根据该地址设置为引导 、因此 在复位后应自行分支到引导加载程序。 这在 我们使用 Uniflash 加载引导加载程序时可以正常工作、但在尝试 通过应用程序进行下载时无法正常工作。

    我们通过使用 UniFlash 加载并取消选中"Auto ECC Generation"选项、成功地复制了错误。 如果没有此选项、器件也无法引导、但在重新启动期间在同一存储器位置(0x3FB114)卡住。

    谢谢你

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

    嗨、blackmamba、

    我还需要几天时间才能回复您、感谢您的耐心。

    谢谢。此致、

    Charles

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

    此问题是否有任何进展?

    谢谢。此致。

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

    您好!

    您能展示尝试重新启动时反汇编的内容吗?

    谢谢!

    Charles

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

    您好!

    下面是 CCS 中的一个简短片段、在这里、代码在重新加载引导加载程序并执行 CPU 复位后卡住。

    谢谢。此致。

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

    您好!

    通过应用程序对引导加载程序进行编程时、您是否使用了 Fapi_Auto EccGeneration 模式?  

    此致、

    Skyler

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

    您好!

    在我的应用程序中,我使用了 Fapi_issueProgrammingCommand 函数 (从 RAM 执行)和选项 Fapi_Data (该函数中的第6个参数)。 此外、在我的应用程序中、我使用函数 Flash_disableECC (FLASH0ECC_BASE)禁用 ECC;

    此致。

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

    您好!

    您是否可以使用 Fapi_Auto EccGeneration 模式进行编程? ECC 在上电时自动启用、因此复位后、除非您为闪存映像对 ECC 进行编程、否则您将会遇到 ECC 错误。

    此致、

    Skyler

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

    您好、Skyler:

    目前、我无法使用  Fapi_Auto EccGeneration 模式。 我会尽力解释为什么,也许你能帮我。

    我们的 PC 程序将.srec 文件发送到我们的应用程序、然后将引导加载程序加载 到闪存(sectro S0)中。 该 PC 程序将逐行 srec 文件发送到我们的应用程序、然后将该行加载到闪存中。

    下面我将介绍生成 CCS 的 srec 文件部分:

    每行有15个数据字。 要使用 Fapi_Auto 生成 模式、我需要更改 srec 文件、以便每行有4、8或16个字的数据。 这是(我认为 TI 论坛是不可能实现的)在 CCS 中无法实现的。 所以我尝试使用 srec_cat 工具、但没有成功。

    如果你能帮助我,我会很高兴吗?

    此致

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

    您好!

    正确、没有办法更改 srec 文件中的行长度。 建议您在 PC 主机程序中添加一些逻辑、使其可以从 srec 文件中读取所需数量的数据、并一次发送4、8或16个字的数据。

    此致、

    Skyler