欢迎来到天天文库
浏览记录
ID:22378534
大小:56.00 KB
页数:5页
时间:2018-10-28
《wince eboot中的oem flash函数》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、WinCEEboot中的OEMFlash函数 在EBOOT中提供了操作Flash的功能,可以将下载的函数。 这些OEM函数会在BLMON模块中被调用,也就是在blmon.c文件的Doage函数中被调用。在Doage函数中,一般image文件的header会被先下载并进行解析。然后调用OEMIsFlashAddr判断image所在的区域,如果是在Flash的地址空间内,那么接下来会下载image文件并调用Flash相关的OEM函数将Flash擦除并写入。下面简单介绍一下这些函数: 1.BOOLOEMIs
2、FlashAddr(D区域中,dage文件的地址,如果在Flash区域中返回TRUE,否则返回FALSE,给个微软的例子: #defineFLASH_START 0#defineFLASH_LENGTH 0x02000000BOOLOEMIsFlashAddr(DIsFlashAddr(dp;0x03) { return(FALSE); } //根据Flash的基地址和Flash的Block大小计算要擦除的起始block和最后一个 //block以及多少个Block gnStartB
3、lock=(dage下载后被调用来擦除Flash中的block,给个微软的例子:voidOEMContinueEraseFlash(void){ UCHARnEraseCount=BLOCK_ERASE_STEP; //要擦除的块 //确认所有需要擦除的block都被擦除了 if(!gnBlocks
4、
5、(gnBlockCount==gnEndBlock)) return; //擦除block p;nEraseCount) { if(CFI_Erase_Block((unsigned3
6、2*)BLOCK_ADDR(gnBlockCount),0,NULL)!=PASS) { EdbgOutputDebugString(ERROR:OEMContinueEraseFlash-flasheraseerror(blocknumber%d).rn,gnBlockCount); return; } ++gnBlockCount; --nEraseCount; } return;}4.BOOLOEMFinishEraseFlash(void) 该函数用
7、于确认Flash中所有的block都被擦除完成,给个微软的例子:BOOLOEMFinishEraseFlash(void){ EdbgOutputDebugString(INFO:Finishingflasherase...rn); p;(gnBlockCount!=gnEndBlock)) { OEMContinueEraseFlash()12下一页——感谢阅读这篇文章,..,; } return(TRUE);}5.BOOLOEMIsFlashAddr(dageStart)
8、
9、!OEMIs
10、FlashAddr(dageStart+dageLength-1)) { return(FALSE); } //确认起始地址是Block字节对齐的 if(dageStart%FLASH_BLOCK_SIZE) { return(FALSE); } //计算要写入的block数量 nNumBlocks =(UCHAR)(dageLength/FLASH_BLOCK_SIZE); dageLength%FLASH_BLOCK_SIZE); dageStart; pbCache
11、 =OEMMapMemAddr(dageStart,dBlocks) { if(CFI_Write_Block((unsigned32*)dAddr(dageStart,dBlocks; } //将额外的数据写入Flash中 if(don.c中的Doage函数,可以帮助理解。上一页12——感谢阅读这篇文章,..,
此文档下载收益归作者所有