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.

[参考译文] TMS320F28379D:从安全区内擦除和编程安全闪存扇区时出现问题

Guru**** 2589300 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1163023/tms320f28379d-problem-with-erasing-and-programming-secured-flash-sector-from-within-the-secured-zone

器件型号:TMS320F28379D

您好!

我在 FLASHA 和 B 中有自己的引导加载程序。我正在尝试擦除应用程序、然后在连续的闪存扇区中对其进行编程。

我通过以下方式设置安全区1:

1) Z1-GRABSECT = 0x0555 5555 (区域 Z1中的所有闪存扇区)

2) Z1-GRABRAM = 0x1000 5015 (区域中的 CLA、ramd0、ramd1、ramls0-2)

闪存编程函数位于 ramd0-1中、通过链接器设置:

.TI.ramfunc:{-l F021_API_F2837xD_FPU32.lib}
LOAD = FLASHAB、PAGE = 0
运行= RAMD0_1、页= 0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
表(BINIT)

当没有安全设置时、应用程序被正确编程、这意味着相应的闪存扇区(即闪存 C)被正确擦除和编程、然后开始下一个操作。

启用安全区域后、擦除扇区的操作会在函数内部挂起:
    Fapi_issue19 CommandWithAddress (Fapi_EraseSector、(uint32 *) address);  //     (地址为0x84000)

它被调用、但永远不会返回。

我阅读 了"在启用安全功能的 TMS320F2837xx 或 TMS320F2807x 器件上更新固件"、并在提供密钥和解锁时遵循第二个选项:

"由于从一个区域内运行的代码可以重新编程该区域中的任何闪存、因此无需将该区域的密码写入密钥寄存器、并且该区域将在另一个区域和不安全空间的视图中保持锁定状态"

此致、
Piotr Romaniuk

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

    我发现包含擦除命令和就绪检查的代码的通用部分必须位于 RAM 中。

    那么、现在它就像这样:

    #pragma CODE_SECTION (".TI.ramfunc")
    Fapi_StatusType EraseSector (uint32地址)

    Fapi_StatusType retv;

    EALLOW;
    retv = Fapi_issue当 CommandWithAddress (Fapi_EraseSector、(UINT32 *) address);

    while (fapi_checkFsmForReady()!= fapi_Status_FsmReady);
    EDIS;
    返回 retv;

    第一个函数返回 ok、while 循环也完成。 之后,我通过 Fapi_getFsmStatus()检查状态;

    它返回0x0000.0C10、这意味着:

    ev =1擦除验证失败、

    Cstat = 1"   命令状态。 FSM 启动后、任何故障都会将该位置1。 置位时、该位通知
    主机:编程或擦除命令失败且命令已停止。 该位被清零
    清除状态命令。 对于某些错误、这将是 FSM 错误的唯一指示
    因为原因不属于其他错误位类型。"

    进一步的测试表明该扇区不会被擦除。

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

    您好、Piotr、

    您是否 为正在执行闪存 API 的区域正确配置了 FLSEM 寄存器?

    请搜索 TRM 以了解有关此功能的更多详细信息。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    是的、这是 FLSEM、但我尚未发布信息。 我在专门用于安全编程的文档中忽略了这种类型的信标。 这是因为我把闪存泵信标和 FLSEM 混淆了-我认为它是一样的。 它不是、有两种类型的信标:

    1) 1)控制对闪存泵的访问、并在 F28379D 的两个内核(即 CPU1和 CPU2)之间进行仲裁、

    2)另一个(即 FLSEM)控制代码可以擦除和编程闪存的区域。

    也许最好在闪存 API 文档中添加一条注释、在安全区的情况下、FLSEM 必须被正确设置。

    此致、
    Piotr Romaniuk

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

    您好、Piotr、

    请参阅以下闪存 API 指南中的注释:

    我们将再次审查、看看是否需要进一步澄清。   

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    您选择的文档是什么以及您选择的页面是什么? Acrobat 在 Flash API 参考指南(v1.55)中找不到 FLSEM 字。

    此致、
    Piotr Romaniuk

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

    您好、Piotr、

    通过查看此线程(F28379D)的标题、我复制了 F28379D 闪存 API 指南中的快照。

    我们在 F2837xS 闪存 API 指南中没有提到 FLSEM、因为我们注意到 TRM 包含有关 FLSEM 的令人困惑的文档-我们将在下一个修订版中添加它。  感谢您的通知。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    很抱歉,这是我的错误。 我在文档中查找了~S (1.55)而不是~D 芯片(1.54)。 不过 、我意外发现了这个缺失的笔记  

    感谢你的帮助、

    Piotr Romaniuk

    电源
    我需要 更加注意文件的标题。