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.
工具与软件:
您好!
我在使用 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;
事实上、处于用户模式会阻止代码修改存储器。
您好!
我验证并测试了您的代码、但我看不到任何问题。
我将您的代码添加到我的现有项目之一、我将在 0xF0207010中写入一些数据、这里是执行代码前的数据:
执行代码后、写入的数据将被成功擦除、如下所示。
我认为即使您将用作辅助工程、此代码也应该起作用。 我想知道以下几点:
1.要将辅助项目存储在闪存中的哪个位置? 是否可以在使用主工程和辅助工程时共享两者的链接器 cmd 文件?
2.为什么不验证线路数据和读取数据,而不是只擦除?
3.我希望您已经知道、即使在擦除闪存后、闪存中的某些位也将为0而不是1、我在下面的主题中解释了这样做的原因:
(+) TMS570LC4357:Uniflash 工具无法正确擦除闪存。 -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
但是、这不会影响写入闪存和读取。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish:
感谢所有详细信息和代码验证。 代码正确、出现这个问题是因为擦除代码没有在特权模式下运行。 一旦我在 SVC 调用的切换到管理模式、一切都运行良好。