工具与软件:
您好!
我在使用 TMS570LS0714上的 F021库对仿真 EEPROM 区域进行擦除和重新编程时遇到问题。 所有 API 调用都返回成功、但地址0xF0200000处没有被擦除。
当我将 这个代码包含在主函数中、并将其作为主工程闪存时、就可以顺利使用。 但是、我需要将此 功能作为现有 项目的一部分作为辅助项目 来实现、该项目是一个 小型软件模块 、可通过 CAN 下载(到闪存、而不是 RAM)并 由主软件执行。 在这种情况下、不会擦除任何内容。
我想 了解是否有东西可以保护组7或防止它被擦除(在参考手册 SPNU607A 和 F021参考指南 SPNU501H 中)、但找不到任何内容。 擦除前的 FBBUSY 值为0x7E、这意味着存储体7不忙。 我检查了闪存泵寄存器和备用功率寄存器 FBFALLBACK、所有泵都处于运行状态。
我还尝试在操作前禁用 IRQ 和 FIQ、但没有帮助。
下面是我的代码:
#include "sys_common.h"
#include "F021.h"
#define SYS_CLK_FREQ 160
int myFunction (void){
Fapi_initializeFlashBanks ((uint32_t) SYS_CLK_FREQ);
Fapi_setActiveFlashBank((Fapi_Flash 类型) 7);
while (FAPI_CHECK_FSM_READY_BUSY !=457); Fapi_Status_Fsm
Fapi_enableEepromBankSectors (0xFFFFFFFF、0xFFFFFFFF);
while (FAPI_CHECK_FSM_READY_BUSY !=457); Fapi_Status_Fsm
uint32_t i;
对于(i = 0;i < 16;i++){
Fapi_issueAsyncCommandWithAddress (Fapi_Erase 52ctor、(void*)(0xF0200000 + 0x1000 * I));
while (FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_Fsm y);
while (FAPI_GET_FSM_STATUS!= Fapi_Status_Success);
}
}
代码直接"正常"运行到最后、就像一切正常一样、但无效。
如果有任何帮助、将不胜感激。 谢谢。
——
编辑:
在诊断问题时 、我想对闪存寄存器进行一些手动尝试、但我意识到下面的行不做任何事情(应编辑 WR_ENA 寄存器)
uint32_t Preval =*(volatile uint32_t *) 0xFFF87288;
*(volatile uint32_t *) 0xFFF87288 =(Preval & 0xFFFFFF00)| 0x05;
*(volatile uint32_t *) 0xFFF87288 =(Preval & 0xFFFFFF00)| 0x02;
而且这些也不起作用:
FLASH_CONTROL_REGISTER->FsmWrEna.FSM_WR_ENA_BITS_WR_ENA = 0x5U;
FLASH_CONTROL_REGISTER->FsmWrEna.FSM_WR_ENA_BITS_WR_ENA = 0x2U;
事实上、处于用户模式会阻止代码修改存储器。