cwl417
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:7596回复:31

nandflash分两个fat32分区???

楼主#
更多 发布于:2007-07-13 15:27
大家好,我现在是用的K9F1G08U0A 128Mflash,目前是分了四个区,如下
 NAND chip partitioning

    ---------------------    NAND flash end
          FAT File System
    ----------------------    <variable based on OS image>
        OS (BINFS)
    ----------------------
          EBOOT (Binary)    256 kB (round up to whole number of blocks)
    ----------------------
            Unused    14 kB (May change according to block size)
    ----------------------
     Nand Loader (Binary)    2 kB
    ----------------------

我用的是ce5.0,现在的情况是我能将FAT File System分成一个FAT32的分区,显示的是盘符的形式,可以自动挂载,正常使用,但是我想把FAT File System分成两个FAT32的分区,就始终只能挂载第一个分区,第二个就挂不上,我是在eboot中分的,烧录os的时候eboot打出来的信息也是分区成功,大家有没有谁知道还要在别的地方设置什么吗?
附上我的分区代码和注册表设置
//~~~~~Creat the first FAT32 partition to use 20M flash to save applications add by cy~~~~~~~~~~~~
OALMSG(OAL_INFO, (TEXT("INFO: PREPARE TO CREATE THE 2M SPACE.\r\n")));
hPart = BP_OpenPartition(NEXT_FREE_LOC, NAND_IMAGE_NUM_SECTOR(0x01400000, g_FlashInfo.wDataBytesPerSector),//0x1400000 = 20M
                        PART_DOS32, TRUE, PART_OPEN_ALWAYS);
if(hPart == INVALID_HANDLE_VALUE)
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: failed to create/open FIRST FAT32 extended partition.\r\n")));
       // return FALSE;
    }
  else
      OALMSG(OAL_INFO, (TEXT("INFO: SUCCESSFULLY CREATE 2M SPACE .\r\n")));  
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
    // Create an extended partition to use rest of flash to mount a filesystem.
    OALMSG(OAL_INFO, (TEXT("INFO: PREPARE TO CREATE THE 2nd(80M) SPACE.\r\n")));
    hPart = BP_OpenPartition(NEXT_FREE_LOC, USE_REMAINING_SPACE,
                        PART_DOS32, TRUE, PART_OPEN_ALWAYS);
    //hPart = BP_OpenPartition(NEXT_FREE_LOC, USE_REMAINING_SPACE,
                      // PART_EXTENDED, TRUE, PART_OPEN_ALWAYS);

; HIVE BOOT SECTION
IF BSP_NAND_FMD
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NAND_Flash]
    "Dll"="nandfmd.dll"
    "Order"=dword:0
    "Prefix"="DSK"
    "Ioctl"=dword:4
    "Profile"="FlashDisk"
    "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
    "FriendlyName"="NAND FLASH Driver"

; Override names in default profile
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk]
    "DriverPath"="Drivers\\BuiltIn\\NAND_Flash"
    "DefaultFileSystem"="FATFS"
    "PartitionDriver"="mspart.dll"
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1            
    "Name"="NAND FLASH"
    "Folder"="NAND Flash"
    "Ioctl"=dword:4
    "MountFlags"=dword:4
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk\FATFS]
   "Flags"=dword:00000014        
   "FormatTfat"=dword:1     ; Format partitions to be TFAT
   "MountAsBootable"=dword:1

lzd2006
驱动牛犊
驱动牛犊
  • 注册日期2006-06-16
  • 最后登录2009-04-20
  • 粉丝0
  • 关注0
  • 积分105分
  • 威望49点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-20 09:20
to all,
我在移植大页的NAND FLASH遇到一个很怪的问题。
我在存储管理器,可以看到正常的FLASH大小信息,但看不到分区信息。格式化后,可以看到分区信息,也能看到盘符,可以复制文件到这个盘符。但重启后,盘符看不到,里面的文件也看不到了。
当初以为原来看到的盘符和复制到里面的文件都是在内存里面,因为我的内存才64M,再格式化后,我复制了大于64M的文件放到该盘符下,也可以,那说明我复制的文件应该是在NAND FLASH中的。而且里面文件也应该是对的,因为我用来播放该盘符中的视频文件,也可以正常播放。

请大家讨论一下,相互进步。

也可以发邮件,交流一下。
liuzhd21@21cn.com
ttjlc
驱动牛犊
驱动牛犊
  • 注册日期2003-07-16
  • 最后登录2008-08-12
  • 粉丝0
  • 关注0
  • 积分182分
  • 威望21点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-18 11:18
呵呵~
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-23 20:31
根据大家的建议,我把注册表修改成saint_bxg给的之后。第一次回低格,以后就不会再低格了,
但是现在我的驱动现在是从debug信息来看是挂上文件系统了,
    因为在Debug信息里面已经出现了,Mount complete (E, index 4, flags 0x00000000)
    但是在打开WinCE的mydevice的时候,会出现好像down掉了似的。
    我debug了一下,他会去读nand的第124个sector,不知道为啥会读这个sector,
    而且这时候 DMA中断产生不了。导致他会DOWN掉。
