工具/软件:
您好、
我已将 TMS320F280025的所有闪存扇区与 DCSM 的区域1相关联(LSRAM 不安全、它们不是区域1的一部分)。
我实施了一个自定义引导加载程序、该引导加载程序从 Modbus 接收1024Word 块并通过闪存 API 写入闪存扇区内部。
如闪存 API 参考指南所述、为了对闪存进行正确编程、引导加载程序的代码必须驻留在 RAM 中。
在我的示例中、我也无法将 RAM 与 DCSM 的 Zone1关联(原因是我不会在此处指定)、因此为了擦除/编程闪存扇区(属于 Zone1的一部分)、我必须首先取消安全 Zone1。
为了使过程尽可能安全、我在使用闪存 API 进行擦除/编程之前取消安全 ZONE1指令、并在写入成功后立即重新保护它。
然后、当我将从 Modbus 接收接下来的1024个字时、我将取消安全 Zone1、并在它们在闪存中编程后保护它、依此类推、直到新固件字结束。
要取消安全 Zone1、我使用函数 dcsm_unlockZone1CSM (dcsm_CSMPasswordKey)并使用函数 dcsm_secureZone1 ()来保护它。
问题在于、一旦我调用 dcsm_secureZone1 ()函数、控制寄存器(Z1_CR)中的 ALLZERO 位就会发出、所有后续调用 dcsm_unlockZone1CSM (dcsm_csmPasswordKey)函数的调用都不会再次取消 ZONE1的安全(Z1_CR 的武装位和不安全位不会被设置、因为它们是首次调用 Zone1CSM_CSM_CM 函数且未被调用 Zone1CSM_CsmPasswordKey ()、原因是 Zone1)。
在调用 dcsm_unlockZone1CSM (dcsm_csmPasswordKey)函数之前、我也会调用 TRM 中指定的 Flash_disableCache ()函数。
目前、解决此问题的解决方案是在开始时(激活引导加载程序时)取消 ZONE1的安全、并使其保持不安全状态、直到 UC 自行复位(在接收所有带有新固件的1024Word 块并在闪存中编程后)。
这种解决方案不是很安全。
有关 DCSM 的另一个问题是、我想知道如何在没有 Code Composer 的情况下对 OTP 存储器进行编程。
要进行一些测试、现在我通过 JTAG 将 Code Composer 连接到 DSP、并通过菜单 Tools -> On-Chip Flash 菜单手动对 CSM 密码、链接指针和命令进行编程、但在生产中这样做是难以想象的。
有新 UC 时、如何在不使用 Code Composer 的情况下对 OTP 存储器进行编程? 我曾考虑使用 C2Prog 工具(我曾尝试过、但无法对新器件的 OTP 进行编程)。
可能只能使用 UniFlash 工具来实现? 此外、在具有较旧固件(未配备 DCSM)的 UC 中、如何从固件本身(自定义引导加载程序)对 CSM 密码、链接指针、命令在 OTP 存储器内进行编程? 我可以使用闪存 API 吗?
此致、
Davide。