PXA270+WINCE5.0平台下NANDFLASH驱动

时间:2021-10-12 07:01:17
最近在调试PXA270的nandflash,在驱动中写了一个测试程序,读写擦除是没有问题了

但是系统起来,flash扫描完之后,系统就不动了。

不知道是什么原因?注册表是放在HIVE BOOT SECTION区的


注册表如下:

; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE\Drivers\BlockDevice\SMFLASH]
   "Dll"="smflash.dll"
   "Order"=dword:2
   "Prefix"="DSK"
   "Ioctl"=dword:4
   "Profile"="SMFLASH"
   "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
   "Flags"=dword:1000


[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\SMFLASH]
  "DriverPath"="Drivers\\BlockDevice\\SMFLASH"
  "LoadFlags"=dword:1
   "Order"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
"Name"="Microsoft Flash Disk"
"Name"="SMFLASH"
"Folder"="NandFlash"
"MountFlags"=dword:0
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1
"FileSystem"="fatfsd.dll"
"PartitionDriver"="mspart.dll"    


[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS]
"FriendlyName"="TFAT FileSystem"
"Dll"="fatfsd.dll"
"Flags"=dword:00680034
"Paging"=dword:1
"CacheSize"=dword:0
"FormatTfat"=dword:1

; END HIVE BOOT SECTION

;-------------------------------------HIVE END------


麻烦大家帮帮忙
谢谢

17 个解决方案

#1


具体执行到了哪个环节?
是执行完这个驱动还是进入了WINCE?
是不是HIVE REG的问题?没有读到注册表?
改成RAM REG试试

#2


驱动加载之后,系统会对nandflash进行一次扫描,有erase,read,write等操作

执行完之后就没有下文了,系统就卡死在哪儿了

估计是没有读到注册表

我刚才看到网上有一些文章,说是要在eboot里面使用BP_OpenPartition,创建分区。


这步是不是必须得

#3


OEMInitDebugSerial using UART1
Windows CE Kernel for ARM (Thumb Enabled) Built on Aug  4 2008 at 18:38:38
ProcessorType=0411  Revision=7
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 96cb97d0
XSCDBG:Trace initialized: CFG:98570b9c  Buffer: 9856f648, 14f0
OEMInit done.
Sp=ffffc7cc
Load NandFlash Driver(ActiveReg=Drivers\BlockDevice\SMFLASH) ...  ... OK
FMD_GetInfo : _ReadXID() nMID=0xEC, nDID=0xDA
FMD_GetInfo : NUMBLOCKS : 32(0x20), SECTORSPERBLOCK = 256(0x100), BYTESPERSECTOR = 512(0x200) 
FMD_OEMIoControl: unrecognized IOCTL (0x71c24).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).

#4


没用过EBOOT的分区,我使用的是CE启动的时候分区。

所以我建议你先暂时去掉HIVE注册表的功能,这样启动的时候不会去读FAT中的注册表,是从NK中读取并加载执行,如果能够正常启动说明很有可能是NAND的分区问题,如果仍然不能启动就要再找其它原因了。

#5


在EBOOT中分区看看吧

#6


去掉HIVE注册表功能就OK了,终于能挂载上去了。

但是我的目标是要实现HIVE注册表才行,所以现在只是验证了驱动的完整性。继续调试

现在的注册表如下:没有HIVE功能
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]
   "Dll"="smflash.dll"
   "Order"=dword:2
   "Prefix"="DSK"
   "Ioctl"=dword:4
   "Profile"="SMFLASH"
   "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
   "Flags"=dword:1000

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
    "Name"="SMFLASH"
    "Folder"="SMFLASH"
    "MountFlags"=dword:0
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1
    "FileSystem"="fatfsd.dll"
    "PartitionDriver"="mspart.dll"    

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\SMFLASH]
    "DriverPath"="Drivers\\BuiltIn\\SMFLASH"
    "LoadFlags"=dword:1
    "Order"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS]
    "FriendlyName"="TFAT FileSystem"
    "Dll"="fatfsd.dll"
    "Flags"=dword:00680034
    "Paging"=dword:1
    "CacheSize"=dword:0
    "FormatTfat"=dword:1

