阅读:7596回复:31
nandflash分两个fat32分区???
大家好,我现在是用的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 |
|
沙发#
发布于:2007-08-20 09:20
to all,
我在移植大页的NAND FLASH遇到一个很怪的问题。 我在存储管理器,可以看到正常的FLASH大小信息,但看不到分区信息。格式化后,可以看到分区信息,也能看到盘符,可以复制文件到这个盘符。但重启后,盘符看不到,里面的文件也看不到了。 当初以为原来看到的盘符和复制到里面的文件都是在内存里面,因为我的内存才64M,再格式化后,我复制了大于64M的文件放到该盘符下,也可以,那说明我复制的文件应该是在NAND FLASH中的。而且里面文件也应该是对的,因为我用来播放该盘符中的视频文件,也可以正常播放。 请大家讨论一下,相互进步。 也可以发邮件,交流一下。 liuzhd21@21cn.com |
|
板凳#
发布于:2007-08-18 11:18
呵呵~
|
|
地板#
发布于: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.不知道为啥?而且这时候中断产生不了, 谢谢各位大虾了。。 |
|
|
地下室#
发布于: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: 请多多指教 |
|
|
5楼#
发布于:2007-07-20 08:49
这个我估计是你的erase函数有问题,你可以跟一下,是不是每次都返回false?
|
|
6楼#
发布于:2007-07-19 15:49
楼上的意思是否 我所描述的现象正常?
但是创建一个文件夹,会把所有block erase一遍 这个应该不正常吧? |
|
|
7楼#
发布于:2007-07-19 15:02
只有第一次才会这样,是低级格式话,以后启动不会了。
|
|
8楼#
发布于:2007-07-19 14:46
by the way ,it is 2k nand
而且如果new folder,会去把所有block erase一遍 然后报错无法create folder 是否erase block后需要write cis 请各位大虾帮帮忙看看 |
|
|
9楼#
发布于:2007-07-19 14:43
to all
现在nand能挂上,但是挂上之前花了很长时间在fmd_erase,fmd_readsector 和fmd_writesector 尤其是erase一个block后,会对block的每个sector进行read and writer,并且会对每个block erase2次 请问这种情况如何分析 |
|
|
10楼#
发布于:2007-07-18 11:14
我知道你的意思,一般情况下是在eboot中做的,nand.c中会有,然后你按照上面他们给你改的注册表应该就能自动挂上出现盘符,5.0是盘符,4.2是文件夹。
或者你按照我给的分区代码和注册表设置分一个fat32分区是完全没有问题的, 你试一下吧! |
|
11楼#
发布于:2007-07-17 20:21
谢谢,
BP_OpenPartition不是在Bootloader里面做? 我现在是想纯粹把nand flash当作一个文件系统来做, 只要出现盘符就行, 如果仅仅这样的话,该怎么做?? 谢谢 |
|
|
12楼#
发布于:2007-07-17 19:01
to zhuxiaofeng :
你挂载不上可以试试是不是分区格式不对造成的,在BP_OpenPartition中,分区一定要分成fat32的形式,我以前试过分成fat的格式,就挂不上,郁闷了好长一段时间! 你试一下,说不定是这个问题! |
|
13楼#
发布于:2007-07-17 18:28
我手动格式化的时候,就会出现所有的block是bad的情况。
而先前已经扫描了过了,都是好的,为什么再次扫描会出现是bad的哪?? 不明白?? 还往大家指点一下,谢谢。。 |
|
|
14楼#
发布于:2007-07-17 17:52
我加上了,不过没反应,不知道怎么回事?
谢谢。。。 还是挂不上文件系统。 |
|
|
15楼#
发布于:2007-07-17 17:11
"BmlVolumeId"=dword:0
"BmlPartitionId"=dword:8 这两个字段是什么意思呢? |
|
16楼#
发布于:2007-07-17 12:14
我这里就这么设置的话他两个都给你挂上了,后一个名字自动编号2
也试过分开加载,但没有成功。有什么方法可以交流一下。 |
|
|
17楼#
发布于:2007-07-17 10:44
saint_bxg : 如果挂两个FAT区注册表应该怎么设置呢?
|
|
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 |
|
|
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 |
|
|
上一页
下一页