? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wince6.0 ?nandflash当做mass storage(U盘)
?平台:wince6 ?+ S3C6410?
BSP:友坚BSP2.1
?前些日子,有客户要求Nandflash作为 mass storage使用,不想使用同步工具传资料。下面是具体步骤:
1.勾选 Device Drivers->USB Function->USB FUnction Clients->Mass Storage
2.SMDK6410.bat ?中的
?set BSP_USBFNCLASS=SERIAL
@REM?set BSP_USBFNCLASS=MASS_STORAGE
修改为
@REM?set BSP_USBFNCLASS=SERIAL
? set BSP_USBFNCLASS=MASS_STORAGE
3.修改platform.reg中usb function注册表
#IF 0 ;add mao for usb Mass_Storage
;------------ USB Function Driver -------------------------------------------
; @CESYSGEN IF CE_MODULES_USBFN
IF BSP_NOUSBFN !
IF BSP_KITL != USBSERIAL
[HKEY_LOCAL_MACHINEDriversBuiltInSC6410USBFN]
"Dll"="s3c6410_usbfn.dll"
"Prefix"="UFN"
"Order"=dword:20
"Priority256"=dword:64
"Irq"=dword:60; USB OTG Virtual IRQ = 96 (0x60),Physical IRQ = 58
"BusIoctl"=dword:2a0048
"IClass"=multi_sz:"{E2BDC372-598F-4619-BC50-54B3F7848D35}=%b","{6F40791D-300E-44E4-BC38-E0E63CA8375C}=%b"
[HKEY_LOCAL_MACHINEDriversUSBFunctionDrivers]
"DefaultClientDriver"=-; erase previous default
?
;------------ USB Function Serial Driver --------------------------------------
IF BSP_USBFNCLASS == SERIAL
[HKEY_LOCAL_MACHINEDriversUSBFunctionDrivers]
"DefaultClientDriver"="Serial_Class"
[HKEY_LOCAL_MACHINEDriversUSBFunctionDriversSerial_Class]
"FriendlyName"=LOC_USBFN_SERIAL_NAME
"idVendor"=dword:045E
? ? ?;"idVendor"=dword:0547 ?;add mao
"Manufacturer"=LOC_USBFN_SERIAL_MANUFACTURER
?"idProduct"=dword:00CE
;"idProduct"=dword:2720 ;add mao
"Product"=LOC_USBFN_SERIAL_PRODUCT
"Index"=dword:5
ENDIF BSP_USBFNCLASS
;-------------------------------------------------------------------------
;------------ USB Function Mass Stroge Driver ---------------------------------
IF BSP_USBFNCLASS == MASS_STORAGE
[HKEY_LOCAL_MACHINEDriversUSBFunctionDrivers]
; "DefaultClientDriver"=- ; erase previous default
"DefaultClientDriver"="Mass_Storage_Class"
[HKEY_LOCAL_MACHINEDriversUSBFunctionDriversMass_Storage_Class]
"Dll"="usbmsfn.dll"
"InterfaceSubClass"=dword:06
"InterfaceProtocol"=dword:50
"DeviceName"="DSK1:" ? //DSK后缀标号要与nandflash中的index一致
"FriendlyName"="Mass Storage"
"idVendor"=dword:045E
"Manufacturer"="Generic Manufacturer (PROTOTYPE--Remember to change idVendor)"
"idProduct"=dword:FFFF
"Product"="Generic Mass Storage (PROTOTYPE--Remember to change idVendor)"
"bcdDevice"=dword:0
"Removable"=dword:0
;-----------------add mao 1217------------
[HKEY_LOCAL_MACHINEDriversUSBFunctionDriversRNDIS]
? ? "idVendor"=dword:0547
? ? "Manufacturer"=LOC_USBFN_RNDIS_MANUFACTURER
? ? "idProduct"=dword:2c2d
? ? "Product"=LOC_USBFN_RNDIS_PRODUCT
;-----------------add mao 1217------------
ENDIF BSP_USBFNCLASS
[HKEY_LOCAL_MACHINEDriversSDCARDClientDriversClassSDMemory_Class]
"Index"=dword:3
[HKEY_LOCAL_MACHINEDriversSDCARDClientDriversClassSDMemory_ClassHigh_Capacity]
"Index"=dword:3
[HKEY_LOCAL_MACHINEDriversSDCARDClientDriversClassMMC_Class]
"Index"=dword:3
;-------------------------------------------------------------------------
[HKEY_CURRENT_USERControlPanelComm]
"Cnct"="`USB"
[HKEY_LOCAL_MACHINEDebugZones]
"USBFN"=dword:ffff
"Serial"=dword:ffff
"PM"=dword:ffff
ENDIF
ENDIF BSP_NOUSBFN !
; @CESYSGEN ENDIF CE_MODULES_USBFN
;-------------------------------------------------------------------------
4.NandFlash 的注册表如下
[HKEY_LOCAL_MACHINEDriversBuiltInNANDFlash]
"Dll"="nandflash.dll"
"Prefix"="DSK"
"Order"=dword:4
;"Ioctl"=dword:4
"Profile"="NSFlash"
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"Index"=dword:1 ?;add mao 1217
; Override names in default profile
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlash]
"DefaultFileSystem"="FATFS"
?"Name"="Microsoft Flash Disk"
?"Folder"="NANDFlash"
?"PartitionDriver"="MSPart.dll"
?"AutoMount"=dword:1
?"AutoPart"=dword:1
?"AutoFormat"=dword:1?
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlashFATFS]
"EnableCache"=dword:1
"CacheSize"=dword:1000
"MountBootable"=dword:1
;"Flags"=dword:00000024
"CheckForFormat"=dword:1
;add mao
? ; "FormatExfat"=dword:1
? ? "FormatFAT"=dword:1?
"Flags"=dword:14
"EnableWriteBack"=dword:1
"MountAsRoot"=dword:1
"MountAsBootable"=dword:1
重新sysgen 后,下载NK后,会在pc端 发现 ?可移动磁盘,
遇到的问题:
点击打开时,提示未格式磁盘,需要格式化,但格式化时会出错,或者导致系统重启后起不来,
原因是:我的Nandflash被分为了BINFS 和FAT32 两个分区,pc识别的是BINFS分区,现在我们需要将FAT32分区映射给pc,修改public下的usbfn—class -storage-block.cpp中的g_hStore = OpenStore(g_szDeviceName);为
g_hStore = OpenPartition(g_hStore,_T("Part01")); //add mao for mass storage
重新编译后,发现第一次打开时 还是提示要格式化磁盘,格式化后可以使用,为什么需要格式化在网上查到原因:
CE6设备如果使用exFAT文件系统,作为Mass Storage盘符连接win xp系统的PC后,访问这个盘符时XP会提示此盘符未格式化,需要格式化,这是因为WINDOWS桌面系统是从Vista sp1才开始支持exfat的,后边的win7等都没有问题,而win xp识别exFAT需求安装补丁955704,文件名:WindowsXP-KB955704-x86-CHS.exe
下载地址:
http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=1cbe3906-ddd1-4ca2-b727-c2dff5e30f61
当然如果你未选中exfat文件系统组件,我估计是没有最后这个问题的,安装补丁后,就OK了。