您好!
我在 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


