9303|20

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

s3c6410的nandflash分区问题,格式化binfs,exfat破坏了 [复制链接]

现在在ut的开发板上学习,想吧nandflash的分区方式改一下:
  256MB flash
        ------   bootloader
        ------   TOC
        ------   eboot
        ------   MBR
        ------   nk.bin,       //binfs
        ------   exfat        //从80M后全部是exfat

原来有个函数是BP_LowLevelFormat,格式化从mbr后面的区域,现在分为2个函数:
/*格式化binfs*/
BOOL BP_LowLevelFormatBINFS(DWORD dwStartBlock, DWORD dwNumBlocks,DWORD dwFlags)
{
    dwNumBlocks = min (dwNumBlocks, g_FlashInfo.dwNumBlocks);

    RETAILMSG(1,(TEXT("Enter LowLevelFormat [0x%x, 0x%x].\r\n"), dwStartBlock, dwStartBlock + dwNumBlocks - 1));

    // Erase all the flash blocks.
   
   
    if (IsValidMBR())
    {
             RETAILMSG (1, (TEXT("is mbr.\r\n\r\n")));
            //如有MBR的话,只格式化binfs
            if (!EraseBlocks(dwStartBlock+1, dwNumBlocks -1, dwFlags))
        return(FALSE);
    }
    else
     {
             //不存在MBR,格式化mbr和binfs
              if (!EraseBlocks(dwStartBlock, dwNumBlocks, dwFlags))
        return(FALSE);
                    // Determine first good starting block
                    while (IS_BLOCK_UNUSABLE (dwStartBlock) && dwStartBlock < g_FlashInfo.dwNumBlocks) {
                        dwStartBlock++;
                    }
               
                    if (dwStartBlock >= g_FlashInfo.dwNumBlocks)
                    {
                        RETAILMSG(1,(TEXT("BP_LowLevelFormat: no good blocks\r\n")));        
                        return FALSE;
                    }
                    g_dwMBRSectorNum = dwStartBlock * g_FlashInfo.wSectorsPerBlock;
                        // Create an MBR.
                    CreateMBR();
    }
    RETAILMSG (1, (TEXT("Done.\r\n\r\n")));
    return(TRUE);
}

/*格式化fat*/
BOOL BP_LowLevelFormatFAT(DWORD dwFATStartBlock, DWORD dwFlags)
{
          DWORD dwNumBlocks = 0;
   
    if(g_FlashInfo.dwNumBlocks < dwFATStartBlock)
                  return(FALSE);

    dwNumBlocks = g_FlashInfo.dwNumBlocks - dwFATStartBlock;

    RETAILMSG(1,(TEXT("Enter FAT Format [0x%x, 0x%x].\r\n"), dwFATStartBlock,g_FlashInfo.dwNumBlocks));

    // Erase all the flash blocks.
    if (!EraseBlocks(dwFATStartBlock, dwNumBlocks, dwFlags))
        return(FALSE);

    // Determine first good starting block
    while (IS_BLOCK_UNUSABLE (dwFATStartBlock) && dwFATStartBlock < g_FlashInfo.dwNumBlocks) {
        dwFATStartBlock++;
    }

    if (dwFATStartBlock >= g_FlashInfo.dwNumBlocks)
    {
        RETAILMSG(1,(TEXT("FAT Format: no good blocks\r\n")));        
        return FALSE;
    }
    RETAILMSG (1, (TEXT("Done.\r\n\r\n")));
    return(TRUE);
}


吧bootloader中的格式化改了下,
// Images start after OEM Reserved Blocks
#define IMAGE_START_BLOCK           RESERVED_BOOT_BLOCKS
#define IMAGE_START_SECTOR          BLOCK_TO_SECTOR(IMAGE_START_BLOCK)

//这个参数是定义预览 block 的数量,默认是NBOOT + TOC + EBOOT,屏蔽前面80M空间
//nk.bin不要超过64Mb
#define FAT_START_BLOCK           SECTOR_TO_BLOCK(FILE_TO_SECTOR_SIZE(0x5000000))
#define FAT_START_SECTOR          BLOCK_TO_SECTOR(FAT_START_BLOCK)

// 格式化FAT区域
  if ( !BP_LowLevelFormatFAT(FAT_START_BLOCK,FORMAT_SKIP_BLOCK_CHECK) )
   {
     OALMSG(OAL_ERROR, (TEXT("ERROR: BootMonitor: Low-level boot media format failed.\r\n")));
    continue;
     }
//格式化Binfs区域
if ( !BP_LowLevelFormatBINFS(IMAGE_START_BLOCK,FAT_START_BLOCK - IMAGE_START_BLOCK ,FORMAT_SKIP_BLOCK_CHECK) )
{
   OALMSG(OAL_ERROR, (TEXT("ERROR: BootMonitor: Low-level boot media format failed.\r\n")));
  continue;
}

现在发现格式化binfs后,启动后
[FMD] FMD_GetInfo() : NUMBLOCKS = 2048(0x800), SECTORSPERBLOCK = 64(0x40), BYTESPERSECTOR = 2048(0x800)
[FMD:ERR] FMD_OEMIoControl() : Unknown IOCTL (0x00071c24)
MECC Uncorrectable error(0x38d)
MECC Uncorrectable error(0x38d)


大家看看这个是哪个地方出现问题了?为什么单单格式化binfs区域,fat怎么会被破坏了
谢谢!

最新回复

呵呵,还没解决呢,otg也出问题了,传eboot有问题,估计是硬件问题,我们补得板子的线好像有点细,不稳定,不知道什么原因,  详情 回复 发表于 2010-5-31 14:12
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下,
搞了好几天了,不知道哪里的问题
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
顶,也有遇到这个问题。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

4
 
有点晕了,mbr是不是占一个block,
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
MBR占一个Sector。
没太看明白你到底对Binfs做了什么。改了大小还是什么
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
目的是:更新nk.bin大小后,nk.bin有可能变大,变小,不破坏fat分区和里面的收据
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
你的Nk是不是太大了啊,超过了MBR里面规定的Binfs分区的大小?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
原先是eboot中自动分区,nk.bin有多大,binfs就多大,剩下的就是fat分区,
比如上一次nk.bin为25M,现在可能是28M,这样的话,会破坏fat分区?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
像Fat这种分区前面都有DBR,FAT表之类的东西,exfat也差不多,如果你的nk太大把这些个东西都干掉了,分区自然就没有了。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
楼上说的对啊,
所以想吧fat向后挪一下,这样不影响fat分区,
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
那应该在MBR把FAT分区的起始Sector重新定位一下。FAT的起始Sector数向后移。
Binfs的大小也应该留够。
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

12
 
现在已经留够了,前面80M空间就是留给nk.bin,mbr和其他的啊,不知道为什么重新格式化binfs区域就有问题了,
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

13
 
自己顶一下,被这个问题搞死了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

14
 
在更新NK后MBR会改变吗?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

15
 
怎么吧mbr打印出来?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

16
 
怎么打印?
MBR在Binfs前面,但是具体是第几个Sector你自己的系统你应该知道。读出来打印。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

17
 
不懂,帮顶
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

18
 
学习了
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

19
 
顶。。。。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

20
 
再顶一下,调好OTG后,就要处理分区问题了。搂住记得分享阿!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表