- 积分
- 30
贡献63
飞刀0 FD
注册时间2013-9-12
在线时间8 小时
扫一扫,手机访问本帖
|
Nor Flash 的型号是JS28F320 ,4M的;FL2440的开发板,这是boot里面的源码;
#include "norflash.h"
//#define out_l(v, a) (*(volatile U32 *)(a) = (v))
//#define in_l(a) (*(volatile U32 *)(a))
#define out_w(v, a) (*(volatile U16 *)(a) = (v))
#define in_w(a) (*(volatile U16 *)(a))
#define ROM_BASE 0x00000000
static U32 FlashSize;
static int ProgramBlk(U32 addr, U32 src, U32 len)
{
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); //waite for complete
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;
}
上面的第一个for循环里,i 为什么是 i += 32;
第二个for循环里;为什么是 j < 16 ;这个16是从哪得出来的;
还有这句是什么意思啊 out_w(0x000f, addr); 有知道的帮忙解释一下!!!!感激不尽
|
|