static int ProgramBlk(U32 addr, U32 src, U32 len)//ProgramBlk(U32 0x20000, U32 dat[0x80] , 0x20000)
{
int ret;
U32 i;
addr += ROM_BASE;
for(i = 0; i < len; i +=32)
{
int j;
do
{
out_w(0x00e8, addr);//buffer program
ret = in_w(ROM_BASE);//ReadStatus();
}
while((ret&0x0080)!=0x0080);
out_w(0x000f, addr);
for(j=0; j<16; j++)
out_w(*(U16 *)(src+i+j*2), addr+i+j*2);
out_w(0x00d0, addr);
do
{
ret = ReadStatus();
} while((ret&0x0080)!=0x0080);
ClrStatus();
if(ret&0x001e)
{
printf("Program addr 0x%x Fail, status=%x\n", addr, ret);
return -1;
}
}
ReadArray();
for(i = 0; i < len; i += 2)
if(in_w(addr + i) != *(U16 *)(src + i))
{
printf("Program addr 0x%x Fail, wr=0x%x, rd=0x%x\n", addr+i, *(U16 *)(src+i), in_w(addr+i));
return -1;
}
ret = 0;//LockBlk(addr);
return ret;
}
这个是FL2440的开发板上JS28F320 nor flash的代码;;
有几点疑问,烦请各位帮忙解决一下;
1.第一个for循环里,i += 32;是怎么来的;
2.第二个for循环里,j 为什么循环16次;
3.out_w(0x000f, addr);这条语句是什么意思 |