jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
阅读:2313回复:13

WINCE5.0挂载NANDFLASH的问题

楼主#
更多 发布于:2007-04-02 15:49
  我的NAND是512M的,在bootloader里我用bootpart把NAND分成两个分区,前30M是BINFS分区,剩下的分成一个FAT分区,现在wince一起来,就直接开始格式化NAND,格式化后,shell起来了,查看NAND属性,发现把整片nand都格式化了,关机后无法启动。

  有人碰到过这样的问题吗?请教一下为什么把前面的BINFS分区也格式化了呢?难道系统不认识MBR?(MBR放在第0个block的第0页)。

先谢谢各位朋友了:)
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-02 21:23
是不是你加了AUTOPART,而系统认为分区不正确,所以给重新分区了?
学海无涯
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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
这里可以看出分区正确吗?
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-03 10:04
还有可能是没有把bootloader部分标记成坏块
加了autopart的话,他还是会先判断块的状态,如果是坏块的话,则不擦除

你可以参照bootpart.cpp里面CreateMBR函数的代码来判断MBR是否正确

也可以这样,去掉autopart,去掉autoformat,如果系统还是能启动的话,MBR就是对的
[url]http://sniper167.bokee.com[/url]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-03 10:11
谢谢,
     我的bootloader部分不在nand上,所以不存在标记bootloader坏块的问题。nand的第0个block就是MBR。我跟了一下,发现系统确实检查每一块的状态,每块都返回BLOCK_STATUS_READONLY | BLOCK_STATUS_RESERVED,返回这个状态对吗?

    不过我先试试去掉autopart和autoformat吧。:)
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-03 11:28
我试了,autopart是不能去掉的,去掉直接无法启动了。
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-03 11:53
BLOCK_STATUS_READONLY | BLOCK_STATUS_RESERVED  什么时候返回的?
写MBR之前?之后?  整个nand都返回这个状态?
[url]http://sniper167.bokee.com[/url]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-04-03 12:20
就是加载nand驱动后系统不断调用驱动里的fmd_getstatus();每次返回的都是BLOCK_STATUS_READONLY | BLOCK_STATUS_RESERVED 这个状态,我没有每一块都跟,应该后面的fat分区不会返回这个状态,后面的分区没有写过数据。
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-04-03 14:09
返回这种状态的话,应该就不能再对其进行写操作了,也不会擦除
[url]http://sniper167.bokee.com[/url]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-04-03 16:12
可实际上我再启动,去读MBR所在的页时,发现所有值都被写成0了。:(
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分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

大哥你认为可能问题出在哪呢? 读取的内核数据不对?
[url]http://sniper167.bokee.com[/url]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-04-03 17:04
这个我以前经常碰到,这是你访问了不该访问的地址了。
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-12-18 11:12
楼上的这个问题,怎么解决的呀?

我现在也遇到这种问题。。

真是郁闷。。。。
做一个出色的程序员!
gerryzhou
驱动小牛
驱动小牛
  • 注册日期2006-05-14
  • 最后登录2009-04-18
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望133点
  • 贡献值0点
  • 好评度132点
  • 原创分0分
  • 专家分0分
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标记
游客

返回顶部