下面是debug信息,大家帮忙看看,谢谢各位兄弟了,
Loading module smflash.dll at address 0x02830000-0x02844000 (RW data at 0x01EC0000-0x01EC0BA0)
Loaded symbols for 'C:\WINCE500\PBWORKSPACES\WINBOND_NS\RELDIR\WINBOND_ARMV4I_DEBUG\SMFLASH.DLL'
4294769956 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FMD_init has been Enter!
4294769960 PID:4dfc330e TID:2dfa2996 0x8dfc6400: FMD: NF_TransferIstThread has been Setuped!
4294769969 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FMD: ReadID (Mfg=0XEC, Dev=0X75)
4294769971 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FLASHDRV.DLL:BuildupMappingInfo() - Enter.
4294769982 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: Block 0 is Bad!
4294770103 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical sector 0x0!!!
4294838914 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: >>> Loading module mspart.dll at address 0x03C50000-0x03C5E000 (RW data at 0x01FD7000-0x01FD74AC)
Loaded symbols for 'C:\WINCE500\PBWORKSPACES\WINBOND_NS\RELDIR\WINBOND_ARMV4I_DEBUG\MSPART.DLL'
4294838916 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: Loading partition driver mspart.dll hModule=8DF99288
4294838917 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: Driver mspart.dll loaded
4294838986 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: Opened the store hStore=000B2A50
4294839009 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: NumSec=65344 BytesPerSec=512 FreeSec=0 BiggestCreatable=0
4294839009 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: Partition Part00  NumSectors=65342
4294839010 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: MSPART!PD_OpenPartition: dwStoreId=000B2A50, PartName=Part00
4294839031 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: >>> Loading module fatfsd.dll at address 0x03E40000-0x03E73000 (RW data at 0x01FF0000-0x01FF065C)
Loaded symbols for 'C:\WINCE500\PBWORKSPACES\WINBOND_NS\RELDIR\WINBOND_ARMV4I_DEBUG\FATFSD.DLL'
4294839038 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FSD_MountDisk: mounting volumes for hDsk=000B4130
4294839064 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: access time updates disabled
4294839064 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: event logging enabled
4294839065 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: automatic scanning disabled
4294839065 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: write verify disabled
4294839066 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: extra FAT on format disabled
4294839066 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: force write through enabled
4294839068 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: Codepage = 1
4294839071 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!OpenVolume: Number of path cache entries = 50
4294839103 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: >>> Loading module diskcache.dll at address 0x03E30000-0x03E39000 (RW data at 0x01FEE000-0x01FEE4F4)
Loaded symbols for 'C:\WINCE500\PBWORKSPACES\WINBOND_NS\RELDIR\WINBOND_ARMV4I_DEBUG\DISKCACHE.DLL'
4294839106 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: CreateCache: Successful.  Cache Size: 32 KB, Start: 1, End: 64.
4294839107 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: CreateCache: Successful.  Cache Size: 64 KB, Start: 65, End: 65341.
4294840544 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!InitVolume: FAT version: 16
4294840544 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!InitVolume: Cluster Size (Sectors): 4
4294840544 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FATFS!InitVolume: TFAT enabled: FALSE
4294840548 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FS: Registering file system E, index 4, flags 0x00000000
4294840549 PID:4dfc330e TID:4dfc32ea 0x8dfc30a8: FS: Mount complete (E, index 4, flags 0x00000000)

在这之后如果我去打开winCE的mydevice:
他会去读第124个sector.不知道为啥?而且这时候中断产生不了,
谢谢各位大虾了。。
做一个出色的程序员!
ddnewbie
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-20 12:26
每次load driver后都有
0x8dfc88c8: Loading partition driver mspart.dll hModule=8DF9CE58
0x8dfc88c8: Driver mspart.dll loaded
0x8dfc88c8: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical sector 0x0!!!
0x8dfc88c8: FLASHDRV.DLL:ReadFromMedia() - Unable to determine physical sector address for logical sector 0x00000000
0x8dfc88c8: Opened the store hStore=000B26D0
0x8dfc88c8: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical sector 0x0!!!
0x8dfc88c8: FLASHDRV.DLL:ReadFromMedia() - Unable to determine physical sector address for logical sector 0x00000000
0x8dfc88c8: NumSec=65344 BytesPerSec=2048 FreeSec=0 BiggestCreatable=0

然后开始erase block, 而且每个block erase 2次,问题1 ,这正确否?
erase完后,可以看到nand的盘符

但是会出现如下
0x8db45670: FLASHDRV.DLL:FMD_ReadSector() failed!
0x8db45670: FLASHDRV.DLL:ReadFromMedia() failed.
0x8db45670: Read/Write Sector failed (30) on Sector 17
0x8db45670: FATFS!FindNext: unexpected error (30)
0x8db45670: FATFS!FAT_FindFirstFileW(0x00000000,\*.*) returned 0xffffffff "" (30)
0x8db45670: SWP:FrameChanged sent to window 0x7C014340 which is not visible

问题2:

