jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
阅读:2081回复:18

请教CE5.0中FAT对NANDFLASH的支持问题

楼主#
更多 发布于:2007-07-02 09:34
CE500中fat应该是支持2K大页的,我想知道,它对NANDFLASH的BLOCK的大小有没有限制?对总大小有没有限制?

我的问题是以前用K9K,1G的NANDFLASH, 2K的页,64页/BLOCK,FAT可以挂载,一直可以正常跑,现在换了K9G的NANDFLASH,也是1G的NANDFLASH, 2K的页,只是变成128页/BLOCK,缺不能正常跑了,每次重启动都会重新格式化FAT分区。像问一下这是怎么回事?有知道的大虾帮忙解释下。

不胜感激
zzjlovece
驱动牛犊
驱动牛犊
  • 注册日期2006-06-01
  • 最后登录2012-01-06
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望117点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-03 09:07
我现在在用K9K4G08,但是fat一直挂载不了。大侠可不可以分享一下您的2K page是怎么挂载上去的?谢谢了。
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-03 10:01
挂不上去原因很多,你可以先参考以下“ MX21 NAND CE5.0 HIVE的问题。做过的大哥请指导一下!谢谢了! ”讨论的结果,如果还不行的话可以把你的注册表贴上来大家一起讨论一下。顺便详细说说你开发板的情况。
dillonhua
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望401点
  • 贡献值0点
  • 好评度128点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-03 12:35
引用第0楼jasonshi于2007-07-02 09:34发表的 请教CE5.0中FAT对NANDFLASH的支持问题 :
CE500中fat应该是支持2K大页的,我想知道,它对NANDFLASH的BLOCK的大小有没有限制?对总大小有没有限制?

我的问题是以前用K9K,1G的NANDFLASH, 2K的页,64页/BLOCK,FAT可以挂载,一直可以正常跑,现在换了K9G的NANDFLASH,也是1G的NANDFLASH, 2K的页,只是变成128页/BLOCK,缺不能正常跑了,每次重启动都会重新格式化FAT分区。像问一下这是怎么回事?有知道的大虾帮忙解释下。

不胜感激
.......


你从K9K到K9G改了哪些地方?另外,把注册表的AutoFormat=1去掉,会怎么样?是否是启动不了?
另外,总共的block数目也应该减少了,K9K为1024,那么K9G就应该是512 (我没看K9G文档,你说两者总容量是一样的,那总的block就应该较K9K少)。所以,这些细节的修改是不是都做完整了,另外两者的读写时的地址访问时钟周期是不是完全一样的?等等
zzjlovece
驱动牛犊
驱动牛犊
  • 注册日期2006-06-01
  • 最后登录2012-01-06
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望117点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-03 12:55
我是在270上面搞k9k4g08,每一个page是2048,一个block是64个page。我自己在fmd_init里面调用fmd_writesector,fmd_readsector都可以正确的读写data和spare区。fmd_getinfo里面我也设置了sector 大小为2048。fmd_getblockstatus,fmd_setblockstatus也可以正常工作的。
但是fat在挂载的时候,得到的sector数目居然是负数!
注册表我就是按照之前我的512小page的nand过来的。
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NANDFLASH]
   "Dll"="smflash.dll"
   "Order"=dword:2
   "Prefix"="DSK"
   "Ioctl"=dword:4
   "Profile"="NANDFLASH"
    "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
   "Flags"=dword:1000
  

; Override names in default profile
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH]
    "Name"="NAND Disk"
    "Folder"="NAND Disk"
    "MountFlags"=dword:2
;    "MountFlags"=dword:0
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1
    "FileSystem"="fatfsd.dll"
    "PartitionDriver"="mspart.dll"    

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NANDFLASH]
    "DriverPath"="Drivers\\BuiltIn\\NANDFLASH"
    "LoadFlags"=dword:1
    "Order"=dword:0
大侠们指导指导,谢谢了。
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-07-03 14:27
dillonhua : 我的两片NAND分别是K9K8G:8K个blocks,K9G8G :4k 个blocks。
去掉AutoFormat=1确实启动不了了。
两者的读写时的地址访问时钟周期是完全一样的,只是擦除的时候一个是*64 ,一个是*128,这些都已经改了,如果这些不对,应该一次都起不来的,但每次都能起来,而且FAT区可以正常使用,只是每次起来都要格式化。
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-07-03 14:30
zzjlovece:但是fat在挂载的时候,得到的sector数目居然是负数!,这个信息你从哪里看到的?
dillonhua
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望401点
  • 贡献值0点
  • 好评度128点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-07-03 21:04
引用第5楼jasonshi于2007-07-03 14:27发表的  :
dillonhua : 我的两片NAND分别是K9K8G:8K个blocks,K9G8G :4k 个blocks。
去掉AutoFormat=1确实启动不了了。
两者的读写时的地址访问时钟周期是完全一样的,只是擦除的时候一个是*64 ,一个是*128,这些都已经改了,如果这些不对,应该一次都起不来的,但每次都能起来,而且FAT区可以正常使用,只是每次起来都要格式化。


那你AutoFormat=0看看?另外,要注意一下,他们对于invalid block的记录信息是在2048后面的第几个字节记录的
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-04 07:40
autoformat不会影响,即使将其设为1,只要FAT表的格式是对的,也不会再格式化.
我觉得这个问题主要有这两个方面:
1.访问硬件时序是不是对.
2.SECTOR INFO是否保存正确.

