Armboot在EV40评估板上的移植
具体实现6个命令序列:
typedef volatile unsigned short flash_word;
#define CFG_FLASH_BASE 0x100000
flash_word *flash_address=CFG_FLASH_BASE,*s_address;
s_address=擦除扇区的起始地址;
*(flash_address+0x555)=0xAA;/*命令1*/
*(flash_address+0x2AA)=0x55;/*命令2*/
*(flash_address+0x555)=0x80;/*命令3*/
*(flash_address+0x555)=0xAA;/*命令4*/
*(flash_address+0x2AA)=0x55;/*命令5*/
*s_address=0x30; /*命令6*/
//扇区的擦除需要时间,擦除成功的标志是*s_address==0xFFFF
while((*s_address!=0xFFFF)&&(i++<1000000));
//*若超过
if(i>=1000000){
return ERR_TIMOUT;
}
4.2 Flash写入
写入以字(2字节)为单位,地址要字对齐。具体实现为4个命令序列:
s_sddress=写入处的起始地址(偶地址);
*(flash_address+0x555)=0xAA; /*命令1*/
*(flash_address+0x2AA)=0x55; /*命令2*/
*(flash_address+0x555)=0xA0; /*命令3*/
*s_address=data; /*命令4;data为欲写入数据,要求是flash_word类型*/
//扇区的写入需要时间,写入成功的标志是*s_address==data
while((*s_address!=data)&&(i++<100000));
//*若超时
if(i>=100000){
return ERR_TIMOUT;
}
结语
到此为止,移植可以告一段落了,如果有已经修改好的uClinux内核文件,可以试试使用Armboot(源码见网站http://fanwen.oyaya.net收集整理),让它来下载并引导内核。还有一点须提醒读者注意,Armboot官方网站使用arm-linux-gcc编译。如果在写Flash时遇到问题(高字节和低字节内容相同),试试arm-elf-gcc suite。
《Armboot在EV40评估板上的移植(第5页)》