请多多指教
[img]D:gs.jpg[/img]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-07-20 08:49
这个我估计是你的erase函数有问题,你可以跟一下,是不是每次都返回false?
ddnewbie
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-07-19 15:49
楼上的意思是否 我所描述的现象正常?
但是创建一个文件夹,会把所有block erase一遍
这个应该不正常吧?
[img]D:gs.jpg[/img]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-07-19 15:02
只有第一次才会这样,是低级格式话,以后启动不会了。
ddnewbie
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-19 14:46
by the way ,it is 2k nand
而且如果new folder,会去把所有block erase一遍
然后报错无法create folder

是否erase block后需要write cis
请各位大虾帮帮忙看看
[img]D:gs.jpg[/img]
ddnewbie
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-07-19 14:43
to all
现在nand能挂上,但是挂上之前花了很长时间在fmd_erase,fmd_readsector 和fmd_writesector
尤其是erase一个block后,会对block的每个sector进行read and writer,并且会对每个block erase2次
请问这种情况如何分析
[img]D:gs.jpg[/img]
cwl417
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-07-18 11:14
我知道你的意思,一般情况下是在eboot中做的,nand.c中会有,然后你按照上面他们给你改的注册表应该就能自动挂上出现盘符,5.0是盘符,4.2是文件夹。
或者你按照我给的分区代码和注册表设置分一个fat32分区是完全没有问题的, 你试一下吧!
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-07-17 20:21
谢谢,
BP_OpenPartition不是在Bootloader里面做?
我现在是想纯粹把nand flash当作一个文件系统来做,
只要出现盘符就行,
如果仅仅这样的话,该怎么做??
谢谢
做一个出色的程序员!
cwl417
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-07-17 19:01
to zhuxiaofeng :
你挂载不上可以试试是不是分区格式不对造成的,在BP_OpenPartition中,分区一定要分成fat32的形式,我以前试过分成fat的格式,就挂不上,郁闷了好长一段时间!
你试一下,说不定是这个问题!
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-07-17 18:28
我手动格式化的时候,就会出现所有的block是bad的情况。
而先前已经扫描了过了,都是好的,为什么再次扫描会出现是bad的哪??
不明白??
还往大家指点一下,谢谢。。
做一个出色的程序员!
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-07-17 17:52
我加上了,不过没反应,不知道怎么回事?
谢谢。。。
还是挂不上文件系统。
做一个出色的程序员!
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-07-17 17:11
    "BmlVolumeId"=dword:0
    "BmlPartitionId"=dword:8
这两个字段是什么意思呢?
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-07-17 12:14
我这里就这么设置的话他两个都给你挂上了,后一个名字自动编号2
也试过分开加载,但没有成功。有什么方法可以交流一下。
努力! 成功就在不远处....
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-07-17 10:44
saint_bxg : 如果挂两个FAT区注册表应该怎么设置呢?
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-07-17 09:05
to zhuxiaofeng:
添加几个子键试试:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NandFlash]
    "Dll"="nandfcd.dll"    ;你的NAND驱动所生成的DLL
    "Order"=dword:1           ;have changed. from 0 to 1
    "Prefix"="DSK"         ;前缀
    "Profile"="FlashDisk"
    "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
    "FriendlyName"="随便取个名字,将在存储管理器中看到"
     "BmlVolumeId"=dword:0
     "BmlPartitionId"=dword:8
     "Index"=dword:2
 
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk]
    "Name"="SAMSUNG NAND "
    "Folder"="C"    ;NAND盘符名称
    "DefaultFileSystem"="FATFS"
    "AutoMount"=dword:1    ;自动挂载
          "AutoPart"=dword:1
       "AutoFormat"=dword:1
     "PartitionDriver"="mspart.dll"
      "Ioctl"=dword:4
      "BootPhase"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk\FATFS]
    ; Override common setting to enable automatic formatting of unformatted volumes
    "Flags"=dword:00000024          
    "Dll"="fatfsd.dll"
    "Paging"=dword:1
    "EnableCacheWarm"=dword:0
    "CacheSize"=dword:0
   ; "MountAsBootable"=dword:1     ;;have changed. add
    ; "MountAsRoot"=dword:1
努力! 成功就在不远处....
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-07-16 20:12
这是偶得注册表部分的设置。
不知道有什么不妥的地方吗??
我只要挂上文件系统就行。。谢谢大家。。
; HIVE BOOT SECTION
; @CESYSGEN IF CE_MODULES_SDNPCID
IF BSP_SMFLASH_WB910
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MSFlash]
        "Profile"="MSFlash"
        "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
        "Order"=dword:0
        "FriendlyName"="MSFLASH Driver"
        "Dll"="smflash.dll"
        "Prefix"="DSK"
[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash]
    "DriverPath"="Drivers\\BuiltIn\\MSFlash"
    ; LoadFlags 0x01 == load synchronously
    "LoadFlags"=dword:2
    "Order"=dword:0
    "BootPhase"=dword:2
ENDIF BSP_SMFLASH_WB910
; @CESYSGEN ENDIF CE_MODULES_SDNPCID
; END HIVE BOOT SECTION
做一个出色的程序员!
上一页
游客

返回顶部