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.

TMS320F28075: Fapi_issueProgrammingCommand没能将数据烧写到flash中

Part Number: TMS320F28075
Other Parts Discussed in Thread: C2000WARE

首先请看下面的 code-1:全局变量声明

Fullscreen
1
2
3
#pragma DATA_SECTION(Buffer,"BufferDataSection");
uint16 Buffer[WORDS_IN_FLASH_BUFFER + 1];
uint32 *Buffer32 = (uint32 *)Buffer;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

code-2:cmd中的段定义

Fullscreen
1
BufferDataSection : > RAMD1, PAGE = 1, ALIGN(8)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

code-3:烧写模块的代码

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
EALLOW;
for(i=0,j=0;i<BLOCK_WORD;i++)
{
Buffer[i] = (flsInfo.flashData[(i*2)+1]<<8)+(flsInfo.flashData[i*2]);//deal 1024bit DATA,pack 512bit into Buffer
j++;
if(j >= 8)
{
j = 0;
oReturnCheck = Fapi_issueProgrammingCommand((unsigned long *)(flsInfo.flashaddress+i-7),
(unsigned int *)(Buffer+i-7),8, 0, 0, Fapi_AutoEccGeneration);
while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);
if(oReturnCheck != Fapi_Status_Success)
{
// Check Flash API documentation for possible errors
#if 1
ESTOP0;
#endif
break;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

遇到的问题:

执行了Fapi_issueProgrammingCommand之后,api没有返回错误,但是在校验的时候提示错误。

错误的位置是0x84000,期望的烧写数据跟实际读到的数据不一致。

实际flash中的数据:

buffer中的数据:

不知道为什么写不进flash中。

  • 您好,您的问题我们已升级到英文论坛寻求帮助,如有答复将尽快回复您。

  • 您好,可以先从以下两点开始着手debug:

    1) 尝试仅使用预期数据对有问题的位置进行编程,并查看其是否正确编程。

    2) 在您提供的存储器图片中,看起来所有位置都被擦除-尤其是红色部分,这些位置在您拍摄快照之前已被擦除?

    也许您的代码在程序后有一个擦除-您可以先检查下。

  • 原因大概是因为之前flash D区没有擦除成功,导致写flash的时候触发了一些未知错误,使得flash被意外擦除。

    目前问题变成了擦flash的F区过程中会走到Interrupt_illegalOperationHandler(),此时F区数据已经被擦除,但是走进了异常中断。。。。

    我们项目的工程是库函数版本,暂时无法直接移植位域的官方例程,请问我们有库函数版本的flash例程嘛

  • 好的我们跟进给工程师看下。

  • ,导致写flash的时候触发了一些未知错误,使得flash被意外擦除。

    您说"未知错误",是指闪存 API 返回了未知错误吗? 该问题请问您具体是如何解决的?是电源电压问题吗? 还是说编程/擦除期间发生了一些闪存访问?

    目前问题变成了擦flash的F区过程中会走到Interrupt_illegalOperationHandler(),此时F区数据已经被擦除,但是走进了异常中断。。。。

    由于您提到发生了非法中断,您能否确认是从闪存还是从 RAM 执行闪存 API? 应该要按照闪存 API 指南中所述从 RAM 执行(也在闪存 API 使用示例中显示)。 请注意,任何调用闪存 API 库函数的函数也必须从该器件上的 RAM 中执行。

    请问我们有库函数版本的flash例程嘛

    请问您说的库函数版本具体是指什么?

  • 在C2000Ware_4_03_00_00文件夹下,存在driverlib跟device_support两个示例文件夹,关于flash的相关例程只存在device_support文件夹下,这个文件夹里面初始化硬件是用bit_field的形式,我想问问有没有直接采用driverlib的形式去初始化硬件的flash例程。

  • 您好,

    可以看下C2000Ware_5_00_00_00\driverlib\f2807x\driverlib\flash.c 中提供的 Flash_initModule ()。