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.
首先请看下面的 code-1:全局变量声明
#pragma DATA_SECTION(Buffer,"BufferDataSection"); uint16 Buffer[WORDS_IN_FLASH_BUFFER + 1]; uint32 *Buffer32 = (uint32 *)Buffer;
code-2:cmd中的段定义
BufferDataSection : > RAMD1, PAGE = 1, ALIGN(8)
code-3:烧写模块的代码
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; } oFlashStatus = Fapi_getFsmStatus(); if(oFlashStatus != 0) { ErrFlag = 1; #if 1 debugarr[5]++; //debugarr[6] = oFlashStatus; ESTOP0; #endif break; } oReturnCheck = Fapi_doVerify((uint32 *)(flsInfo.flashaddress+i-7),4, (Buffer32+i-7)+((i-7)/2),&oFlashStatusWord); if(oReturnCheck != Fapi_Status_Success) { debugarr[6] = oReturnCheck; debugarr[7] = 1; ESTOP0; break; } //SysCtl_serviceWatchdog_28075(); } // if-end SysCtl_serviceWatchdog_28075(); } // for EDIS;
遇到的问题:
执行了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 ()。