PXA270下WinCE系统,NANDFLASH启动时自动格式化,惊!

时间:2022-03-26 17:23:29
nand是K92G08,256MBytes的,驱动应该是没有多大问题了,能够正常读写,擦除。

但是现在遇到一个问题:
第一次开机前,在EBOOT下格式化为FAT32文件系统,
开机,正常访问FLASH

第二次正常开机,自动格式化FLASH,标记一些原本 不是坏块 的 块 为坏块。

注册表配置如下:
[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}"

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
    "Name"="PXA270 NAND FLASH"
    "Folder"="NandFlash"
    "MountFlags"=dword:0
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1
    "DefaultFileSystem"="FATFS"
    "PartitionDriver"="mspart.dll"

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



起初我以为是读写时,延时不够造成开机时,读取文件系统信息错误,因此开始标记坏块,但是我将读写的RB延时加长,到1MS,还是一样的问题。

希望调试过的朋友帮帮忙,下周一就要演示了。

感激不尽

24 个解决方案

#1


在线等待,求解,谢谢了

#2


查查为什么不是坏块的也被mark成坏块了,看看系统读取spare中的数据为什么为出问题

#3


 自动格式化。。在哪里呢。EBOOT的中,内核启动时

#4


没有碰到过,不过我最近也碰到一个奇怪的问题,我在频繁的插拔U盘的时候,我的U盘里面的文件不见了.

还有一次,在升级MCU的程序的时候,NAND FALSH FAT32分区的文件不见了.

#5


wince内核启动的时候,自动格式化的!

#6


可能是因为原来存储的分区信息丢失了,系统启动时才会自动格式化。
"AutoFormat"=dword:1
这个改为0试试看呢。

#7


该回复于2010-10-22 15:16:36被版主删除

#8


用RAM注册表试试

#9


引用 8 楼 hohohahahoho 的回复:
用RAM注册表试试


RAM注册表的时候系统都没法启动

引用 6 楼 sunrain_hjb 的回复:
可能是因为原来存储的分区信息丢失了,系统启动时才会自动格式化。
"AutoFormat"=dword:1
这个改为0试试看呢。


如果分区坏了,不自动格式化,那盘符就不见了啊

#10


这个情况 在我这里没有发现过 我的平台PXA320+WINCE6.0

#11


楼主设置了自动格式化
wince无法识别分区就会自动格式化的。

#12


RAM注册表的时候系统都没法启动,可能是没有全编译一下。我以前碰到类似问题,先还是把RAM注册表跑起来。

#13


第一次开机前,在EBOOT下格式化为FAT32文件系统,
开机,正常访问FLASH

第二次正常开机,自动格式化FLASH,标记一些原本 不是坏块 的 块 为坏块

---》假如第一次开机,但不访问flash,接着关机,再开机还会自己的格式话吗?楼主可以试一下

#14


PXA270的总线时序需要调整吗?

我都没有设置过,都是用的默认的。

#15


还是没有解决问题。

发现一些现象,在驱动里面写一个测试程序,擦除,写入,读取,针对整个Flash,
偶尔会出现第0块都是读写错误,有时候却很正常。

而我再EBOOT里面,写了一个同样的测试程序,每次都OK。
调用的擦除,读写函数是相同的。

原理图是这样连接的:
| MCU   |  NAND  |
------------------
ADDR1      CLE
ADDR2      ALE
NOE        /RE
NWE        /WE
GPIO16     R//B
NCS1       /CE
DATA0-7    IO0-7
VCC3.3     /WP
------------------

#16


请大家帮帮忙啊,马上投版了,郁闷的很啊

#17


wince启动时,没有找到nand的MBR块就会去格式化

#18


难道是MBR损坏了?

#19


M-----A-------R------K

#20


看来是没有办法了

#21


改了多种不同的线路,任然有问题,看来要从驱动上寻找根源了。


我在boot里面格式化,启动后,能够看到盘符,访问都正常,容量也是OK的。

重启

开机扫描发现坏块,自动格式化,这是一个长期的过程,大概要10来分钟。
格式化完毕之后,容量只有30多M了,也就是说几乎全是坏块。但是不影响使用,读写正常
这次是系统自动格式化的
重启之后,扫描坏块,任然是哪些,因此不用重新格式化。多次重启任然不会出现问题,我已经重启了几十次了。

总结下,boot里面格式化,系统重启几次后,就自动重新格式化了。
系统自动格式化,很难自动重新格式化,但是容量就不对了,256M的内存,扫描下来就只有几十M了。

大家帮忙分析一下这个原因呢,谢谢

#22


引用 17 楼 zengwujun 的回复:
wince启动时,没有找到nand的MBR块就会去格式化


可能是因为原来存储的分区信息丢失了,系统启动时才会自动格式化。
"AutoFormat"=dword:1
这个改为0试试看呢。


受教了。这个format的作用在这里吗?看来是真的了,你可以在BOOT里面格式化分区都完成后不要启动到kernel里面。你看看在你对应的那个nand块中是否存在有MBR,并且里面的数据是否正确,全部都打印出来。

他们的意思是你的MBR是不是没有搞对啊。。。