这两点搞定应该就没问题了.
学海无涯
zzjlovece
驱动牛犊
驱动牛犊
  • 注册日期2006-06-01
  • 最后登录2012-01-06
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望117点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-07-04 09:01
引用第6楼jasonshi于2007-07-03 14:30发表的  :
zzjlovece:但是fat在挂载的时候,得到的sector数目居然是负数!,这个信息你从哪里看到的?

这个是调制信息:
0x83fc88c8: Loading partition driver mspart.dll hModule=83F9EA2C
0x83fc88c8: Driver mspart.dll loaded
0x83fc88c8: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical            sector 0x0!!!
0x83fc88c8: FLASHDRV.DLL:ReadFromMedia() - Unable to determine physical sector address for logical sector 0x00000000
0x83fc88c8: Opened the store hStore=000B2EB0
0x83fc88c8: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical sector 0x0!!!
0x83fc88c8: FLASHDRV.DLL:ReadFromMedia() - Unable to determine physical sector address for logical sector 0x00000000
0x83fc88c8: NumSec=-384 BytesPerSec=2048 FreeSec=0 BiggestCreatable=0
很奇怪的。。。。
而且我自己写一点数据,再读出来,是一样的。spare区写进去再读出来也是一样的。
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-07-04 09:24
但是fat在挂载的时候,得到的sector数目居然是负数!

有没有添加对所用芯片的定义?比如:
// K9K1GXXX0A family
#define NAND_DEVICE_K9K1G08Q0X  \
{ ID_MAKER_SAMSUNG, 0x78, 16, SAMSUNG_SMALLPAGE_X08_BBI_OFFSET, 33333333, 8192, 32, 512, 16, 0x03, 0x00, TRUE }
努力! 成功就在不远处....
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-07-04 09:40
dillonhua:试了,还是不行,OOB中的八个字节顺序我已经调整了,应该没问题。

microsun :
1.访问硬件时序是对的.
2.SECTOR INFO也正确.
我想知道FAT对大BLOCK有没有特殊的要求?另外K9G的oob只能写一次,CE会不会多次写OOB?
simon5430
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望67点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-07-04 10:07
小弟同样遇到了这样的问题。
不过已经找出规律,发现在2KB页大小时,FAT支持最大512MB的分区,如果超过这个大小,分区程序就会自动重新分区;反之则不会自动分区。

想分两个区试试,但是也没有搞成功。
simon5430
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望67点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-07-04 10:10
对于这个问题,看能否问问微软,文件系统内部是如何进行处理的。我就没有搞明白为什么只支持512MB大小的分区,将FLASH总大小设置超过512MB,分区程序自动重新分区并且格式化。
如果这样的话,我1GB的FLASH,只能使用一半啊。另外想搞几个分区,但是不知道如何设置。
可以加我MSN 探讨 sandassnow@msn.com
或者QQ 29271884
zzjlovece
驱动牛犊
驱动牛犊
  • 注册日期2006-06-01
  • 最后登录2012-01-06
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望117点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-07-04 10:20
引用第10楼saint_bxg于2007-07-04 09:24发表的  :
但是fat在挂载的时候,得到的sector数目居然是负数!

有没有添加对所用芯片的定义?比如:
// K9K1GXXX0A family
#define NAND_DEVICE_K9K1G08Q0X  
.......

呵呵,大侠我直接用的我这个k9k4g08的硬件操作,相关的配置也都是对的。应该不是您说的这个问题。
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-07-04 14:49
simon5430  我的QQ 36671013 我白天公司里不能用这些,晚上联系
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-07-05 10:25
引用第12楼simon5430于2007-07-04 10:07发表的  :
小弟同样遇到了这样的问题。
不过已经找出规律,发现在2KB页大小时,FAT支持最大512MB的分区,如果超过这个大小,分区程序就会自动重新分区;反之则不会自动分区。

想分两个区试试,但是也没有搞成功。


应该不是哦,我1G的flash  分的区有个960多M的
[url]http://sniper167.bokee.com[/url]
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-07-05 10:29
分区不能超过512M,看看是不是这个原因

Partition Types

Value  Description  
PART_UNKNOWN (00h)  Unknown
PART_DOS2_FAT (01h)  12-bit FAT
PART_DOS3_FAT (04h)  16-bit FAT. Partitions smaller than 32MB.  
PART_EXTENDED (05h)  Extended MS-DOS Partition
PART_DOS4_FAT (06h)  16-bit FAT. Partitions larger than or equal to 32MB.  
PART_DOS32 (0Bh)  32-bit FAT. Partitions up to 2047GB.  
PART_DOS32X (0Ch)  Same as PART_DOS32 (0Bh), but uses Logical Block Address Int 13h extensions.  
PART_DOSX13 (0Eh)  Same as PART_DOS4_FAT (06h), but uses Logical Block Address Int 13h extensions.  
PART_DOSX13X (0Fh)  Same as PART_EXTENDED (05h), but uses Logical Block Address Int 13h extensions.
[url]http://sniper167.bokee.com[/url]
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-07-05 11:22
引用第9楼zzjlovece于2007-07-04 09:01发表的  :

这个是调制信息:
0x83fc88c8: Loading partition driver mspart.dll hModule=83F9EA2C
0x83fc88c8: Driver mspart.dll loaded
0x83fc88c8: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical            sector 0x0!!!
.......



我也遇到这个问题,你是怎么解决的??
谢谢
那位大虾知道,指导一下。
谢谢了。。
做一个出色的程序员!
游客

返回顶部