TI中文支持网
TI专业的中文技术问题搜集分享网站

28335的FLASH_PROGAM 编程问题,为何用仿真器可以实现,断电重启后不行?

用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啊

赞(0)
未经允许不得转载:TI中文支持网 » 28335的FLASH_PROGAM 编程问题,为何用仿真器可以实现,断电重启后不行?
分享到: 更多 (0)