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:检查时 EEPROM 仿真块程序返回故障

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/605769/tms570ls0714-eeprom-emulation-block-program-return-failure-on-check

器件型号:TMS570LS0714
主题中讨论的其他器件:HALCOGEN

我正在尝试使用组7中的 EEPROM 仿真模式。 我 修改了程序块 API 以与组7配合使用。 还向 FLASH_Sectors 阵列添加了其他闪存扇区、以便固件可以将其拉取。  

我尝试擦除地址0xF0201000、并成功执行此操作。  

但是、当我尝试写入时、写入在检查条件下失败。  


REG_PTR =(volatile uint32_t*) 0xFF87288;
*REG_PTR = 0x00000005;
*REG_PTR = 0x00040002;
*REG_PTR = 0x00000002;
status = fapi_BlockProgram (file_Bank_location、write_address、(uint32_t)&file、sizeof (struct file_download_properties));
退货状态;

块程序函数看起来是这样的

寄存器 uint32_t src = Data_Start_Address;
寄存器 uint32_t dst = Flash_Start_Address;
寄存器 uint32_t bytes_lese_size_in_bytes;
uint8_t i、ucBank;
uint32_t status;
uint32_t 字节;
uint32_t Freq_in_MHz;

FREQ_IN_MHz = SYS_CLK_FREQ;

如果(size_in_bytes < 16)
bytes = size_in_bytes;
其他
字节= 16;

对于(i = 0;i < NUMBEROFSECTORS-1;i++){
if (Flash_Start_Address <(uint32_t)(flash_sector[i+1].start))

ucBank = flash_sector[i].bankNumber;
中断;

if ((Flash_Start_Address == APP_START_ADDRESS)||(ucBank ==1)||(Flash_Start_Address == 0)||
(ucBank == 7)){
Fapi_initializeFlashBanks (Freq_in_MHz);//用于 API Rev2.01 *

Fapi_setActiveFlashBank ((Fapi_FlashBankType) ucBank);

if (Bank = 0){
STATUS= Fapi_enableMainBankSectors (0xFFFF);//用于 API 2.01*/

否则{
STATUS = Fapi_enableEpromBankSecors (0xFFFFFFFF、0xFFFFFFFF);

while (fapi_check_FSM_ready_busy!= fapi_Status_FsmReady);
while (fapi_get_FSM_status!= fapi_Status_Success);

while (bytes_ele> 0)

fapi_issueProgrammingCommand ((uint32_t *) dst、
(uint8_t *) src、
(uint32_t)字节、
0、
0、
Fapi_AutoEccGeneration);

while (fapi_check_FSM_ready_busy =fapi_Status_FsmBusy);
while (fapi_get_FSM_status!= fapi_Status_Success);

src += bytes;//size_in_bytes;
dst +=字节;//size_in_bytes;
bytes_elee_ele= bytes;//size_in_bytes;
if (bytes_elsage < 16){
bytes = bytes_eles;

#ifdef DEBUG_MSG_L3
UART_putString (UART、"\r 已编程闪存:");
UART_send32BitData (UART、size_in_bytes);
UART_putString (UART、"字节。 \r ");
#endif
fapi_flushPipeline();
状态= Flash_Program_Check (Flash_Start_Address、Data_Start_Address、Size_in_bytes);

返回(状态);

有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Saurabh、

    您能否提供有关您尝试执行的操作的更多详细信息? 闪存 API 是作为库而不是源代码提供的、因此除了传递给它的参数之外、您如何修改它? HalCoGen 中包含用于组7的费用驱动程序、为什么需要创建你自己的函数? 我强烈建议避免修改收费驱动程序(或与 FAPI 库有关的任何内容),因为在这条道路上有很多陷阱和风险。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chuck、

    我正在尝试使用 Fapi_BlockProgram 函数擦除和写入 EEPROM 扇区0和扇区1。 现在、当我传递地址0xF0200000时
    地址不在 FLASH_Sector 表中。 因此、我必须在其中包含这些地址。 我是否缺少内容或使用错误的 API 进行读取和写入? 块写入之前是擦除操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Saurabh、

    由于您尚未说明您使用的闪存 API 库、因此我无法判断它是否正确。 我们有多个闪存 API、包括 F05闪存 API、F035闪存 API 和 F021闪存 API。 后两种产品随 Halcogen 一起提供、用于 Halcogen 支持的产品中。 对于您提到的特定器件 TMS570LS0714、它将使用 F021闪存 API。 但是、对于闪存仿真 EEPROM 应用、最好使用 HalCoGen 中包含的 FEE 驱动器。 这些驱动程序旨在在 Hercules 器件的组7中实现仿真 EEPROM。 halcogen 安装目录(C:\ti\Hercules \HALCoGen\v04.06.01\Docs)中包含一份用户指南。 它具有管理向仿真 EEPROM 写入和擦除数据的必要驱动程序、并决定何时擦除和复制块等
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卡盘、

    对此深表歉意。 我使用的是 F021闪存 API、因此必须进行上述更改。 我将尝试 FEE 驱动器。 谢谢你。 将在这里发布结果