[经验] wince 下用应用程序给nandflash 多分区的一个方法

Wince.Android   2013-12-24 11:39 楼主
在CSDN看到的,转过来学习一下
http://bbs.csdn.net/topics/330066780
用CreatePartition()就可以了。流程

1、用FindFirstStore()和FindNextStore()枚举系统中所有Store设备,根据szStoreName判断是不是我们要的Nand Flash。
2、根据找到的Store句柄调用CreatePartition(),可以指定partition的名字、扇区数
3、调用OpenPartition(),根据Store句柄和Partition的名字打开分区
4、调用DismountPartition()卸载分区。
5、调用FormatVolume()格式化分区,此时可以指定簇大小、FAT版本等。
6、调用MountPartition()加载分区

2---6可以重复多次调用,就可以建立多个分区了。
注意每个分区的大小,不要第一次就用完了Store的所用空间,后面的分区会建立失败的


注册表
引用 5 楼 gooogleman 的回复:
引用 3 楼 yangcuncunzhang 的回复:
用CreatePartition()就可以了。流程

1、用FindFirstStore()和FindNextStore()枚举系统中所有Store设备,根据szStoreName判断是不是我们要的Nand Flash。
2、根据找到的Store句柄调用CreatePartition(),可以指定partition的名字、扇区数
3、调用OpenPartition(),根据Store句柄和Partition的名字打开分区
4、调用DismountPartition()卸载分区。
5、调用FormatVolume()格式化分区,此时可以指定簇大小、FAT版本等。
6、调用MountPartition()加载分区

2---6可以重复多次调用,就可以建立多个分区了。
注意每个分区的大小,不要第一次就用完了Store的所用空间,后面的分区会建立失败的


楼主是ADS bootloader的,估计是自动分区那种,楼主应该 多加载一次驱动,估计就可以了。呵呵

BootLoader是什么编译的应该没关系吧?
我的项目中,BootLoader也是ADS1.2的,WinCE5是PlatForm Builder做的,就是用上面的办法建立多个分区的,注册表中只用了一份驱动。这样有个小缺陷:分区的名字是根据注册表里面指定的,如果用上面的API建立多个分区,各个盘符的名字会是Nand Flash, Nand Flash1, Nand Flash2。

楼主,下面是我的注册表项

; Use Device Manager to load the NAND FMD driver as a built-in block driver.
; This can be used for both WinCE and Windows Mobile builds.
;
; Note: We support Windows Mobile Image Update build for SmartPhone,
; and the registry settings below get conflicts with the ones needed by Image Update.
; So we will overwrite them and setup Storage Manager Autoload keys in SmartPhone section
; to load NAND FMD driver as persistent storage during the early boot phases.
;
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NANDFMD]
    "Profile"="FlashDisk"
    "Index"=dword:1
    "Dll"="nandfmd.dll"
    "Prefix"="DSK"
    "Order"=dword:1
    "FSD"="FATFS.DLL"
    "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"

; Override names in default profile. These settings are also required to
; support the automatic mounting and creation of the "NAND Flash" folder.
;
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk]
    "DriverPath"="Drivers\\BuiltIn\\NANDFMD"
    "Name"="NAND FLASH"
    "Folder"="NAND Flash"
    "DefaultFileSystem"="FATFS"
    "EnableCache"=dword:1
    "CacheSize"=dword:0

; Explicitly specify the use of the TFAT filesystem for NAND flash.
;
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk1\FATFS]
    "FormatTfat"=dword:1     ; Format partitions to be TFAT
    "Flags"=dword:007C1014   ; reference follow bit flag
如果用EBOOT的话,在EBOOT里重复用
hPartEx = BP_OpenPartition( NEXT_FREE_LOC,
USE_REMAINING_SPACE,
PART_DOS32,
FALSE,
PART_OPEN_ALWAYS);
就可以建立多少分区
如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复评论 (1)

; Explicitly specify the use of the TFAT filesystem for NAND flash.
;
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk1\FATFS]
    "FormatTfat"=dword:1     ; Format partitions to be TFAT
    "Flags"=dword:007C1014   ; reference follow bit flag

FlashDisk1 这个有点奇怪,难道是要改注册表的?FlashDisk1应该是FlashDisk才对啊。:funk1::funk1:
如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
点赞  2013-12-24 11:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复