在线时间24 小时
UID3148180
注册时间2015-7-20
NXP金币0
该用户从未签到
注册会员

- 积分
- 154
- 最后登录
- 2016-1-27
|
KL25在FTFA编程擦除扇区时遇到No source available for "0xFFFFFFFE (0xFFFFFFFE)() "
main函数:
flash_init();
if( flash_erase_sector( 125 )){ //!!!!!!!!!!!!!!!!!!出错!!!!!!!!!!!!!!!!!!!
Sends("flash_erase_sector err.");
}else{
Sends("flash_erase_sector OK.");
}
if( flash_write( 125, 0, 10, buf) ){
Sends("flash_write err.");
}else{
Sends("flash_write OK.");
}
memset( buf, 0, 10);
if( flash_read( 125, 0, 10, buf ))
{
Sends("flash_read err.");
}else{
Sends("flash_read OK.");
}
Sends(buf);
while(1){}
在执行到: flash_erase_sector( )函数中的
//==========================================================================
//函数名称:flash_erase_sector
//函数返回:函数执行执行状态:0=正常;非0=异常。
//参数说明:sectorNo:扇区号(KL25实际使用0~127)
//功能概要:擦除指定flash扇区
//==========================================================================
uint8_t flash_erase_sector(uint16_t sectorNo)
{
union
{
uint32_t word;
uint8_t byte[4];
} dest;
dest.word = (uint32_t)(sectorNo*(1<<10));
// 设置擦除命令
FTFA_FCCOB0 = ERSSCR; // 擦除扇区命令
// 设置目标地址
FTFA_FCCOB1 = dest.byte[2];
FTFA_FCCOB2 = dest.byte[1];
FTFA_FCCOB3 = dest.byte[0];
// 执行命令序列
if(1 == flash_cmd_launch()) //!!!!!!!!!!!!!!!!!!执行到此函数出错!!!!!!!!!!!!!!!!!
return 1; //擦除命令错误
// 若擦除sector0时,则解锁设备
if(dest.word <= 0x800)
{
// 写入4字节
FTFA_FCCOB0 = PGM4;
// 设置目标地址
FTFA_FCCOB1 = 0x00;
FTFA_FCCOB2 = 0x04;
FTFA_FCCOB3 = 0x0C;
// 数据
FTFA_FCCOB4 = 0xFF;
FTFA_FCCOB5 = 0xFF;
FTFA_FCCOB6 = 0xFF;
FTFA_FCCOB7 = 0xFE;
// 执行命令序列
if(1 == flash_cmd_launch()) //若执行命令出现错误
return 2; //解锁命令错误
}
return 0; //成功返回
}
//==========================================================================
//函数名称:flash_cmd_launch
//函数返回:0-成功 1-失败
//参数说明:无
//功能概要:启动Flash命令
//==========================================================================
static uint32_t flash_cmd_launch(void)
{
uint8_t i;
// 清除访问错误标志位和非法访问标志位
FTFA_FSTAT = ACCERR | FPVIOL;
// 启动命令
FTFA_FSTAT = CCIF;
// 等待命令结束
while(!(FTFA_FSTAT & CCIF)); //!!!!!!!!!!!!!!!!!!此处单步调试正常,全速运行就出现上边的错误,!!!!!!!!
// 检查错误标志
if(FTFA_FSTAT & (ACCERR | FPVIOL | MGSTAT0))
return 1 ; //执行命令出错
return 0; //执行命令成功
}
移植别人的程序,别人的程序没有问题移植过来就出问题了。帮忙找下原因,谢谢啦
|
|