#7


现在nandflash是找到了

但是SD卡却找不到了,郁闷啊

SD卡能检测到,但是就是找不到盘

#8


SD卡加载的时候出现如下异常

Data Abort: Thread=9a5ec400 Proc=981d7e50 'filesys.exe'
AKY=00000003 PC=03fd5c80(coredll.dll+0x00055c80) RA=03fd71c0(coredll.dll+0x000571c0) BVA=36363829 FSR=00000003

#9


楼主是把WinCE操作系统烧录到NAND中吗?
以前调试PXA270+NAND+MultiBIN时也发现类似的问题,
系统启动时总是莫名其妙的出现Data Abort,
后来放弃使用MultiBIN了。

由于PXA270没有NAND控制器,
自己扩展出来的效果还是要差很多的。

#10


我没有将系统烧录到NAND,
只是将NAND作为一个扩展的磁盘而已
现在连HIVES也都还没有实现。

#11


WinCE启动的时候,会扫描nandflash,这个时间好像非常的长,

我用的是256M bytes的Nandflash

有什么方法可以提高他扫描的速度吗?

#12


有人知道这个扫描怎么处理吗,开机太慢了

#13


WinCE启动的时候,会扫描nandflash,这个时间好像非常的长,

我用的是256M bytes的Nandflash

有什么方法可以提高他扫描的速度吗?

----------》256M是很快的。估计程序写的不好,或者卡有问题。如果用hive需要在eboot中创建分区。

#14


做过NAND FLASH和SD卡驱动,两个是不冲突的。除非你硬件上有冲突,有寄存器控制,初始化的时候,需要加锁一个。

#15


"MountFlags"=dword:0 这个注册表的键值可以让你的HIVE放到nand上去,估计就是你启动停住的原因
要想让你启动加快,可以避免启动的时候来扫描你的整个nand,你的FAT的分区越大,启动就越慢,所以,在FAT分区下有个flags里面有个disablesacan的键值,你仔细看看help,有一个键值

#16


PXA270没有NAND控制器,因此都是用总线模拟的,通过总线发送命令来实现的,ECC校验我也没有做,案例说应该很快的。

分区是在eboot里面进行的,因为系统是烧写到norflash里面的,所以nandflash只是在第一次使用时格式化了一下。

而且现在还没有实现hives,无法保存更改的注册表

#17


"Flags"=dword:00680034
disablesacan应该是有效的,不会扫描,还是很慢!


#1


具体执行到了哪个环节?
是执行完这个驱动还是进入了WINCE?
是不是HIVE REG的问题?没有读到注册表?
改成RAM REG试试

#2


驱动加载之后,系统会对nandflash进行一次扫描,有erase,read,write等操作

执行完之后就没有下文了,系统就卡死在哪儿了

估计是没有读到注册表

我刚才看到网上有一些文章,说是要在eboot里面使用BP_OpenPartition,创建分区。


这步是不是必须得

#3


OEMInitDebugSerial using UART1
Windows CE Kernel for ARM (Thumb Enabled) Built on Aug  4 2008 at 18:38:38
ProcessorType=0411  Revision=7
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 96cb97d0
XSCDBG:Trace initialized: CFG:98570b9c  Buffer: 9856f648, 14f0
OEMInit done.
Sp=ffffc7cc
Load NandFlash Driver(ActiveReg=Drivers\BlockDevice\SMFLASH) ...  ... OK
FMD_GetInfo : _ReadXID() nMID=0xEC, nDID=0xDA
FMD_GetInfo : NUMBLOCKS : 32(0x20), SECTORSPERBLOCK = 256(0x100), BYTESPERSECTOR = 512(0x200) 
FMD_OEMIoControl: unrecognized IOCTL (0x71c24).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).
FMD_OEMIoControl: unrecognized IOCTL (0x71c54).

