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:组7擦除问题

Guru**** 2224720 points
Other Parts Discussed in Thread: TMS570LS0714
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1407452/tms570ls0714-bank-7-erase-problem

器件型号:TMS570LS0714

工具与软件:

您好!

我在使用 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 调用的切换到管理模式、一切都运行良好。