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.

[参考译文] TMS320F28P650DK:FLASH_API

Guru**** 2454880 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1518659/tms320f28p650dk-flash_api

器件型号:TMS320F28P650DK

工具/软件:

你好专家,我有几个问题要问你.?

1.我可以问为什么我一直没有通过验证?

2Fapi_issueProgrammingCommand----- 如果写入的数据为0xFF、此函数是否允许任何次数的写入?还是每次只能编程8个单元?如果我要写入一个地址、该怎么做?

代码如下

缓冲器[0]= 0x1122;
缓冲器[1]= 0x3344;
缓冲器[2]= 0x5566;
缓冲器[3]= 0x7788;
缓冲器[4]= 0x99AA;
Buffer[5]= 0xAABB;
缓冲器[6]= 0xBBCC;
缓冲器[7]= 0xDDEE;

EALLOW;
oReturnCheck = Fapi_initializeAPI (FlashTech_CPU0_BASE_ADDRESS、
DEVICE_SYSCLK_FREQ/1000000U);Flash初始化 μ s
if (oReturnCheck!= Fapi_Status_Success)

//
//检查闪存 API 文档是否存在可能的错误
//
Example_Error (oReturnCheck);
}
oReturnCheck = Fapi_setActiveFlashBank (Fapi_Flash 组0);//检测flash的扇区是否为初始化状态
if (oReturnCheck!= Fapi_Status_Success)

//
//检查闪存 API 文档是否存在可能的错误
//
Example_Error (oReturnCheck);
}
EDIS;
EALLOW;
ClearFsmStatus();
Fapi_setupBankSectorEnable (FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTA、0xFFFFFF00);
Fapi_setupBankSectorEnable (FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTB、0x00000003);
oReturnCheck = Fapi_issueAsyncCommandWithAddress (Fapi_Erase 扇区、(uint32_t *) Bzero_Sector 1_START);
//等待 FSM 完成擦除扇区操作
while (Fapi_checkFsmForReady ()!= Fapi_Status_Fsm){}

if (oReturnCheck!= Fapi_Status_Success)

//检查闪存 API 文档是否存在可能的错误
Example_Error (oReturnCheck);
}

//读取 FMSTAT 寄存器内容以了解之后 FSM 的状态
// ERASE 命令查看是否存在任何与擦除操作相关的错误
oFlashStatus = Fapi_getFsmStatus();
IF(oFlashStatus !=3)

//检查闪存 API 文档以获取 FMSTAT 并相应地进行调试
// Fapi_getFsmStatus ()函数给出 FMSTAT 寄存器的内容。
//检查是否有任何 EV 位、ESUSP 位、CSTAT 位或
//设置 VOLTSTAT 位(更多详细信息、请参阅 API 文档)。

}
//验证扇区0是否已擦除
//
oReturnCheck = Fapi_doBlankCheck ((Bzero_Sector *) uint32_t 1_start、
扇区2kb_u32length、
&oFlashStatusWord);
if (oReturnCheck!= Fapi_Status_Success)

//
//检查闪存 API 文档以获取错误信息
//
Example_Error (oReturnCheck);//FlashAPI. Example_Call
}
EDIS;
EALLOW;
ClearFsmStatus();
Fapi_setupBankSectorEnable (FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTA、0xFFFFFF00);
Fapi_setupBankSectorEnable (FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTB、0x00000003);
oReturnCheck = Fapi_issueProgrammingCommand ((uint32_t *) Bzero_Sector 1_start、缓冲器、8、0、0、Fapi_Auto EccGeneration);// flash烧写(在给定的地址烧写内同)μ s
while (Fapi_checkFsmForReady ()!= Fapi_Status_Fsm);
{}
if (oReturnCheck!= Fapi_Status_Success)

Example_Error (oReturnCheck);
}
oFlashStatus = Fapi_getFsmStatus();
oReturnCheck = Fapi_doVerify (((uint32_t *) Flash1_start)、8、(uint32_t *)缓冲器 Bzero_Sector);
if (oReturnCheck!= Fapi_Status_Success)

Example_Error (oReturnCheck);
}
}
EDIS;

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

    您好、

    Unknown 说:
    2Fapi_issueProgrammingCommand ----- 如果写入的数据为0xFF、此函数是否允许任何次数的写入?还是每次只能对8个单元进行编程?如果我要写入一个地址、应如何操作?

    当您使用 Fapi_issueProgrammingCommand ()和 AutoEccGeneration 模式对  闪存进行编程时、对于闪存数据的每8个字节、将写入 ECC 的1个字节。 因此、除非您擦除数据、否则将无法写入闪存位置。 否则、它将生成 ECC 错误。 您可以一次写入4个16位字( 闪存数据的8个字节、ECC 的1个字节)。

    此致、

    Rajeshwary

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

    非常感谢您的答复。 如果我要写入9个16位数据、我想分三步写入、每次写入4个16位数据、我应该如何写入第三步?

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

    您好、

     在这种情况下、您可以使用 Fapi_doVerifyBy16bits()。

    此致、

    Rajeshwary