#4


没用过EBOOT的分区,我使用的是CE启动的时候分区。

所以我建议你先暂时去掉HIVE注册表的功能,这样启动的时候不会去读FAT中的注册表,是从NK中读取并加载执行,如果能够正常启动说明很有可能是NAND的分区问题,如果仍然不能启动就要再找其它原因了。

#5


在EBOOT中分区看看吧

#6


去掉HIVE注册表功能就OK了,终于能挂载上去了。

但是我的目标是要实现HIVE注册表才行,所以现在只是验证了驱动的完整性。继续调试

现在的注册表如下:没有HIVE功能
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]
   "Dll"="smflash.dll"
   "Order"=dword:2
   "Prefix"="DSK"
   "Ioctl"=dword:4
   "Profile"="SMFLASH"
   "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
   "Flags"=dword:1000

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
    "Name"="SMFLASH"
    "Folder"="SMFLASH"
    "MountFlags"=dword:0
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1
    "FileSystem"="fatfsd.dll"
    "PartitionDriver"="mspart.dll"    

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\SMFLASH]
    "DriverPath"="Drivers\\BuiltIn\\SMFLASH"
    "LoadFlags"=dword:1
    "Order"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS]
    "FriendlyName"="TFAT FileSystem"
    "Dll"="fatfsd.dll"
    "Flags"=dword:00680034
    "Paging"=dword:1
    "CacheSize"=dword:0
    "FormatTfat"=dword:1

#7


现在nandflash是找到了

但是SD卡却找不到了,郁闷啊

SD卡能检测到,但是就是找不到盘

#8


SD卡加载的时候出现如下异常

Data Abort: Thread=9a5ec400 Proc=981d7e50 'filesys.exe'
AKY=00000003 PC=03fd5c80(coredll.dll+0x00055c80) RA=03fd71c0(coredll.dll+0x000571c0) BVA=36363829 FSR=00000003

#9


楼主是把WinCE操作系统烧录到NAND中吗?
以前调试PXA270+NAND+MultiBIN时也发现类似的问题,
系统启动时总是莫名其妙的出现Data Abort,
后来放弃使用MultiBIN了。

由于PXA270没有NAND控制器,
自己扩展出来的效果还是要差很多的。

#10


我没有将系统烧录到NAND,
只是将NAND作为一个扩展的磁盘而已
现在连HIVES也都还没有实现。

#11


WinCE启动的时候,会扫描nandflash,这个时间好像非常的长,

我用的是256M bytes的Nandflash

有什么方法可以提高他扫描的速度吗?

#12


有人知道这个扫描怎么处理吗,开机太慢了

#13


WinCE启动的时候,会扫描nandflash,这个时间好像非常的长,

我用的是256M bytes的Nandflash

有什么方法可以提高他扫描的速度吗?

----------》256M是很快的。估计程序写的不好,或者卡有问题。如果用hive需要在eboot中创建分区。

#14


做过NAND FLASH和SD卡驱动,两个是不冲突的。除非你硬件上有冲突,有寄存器控制,初始化的时候,需要加锁一个。

#15


"MountFlags"=dword:0 这个注册表的键值可以让你的HIVE放到nand上去,估计就是你启动停住的原因
要想让你启动加快,可以避免启动的时候来扫描你的整个nand,你的FAT的分区越大,启动就越慢,所以,在FAT分区下有个flags里面有个disablesacan的键值,你仔细看看help,有一个键值

#16


PXA270没有NAND控制器,因此都是用总线模拟的,通过总线发送命令来实现的,ECC校验我也没有做,案例说应该很快的。

分区是在eboot里面进行的,因为系统是烧写到norflash里面的,所以nandflash只是在第一次使用时格式化了一下。

而且现在还没有实现hives,无法保存更改的注册表

#17


"Flags"=dword:00680034
disablesacan应该是有效的,不会扫描,还是很慢!