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.
您好、Vamsi 和 Vivek
我尝试修改 F28377D 的闪存编程示例 CPU1、以使用安全的闪存和 RAM 运行。
我从控制套件 V170示例(\f2837xd\v170\F2837xD_Examples_Dual\flash_programming\cpu01)开始。 我添加了
DcsmCommonRegs.FLSEM.ALL = 0xA501;
在 InitFlash()的开头,按照(https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/660432?tisearch=e2e-sitesearch&keymatch=Flash%20API%20F021%20CSM 和 https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/642405?tisearch=e2e-sitesearch&keymatch=Flash%20API%20F021%20CSM)中的建议抓取闪存信标。
此外、我在示例末尾取消了闪存擦除部分的注释、以便能够检查闪存操作是否成功。 该示例在闪存扇区 B (0x82000)和 C (0x84000)的开头写入测试数据。
我的安全设置如下:
0x3555555上的 Z1-GRABSECT (整个闪存组0)
0x30005555上的 Z1-GRABRAM (LS0-LS5、D0-D1)
0xxxxxxxx 上的 Z1-CSMPSWD0-3
在保护(并让示例代码至少运行一次)之后、我对器件进行了非保护并检查了测试数据的闪存扇区。 如果器件被保护、闪存在0xFFFF 上。 如果器件未受保护、则测试数据(0x0001、0x0002 ...) 保持在闪存中。
我是否忘记更改其他内容、以便此示例以安全模式运行?
您能否提供一个在安全模式下工作的示例?
此致、Benjamin
您好 Benjamin、
您能更详细地解释一下您看到的内容吗? 您如何知道它们的示例不是从安全存储器运行的?
您需要确保您尝试编程的数据位于同一个区域或不安全的存储器中、并且闪存 API 位于您尝试擦除和编程的同一个区域中。 如果是这样、则代码应该能够擦除和编程安全闪存。
此致、
SAL
你(们)好
我看到闪存仍然在0xFFFF 上、而不是在测试数据上(0x0001、0x0002……) 再次取消保护器件之后。 为此、我在示例代码的末尾取消了闪存擦除部分的注释。
我的测试程序详细说明:
如果我跳过第3步和第7步(器件无保护和取消保护)、则测试数据会保留在闪存中、否则不会。
正如我了解示例项目的链接器文件一样、闪存 API 在安全 RAM (LS0-LS3)中运行、因此安全闪存的闪存应该可以正常工作。
我是否忘记了其他东西?
感谢您的支持、Benjamin
你(们)好
我在该示例中未更改有关映射的任何内容。 到目前为止、我已经了解了所有内容都在安全 RAM 中运行的代码。
示例代码尝试编程的数据位于闪存扇区 B (0x82000)和 C (0x84000)的开头、这两个扇区通过 Z1-GRABSECT 设置进行保护。
此致、Benjamin
您好 Sal、
不、您没有正确理解我!:)
我修改了该示例、以便数据保留在扇区 B 和 C 中。如果器件未受保护、则该示例有效。
我应该向您发送示例代码吗?
BR Benjamin
你(们)好、Vivek
是的、我抓取闪存信标。 请参阅我的第一篇帖子。
此致、Benjamin
你好,Sal 和 Vivek
我在代码示例中添加了一个调试引脚切换。 为了使示例运行多次、我在示例末尾再次激活了扇区 B 和 C 的擦除。 调试引脚向我显示代码正在运行、直到在安全和非安全模式下结束。 请参阅随附的图(请注意、安全和非安全模式的时间分辨率不同!)。
在安全模式下、擦除步骤比在不安全模式下的步骤要快。 我认为这是因为整个闪存组的数据在安全模式下仍在0xFFFF 上。
您有什么想法、为什么它不同?
此致、Benjamin
Benjamin、
如前所述、您能否确认 Fapi_UserDefinedFuncations.c 文件中的函数已分配给.TI.ramfunc 段(以在运行时复制到 RAM)? RAM 应该与针对擦除/编程的闪存扇区处于同一个区域。
谢谢、此致、
Vamsi
闪存 API wiki: http://processors.wiki.ti.com/index.php/C2000_Flash_FAQ#Flash_API_wiki
您好、Vamsi 和 Vivek
很抱歉、Vamsi、我没有注意到您的评论。 我再次对其进行了测试、进行了以下更改:
-复制 API 用户函数以保护 RAM 安全
-读回 SEM 字段以检查它是否在0x1上
结果是 SEM 字段仍然为0。
但是、尽管参考了不需要的文档(spruhm8g)、但我禁用了写保护(EALLOW)并解决了问题!
非常感谢您的支持、请在文档中更正此问题、并将获取的闪存信标添加到闪存示例的未来版本中!
此致、Benjamin