继续。。哥们

#23


昨天试着改了一下MEMORY_CONTROL_REGISTER的MSC0,应该是调整时序的吧,但是没有什么变化,照样还是要格式化。

现在真是没法定位问题了,不知道是硬件还是软件的问题了。

#24


MBR应该是没有问题了,我今天试过了,

我估计是开机扫描的nand的时候,有些数据出错了,导致系统重新格式化了nandflash
但是现在没法确定是硬件还是软件不稳定导致数据错误的。

郁闷中~~~~~

#1


在线等待,求解,谢谢了

#2


查查为什么不是坏块的也被mark成坏块了,看看系统读取spare中的数据为什么为出问题

#3


 自动格式化。。在哪里呢。EBOOT的中,内核启动时

#4


没有碰到过,不过我最近也碰到一个奇怪的问题,我在频繁的插拔U盘的时候,我的U盘里面的文件不见了.

还有一次,在升级MCU的程序的时候,NAND FALSH FAT32分区的文件不见了.

#5


wince内核启动的时候,自动格式化的!

#6


可能是因为原来存储的分区信息丢失了,系统启动时才会自动格式化。
"AutoFormat"=dword:1
这个改为0试试看呢。

#7


该回复于2010-10-22 15:16:36被版主删除

#8


用RAM注册表试试

#9


引用 8 楼 hohohahahoho 的回复:
用RAM注册表试试


RAM注册表的时候系统都没法启动

引用 6 楼 sunrain_hjb 的回复:
可能是因为原来存储的分区信息丢失了,系统启动时才会自动格式化。
"AutoFormat"=dword:1
这个改为0试试看呢。


如果分区坏了,不自动格式化,那盘符就不见了啊

#10


这个情况 在我这里没有发现过 我的平台PXA320+WINCE6.0

#11


楼主设置了自动格式化
wince无法识别分区就会自动格式化的。

#12


RAM注册表的时候系统都没法启动,可能是没有全编译一下。我以前碰到类似问题,先还是把RAM注册表跑起来。

#13


第一次开机前,在EBOOT下格式化为FAT32文件系统,
开机,正常访问FLASH

第二次正常开机,自动格式化FLASH,标记一些原本 不是坏块 的 块 为坏块

---》假如第一次开机,但不访问flash,接着关机,再开机还会自己的格式话吗?楼主可以试一下

#14


PXA270的总线时序需要调整吗?

我都没有设置过,都是用的默认的。

#15


还是没有解决问题。

发现一些现象,在驱动里面写一个测试程序,擦除,写入,读取,针对整个Flash,
偶尔会出现第0块都是读写错误,有时候却很正常。

而我再EBOOT里面,写了一个同样的测试程序,每次都OK。
调用的擦除,读写函数是相同的。

原理图是这样连接的:
| MCU   |  NAND  |
------------------
ADDR1      CLE
ADDR2      ALE
NOE        /RE
NWE        /WE
GPIO16     R//B
NCS1       /CE
DATA0-7    IO0-7
VCC3.3     /WP
------------------

#16


请大家帮帮忙啊,马上投版了,郁闷的很啊

#17


wince启动时,没有找到nand的MBR块就会去格式化

#18


难道是MBR损坏了?

#19


M-----A-------R------K

#20


看来是没有办法了

#21


改了多种不同的线路,任然有问题,看来要从驱动上寻找根源了。


我在boot里面格式化,启动后,能够看到盘符,访问都正常,容量也是OK的。

重启

开机扫描发现坏块,自动格式化,这是一个长期的过程,大概要10来分钟。
格式化完毕之后,容量只有30多M了,也就是说几乎全是坏块。但是不影响使用,读写正常
这次是系统自动格式化的
重启之后,扫描坏块,任然是哪些,因此不用重新格式化。多次重启任然不会出现问题,我已经重启了几十次了。

总结下,boot里面格式化,系统重启几次后,就自动重新格式化了。
系统自动格式化,很难自动重新格式化,但是容量就不对了,256M的内存,扫描下来就只有几十M了。

大家帮忙分析一下这个原因呢,谢谢

#22


引用 17 楼 zengwujun 的回复:
wince启动时,没有找到nand的MBR块就会去格式化


可能是因为原来存储的分区信息丢失了,系统启动时才会自动格式化。
"AutoFormat"=dword:1
这个改为0试试看呢。


受教了。这个format的作用在这里吗?看来是真的了,你可以在BOOT里面格式化分区都完成后不要启动到kernel里面。你看看在你对应的那个nand块中是否存在有MBR,并且里面的数据是否正确,全部都打印出来。

他们的意思是你的MBR是不是没有搞对啊。。。

继续。。哥们

#23


昨天试着改了一下MEMORY_CONTROL_REGISTER的MSC0,应该是调整时序的吧,但是没有什么变化,照样还是要格式化。

现在真是没法定位问题了,不知道是硬件还是软件的问题了。

#24


MBR应该是没有问题了,我今天试过了,

我估计是开机扫描的nand的时候,有些数据出错了,导致系统重新格式化了nandflash
但是现在没法确定是硬件还是软件不稳定导致数据错误的。

郁闷中~~~~~