阅读:2313回复:13
WINCE5.0挂载NANDFLASH的问题
我的NAND是512M的,在bootloader里我用bootpart把NAND分成两个分区,前30M是BINFS分区,剩下的分成一个FAT分区,现在wince一起来,就直接开始格式化NAND,格式化后,shell起来了,查看NAND属性,发现把整片nand都格式化了,关机后无法启动。
有人碰到过这样的问题吗?请教一下为什么把前面的BINFS分区也格式化了呢?难道系统不认识MBR?(MBR放在第0个block的第0页)。 先谢谢各位朋友了:) |
|
沙发#
发布于:2007-04-02 21:23
是不是你加了AUTOPART,而系统认为分区不正确,所以给重新分区了?
|
|
|
板凳#
发布于:2007-04-03 08:59
谢谢斑竹,确实有autopart = DWORD:1这一项,那么系统认为怎样的分区才是正确的呢?我读出来MBR的最后部分是这样的:0x03,0x01,0x01,0x00,0x21,0xf0,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,
0x01,0xf1, 0x01,0x00,0x0b,0xf5,0x00,0x00,0x40,0x3c,0x00,0x00,0x40,0xc1,0x30,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x55,0xaa 这里可以看出分区正确吗? |
|
地板#
发布于:2007-04-03 10:04
还有可能是没有把bootloader部分标记成坏块
加了autopart的话,他还是会先判断块的状态,如果是坏块的话,则不擦除 你可以参照bootpart.cpp里面CreateMBR函数的代码来判断MBR是否正确 也可以这样,去掉autopart,去掉autoformat,如果系统还是能启动的话,MBR就是对的 |
|
|
地下室#
发布于:2007-04-03 10:11
谢谢,
我的bootloader部分不在nand上,所以不存在标记bootloader坏块的问题。nand的第0个block就是MBR。我跟了一下,发现系统确实检查每一块的状态,每块都返回BLOCK_STATUS_READONLY | BLOCK_STATUS_RESERVED,返回这个状态对吗? 不过我先试试去掉autopart和autoformat吧。:) |
|
5楼#
发布于:2007-04-03 11:28
我试了,autopart是不能去掉的,去掉直接无法启动了。
|
|
6楼#
发布于:2007-04-03 11:53
BLOCK_STATUS_READONLY | BLOCK_STATUS_RESERVED 什么时候返回的?
写MBR之前?之后? 整个nand都返回这个状态? |
|
|
7楼#
发布于:2007-04-03 12:20
就是加载nand驱动后系统不断调用驱动里的fmd_getstatus();每次返回的都是BLOCK_STATUS_READONLY | BLOCK_STATUS_RESERVED 这个状态,我没有每一块都跟,应该后面的fat分区不会返回这个状态,后面的分区没有写过数据。
|
|
8楼#
发布于:2007-04-03 14:09
返回这种状态的话,应该就不能再对其进行写操作了,也不会擦除
|
|
|
9楼#
发布于:2007-04-03 16:12
可实际上我再启动,去读MBR所在的页时,发现所有值都被写成0了。:(
|
|
10楼#
发布于:2007-04-03 16:24
我也不知道了,你还是仔细检查代码,看看什么时候把MBR给erase了
我现在在2G的flash上,系统一启动就挂 OEMInit Done... Sp=ffffc7cc Data Abort: Thread=8ffed5d0 Proc=8d726938 'filesys.exe' AKY=00000003 PC=00011ee0 RA=00012078 BVA=e5a5fbdc FSR=00000005 大哥你认为可能问题出在哪呢? 读取的内核数据不对? |
|
|
11楼#
发布于:2007-04-03 17:04
这个我以前经常碰到,这是你访问了不该访问的地址了。
|
|
12楼#
发布于:2007-12-18 11:12
楼上的这个问题,怎么解决的呀?
我现在也遇到这种问题。。 真是郁闷。。。。 |
|
|
13楼#
发布于:2007-12-18 12:43
在nandflash 驱动中,DWORD FMD_GetBlockStatus(BLOCK_ID blockID)函数用来获取nandflash 信息。如果你觉得你不应该格式化前面的flash,那么在这个函数作一些处理?
例如: if(blockID <2048) return BLOCK_STATUS_BAD; 前32M返回BLOCK_STATUS_BAD标记 |
|