优龙BIOS的一个新有关问题(很关键)
发布时间:2010-06-13 22:29:06 文章来源:www.iduyao.cn 采编人员:星星草
优龙BIOS的一个新问题(很关键)
又弄出新问题了,寻求高人指导(优龙2440开发板换flash后bootloader出现问题flash换成k9k8g08优龙得是k9s1208)
static int CheckBadBlk(U32 addr)
{
U8 dat;
addr &= ~0x3f;
NFChipEn();
WrNFCmd(READCMD1); //READCMD1=0X30
WrNFAddr(addr);
WrNFAddr(addr>>8);
if(NandAddr) //这里NandAddr是=1
WrNFAddr(addr>>16);
WaitNFBusy();
dat = RdNFDat(); //----不明白这里只读了一次究竟是读的什么数据(我得理解应该是校验位),手册上也找不到 (错误就发生在这里)
//优龙得板子RdNFDat()返回得全部是ff而我得板子返回值是不定得
WrNFCmd(READCMD0); //READCMD0=0
NFChipDs();
return (dat!=0xff);
}
//我认为上面这个函数没有问题要不然在2440init.s就通不过
我用优龙原来的开发板测试了,addr上读出来的数据和我的板子上读出来的一样,(从PC机用USB下载NK.bin到板子内存成功
,从板子内存把NK.bin写入flash成功)
CheckBadBlk()执行完后就开始从flash拷贝wince到内存,在CheckBadBlk时候出错就造成了不能把flash中的wince
读取到内存中执行,如果屏蔽坏块检测,就可以读取,但是运行wince后板子就不能启动了,bios也得重新烧写。
而且运行wince得时候wince下面一样报坏块(不是硬件坏了:不可能出现那么多坏块几千个)
怎么也找不到问题得具体原因,望大侠赐教!
WritePage()函数中写校验部分如下
(我自己推测是写校验得时候出错了,但是这个不太懂,没办法手册上没有这个说明)
tmp[0] = mecc&0xff;
tmp[1] = (mecc>>8)&0xff;
tmp[2] = (mecc>>16)&0xff;
tmp[3] = (mecc>>24)&0xff;
tmp[5] = 0xff; //mark good block
if(fs_yaffs==1){
for(i=2048;i<2112;i++)
{
WrNFDat(buf[i]);
}
}
else{
SEccUnlock();
WrNFDat(tmp[0]);
WrNFDat(tmp[1]);
WrNFDat(tmp[2]);
WrNFDat(tmp[3]);
SEccLock();
WrNFDat(tmp[4]);
WrNFDat(tmp[5]);
}
还有点不明白得就是我能从内存把nk.bin写到flash说明在写得时候flash是没有北标记成坏块得
而且写了过后读出来数据也是正确得。为什么再次检测得时候就报是坏块呢?强行读取就会导致bios挂掉更是奇怪
就是在仿真下强制读取也会挂bios(我想有可能是wince运行时候向flash得boot区写了东西)。
------解决方案--------------------
这个大页的flash校验自然和小页的不同了。
这个原理,应该和下面的这个函数原理是一致的。
DWORD FMD_GetBlockStatus(BLOCK_ID blockID): 该函数获得nandflash中某一个block的状态。参数为nandflash的block地址。由于nandflash中可能有坏块,所以针对nandflash,这个函数首先会检查当前块是否是坏块,这个一般通过读取当前block的第0个page和第1个page的带外数据。对于小page nandflash一般是读取第5个byte,对于大page nandflash一般读取第0个byte,如果不为0xff表示该块是坏块。当然,至于具体该读哪个byte,最好还是看一下所用nandflash的datasheet,确认一下,不同的厂家可能有所不同。如果发现该块是坏块,应该返回BLOCK_STATUS_BAD。如果不是坏块,需要读取这个块的起始扇区的扇区信息。如果读该扇区信息出错,应该返回BLOCK_STATUS_UNKNOWN,否则,判断独到的信息,返回相应结果。
------解决方案--------------------
nboot中,对nand的操作都写在汇编s中,可能是为了加快速度。
K9K8G08是2K Large Block的,而原来的K9S1208是512的small block的。
原来读一个block,就是读一个sector,而现在读了一个block,需要分4个sector来处理。
对于在2440上用2K block的,推荐两个链接,是已经验证成功的。
【原创】2K大页面NAND FLASH的WINCE5.0/4.2下的驱动源码
【原创】支持2K大页面NAND FLASH驱动的NBOOT改进源码
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
管道的另一端上无任何进程
我写了一个程序,运行正常。
后来,用上了sqlite数据库,然后编译部署都正常,但在WINCE 6模拟器上不能自动运...
-
Power键点亮屏幕的问题
我在程序里面成队使用了:
PowerPolicyNotify(PPN_UNATTENDEDMODE,TRUE);
PowerPolicyNotify(PPN_UNATTEND...
-
求助一个问题:windowsmobile ipl读分区的问题
ipl通过 BP_ReadData读 ramimage 分区信息 读取的时候发现必须要偏移0xc800才能读正...
-
vs2005+DevEmul_SDK.msi后仍旧没有“armv4”选项
OS:win7
IDE:先前有装vs2010做winForm,后装了vs2005(完全安装)
装完后安装了DevEmu...
-
Win7 64位操作系统如何安装arm9开发板的usb下载驱动啊
按照教程操作,超级终端打开也连上了,但是系统貌似对SECBULK.sys SECBULK.inf...
-
嵌入式开发工具
谁用过 LAZARUS 开发过嵌入式系统 ?
------解决方案--------------------
Lazarus 做 PC 上的程序,做嵌入式可能...
-
请推荐几个wince游戏软件下载的地方
最近开始玩wince,请推荐几个好的地方,可以下载游戏,软件的.多谢拉!
------解决方案--------...
-
FAT32 与单片机
根目录下文件与目录项数从那里得
还有根目录的下一簇从哪得
不是说根目录也是一个文件吗 它的目录项在哪里
---...
-
谁可以推荐一个WinCE下的视频播放器,最好可以播放AVI、RMVB、MP3等格式,谢谢。
如题,
麻烦大家推荐一个WinCE5.0下的视频播放器,
-...
-
WinCE6的BinFS问题,100分求解
1、BinFS能不能做在IDE硬盘上?
2、要支持BinFS,bootloader要做甚?
3、BinFS能不能作为一个普通文件放到...