用DSP28335的API函数库,对FLASH进行擦除和编程,在用仿真器连接板子时,程序可以顺利执行,没有问题(擦除的位置不在程序运行的区域,在CMD文件中已经做出修改)。FLASH_PROGRAM()执行后,返回SUCCESS。
但是在拔掉仿真器,断电重启后,经过多次试验,发现程序在FLASH_PROGRAM()执行后,返回的不是SUCCESS。即没有编程成功。
请问这是为什么?请各位大神指教!
Status = Flash_Erase((SECTORB|SECTORE|SECTORH), &FlashStatus);
if (Status != STATUS_SUCCESS) {
Example_Error(Status);
}
Flash_ptr = (Uint16 *) Sector[0].StartAddr;
Length = 0x1B;
Status = Flash_Program(Flash_ptr, BufAddrA, Length, &FlashStatus);
if (Status != STATUS_SUCCESS) {
Example_Error(Status);}
Brian Wang0:
注意两点:
1)要在Ram里调用Flash API
2)注意在对flash进行操作前必须要关闭中断。
用DSP28335的API函数库,对FLASH进行擦除和编程,在用仿真器连接板子时,程序可以顺利执行,没有问题(擦除的位置不在程序运行的区域,在CMD文件中已经做出修改)。FLASH_PROGRAM()执行后,返回SUCCESS。
但是在拔掉仿真器,断电重启后,经过多次试验,发现程序在FLASH_PROGRAM()执行后,返回的不是SUCCESS。即没有编程成功。
请问这是为什么?请各位大神指教!
Status = Flash_Erase((SECTORB|SECTORE|SECTORH), &FlashStatus);
if (Status != STATUS_SUCCESS) {
Example_Error(Status);
}
Flash_ptr = (Uint16 *) Sector[0].StartAddr;
Length = 0x1B;
Status = Flash_Program(Flash_ptr, BufAddrA, Length, &FlashStatus);
if (Status != STATUS_SUCCESS) {
Example_Error(Status);}
xiang sun:
经过多次试验,发现FLASH_PROGRAM()在上电重启后,返回的值是STATUS_FAIL_ADDR_INVALID,即编写的地址错误,我要编写的地址设置的是FLASHB区,0x330000,长度为0x1B,程序的内容存在FLASHA和D区中,为什么会返回地址无效呢?
用DSP28335的API函数库,对FLASH进行擦除和编程,在用仿真器连接板子时,程序可以顺利执行,没有问题(擦除的位置不在程序运行的区域,在CMD文件中已经做出修改)。FLASH_PROGRAM()执行后,返回SUCCESS。
但是在拔掉仿真器,断电重启后,经过多次试验,发现程序在FLASH_PROGRAM()执行后,返回的不是SUCCESS。即没有编程成功。
请问这是为什么?请各位大神指教!
Status = Flash_Erase((SECTORB|SECTORE|SECTORH), &FlashStatus);
if (Status != STATUS_SUCCESS) {
Example_Error(Status);
}
Flash_ptr = (Uint16 *) Sector[0].StartAddr;
Length = 0x1B;
Status = Flash_Program(Flash_ptr, BufAddrA, Length, &FlashStatus);
if (Status != STATUS_SUCCESS) {
Example_Error(Status);}
Brian Wang0:
回复 xiang sun:
你这段代码里flash_Program()写入的的地址显然指向的不是FlashB啊