zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
阅读:29302回复:72

【原创】2K大页面NAND FLASH的WINCE5.0/4.2下的驱动源码。

楼主#
更多 发布于:2007-01-15 17:44
  就在上周我在为开发2K大页面驱动而苦恼的时候,周末终于全部搞定了,并且做了较好的改进,前后花了我3天3夜的时间,现在直接把最终的成果直接奉献给大家。
能跟据FLASH ID识别自动注册相应FLASH的访问接口,目前代码上实现了K9S1208,K9F1G08,K9F2G08,K9F4G08,K9K8G08,K9F2G16的访问接口,实测过K9S1208,K9F1G08的功能,验证结果证明,该驱动可以识别出K9S1208,K9F1G08,自动加载相应的芯片访问接口,支持文件系统访问。通过查看参考K9F2G08/K9F4G08/K9K8G08的芯片资料,发现它们的普通命令接口和K9F1G08是一样的,只是块个数不一样而已,行地址是3个周期的,比K9F1G08多一个,所以把它们也支持了,但没有条件实测,理论上应该是行得通的,有相应硬件的人使用该驱动别忘了告诉我结果,有问题请联系我。请大家下载回去使用的时候看一下readme.txt里面有我的联系方式。
各位可以把使用情况,出现什么问题告诉我,让我可以改进和完善它。
附件名称/大小 下载次数 最后更新
2k大页面flash wince4.2_5.0驱动源码.rar (71KB)  2160 2007-01-15 17:44

最新喜欢:

linuclinuc
lljj462
驱动牛犊
驱动牛犊
  • 注册日期2005-08-08
  • 最后登录2008-08-06
  • 粉丝0
  • 关注0
  • 积分576分
  • 威望83点
  • 贡献值0点
  • 好评度79点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-15 20:52
呵呵,支持!多谢了!
jyc_1
驱动小牛
驱动小牛
  • 注册日期2003-09-13
  • 最后登录2009-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望110点
  • 贡献值0点
  • 好评度110点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-16 10:30
疯狂的顶一下
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
地板#
发布于:2007-01-16 13:21
因为loader.h没有给大家,里面有两个宏定义需要修改一下,
// BinFS work area defined in boot.bib
//#define BINFS_RAM_START             (0x8c021000 | CACHED_TO_UNCACHED_OFFSET)   // uncached
//#define BINFS_RAM_LENGTH            0x5000

// BinFS work area defined in boot.bib
#define BINFS_RAM_START             (0x8c080000 | CACHED_TO_UNCACHED_OFFSET)   // uncached
#define BINFS_RAM_LENGTH            0x30000

否则BP_Init();初始化会失败。
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
地下室#
发布于:2007-01-16 13:39
网友的疑问:
1.三星发布的eboot中应该只支持512byte的flash(我的理解),原因是eboot连接了bootpart.lib库,在bootpart.c中包括了bootpart.h文件,此中定义了SECTOR_SIZE为512,要支持2048的SECTOR_SIZE,应该要做改动,我不知道你是怎么处理这个问题的,谢谢!

2,在eboot运行时要调用BP_Init,此函数要用到BOOT.BIB中关于BIN_FS地址和大小的定义,我想最小应该是
一个block的大小,这样就导致要修改BOOT.BIB文件,从而EBOOT的地址也要做相应的改变,不知道你是怎么做的,从你的NBOOT里面看来,好像没有变!

3,我在做程序时,是在wince4.2的平台上做的,SJF2440.exe已经成功了,nboot也能加载镜像os,eboot也能将镜像os烧入nandflash中(KF1G08),也能启动,但是就是看不到nandflash的分区,我的电脑里面也没有
RESENTFLASH文件夹,我怀疑跟文件系统挂接时出了问题,我看了eboot 格式化后MBR,的确已经写入信息了。

解答:
zhengshijie@msn.com 说:
问题1:
zhengshijie@msn.com 说:
bootpart.h的SECTOR_SIZE保持512不变。
风景这边独好 说:
难道有一部分不用
风景这边独好 说:
你的意思是在fat文件系统访问时把2k得sector当512字节用吗?
zhengshijie@msn.com 说:
问题2:#define BINFS_RAM_START             (0x8c080000 | CACHED_TO_UNCACHED_OFFSET)   // uncached
#define BINFS_RAM_LENGTH            0x30000
zhengshijie@msn.com 说:
是的,FAT文件系统的sector_size是512的。
zhengshijie@msn.com 说:
问题3:前面都做好了,就不存在这个问题了,另外,你可以看一下控制面板中是否能看到这个DISK,格式化一下就可以看到文件夹了,当然你把前面两个问题解决了,第三个问题也就不存在了。
风景这边独好 说:
也就是说剩余flash做flash盘时,可用空间只有实际空间得1/4?
zhengshijie@msn.com 说:
那不是,可用空间是你实际空间。
风景这边独好 说:
不太明白
风景这边独好 说:
你不是把一个sector当成512了吗
zhengshijie@msn.com 说:
是这样的,FAL层做了隐射,你也知道FAT文件系统的SECTOR SIZE就是512的,然后通过FAL(文件系统抽象层)做了逻辑到物理的映射。
风景这边独好 说:
Log2Phys就是这个函数吗?
风景这边独好 说:
你作eboot时,有没有改动boot part.c这个函数啊,就是说eboot连接的库有没有修改?
zhengshijie@msn.com 说:
这个eboot中的bootpart.cpp里的,fal.lib里有类似的函数。因为fal.lib没有源码的。
zhengshijie@msn.com 说:
不需要修改bootpart.cpp
风景这边独好 说:
明白,你只改动fmd的驱动就行了
zhengshijie@msn.com 说:
最后结果证明,不用考虑上层的接口,微软已经考虑了FLASH的多样性,所以要你提供FMD_GetInfo()获取实际物理存储介质的信息,只要把信息给对,驱动就按实际的FLASH实现,其它不用考虑。
风景这边独好 说:
能不能看看你的BOOT.BIB文件
风景这边独好 说:
明白了,多谢指教
zhengshijie@msn.com 说:
这是我做完了得到的体会,一开始我也有你那些顾虑,BOOT.BIB不用改动。
zhengshijie@msn.com 说:
我甚至实现了在驱动中做了2048到512的映射,把一页分成4页,而且作成功了。
风景这边独好 说:
BINFS_RAM_START 原来是在8c021000啊
风景这边独好 说:
我也想用分页来做,受你在网上的影响啊
zhengshijie@msn.com 说:
没关系的,实际程序用的是loader.h中的宏定义,只要loader.h改了就可以了。
billy14
驱动牛犊
驱动牛犊
  • 注册日期2004-04-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望38点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-16 14:39
虽然没用到,但是对无私的人还是顶一下,好贴~~~~~~~
falconboy
驱动牛犊
驱动牛犊
  • 注册日期2006-04-11
  • 最后登录2008-11-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-22 13:34
刚在找这方面资料  强烈地支持


有什么使用的问题或者效果会和楼主联系的
ielts5316
驱动小牛
驱动小牛
  • 注册日期2005-05-18
  • 最后登录2018-08-27
  • 粉丝0
  • 关注0
  • 积分478分
  • 威望940点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2007-01-22 23:14
thanks
szlook
驱动牛犊
驱动牛犊
  • 注册日期2003-10-16
  • 最后登录2007-06-19
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-01-23 18:28
好人!多谢!
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2007-01-24 09:30
多谢了!
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2007-01-24 09:30
多谢了!
nancyk2h
驱动牛犊
驱动牛犊
  • 注册日期2007-01-12
  • 最后登录2007-07-09
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-01-27 13:02
看看!
macintoshm
驱动牛犊
驱动牛犊
  • 注册日期2005-12-05
  • 最后登录2007-01-29
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-01-29 10:21
多谢!
hiverlee
驱动牛犊
驱动牛犊
  • 注册日期2005-11-13
  • 最后登录2006-12-01
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-01-31 16:15
我是用的2440,只是不知用什么软件才能将这些程序下载到Flash里去
newuser1
驱动牛犊
驱动牛犊
  • 注册日期2005-11-14
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-01-31 17:17
我用压缩包里的sjf2440.exe 测试k9f1g08却无法识别,提示无法读出flash id,不知为何,有没有人遇到这个问题
dreamzqw
驱动牛犊
驱动牛犊
  • 注册日期2004-11-25
  • 最后登录2019-04-08
  • 粉丝1
  • 关注0
  • 积分19分
  • 威望182点
  • 贡献值0点
  • 好评度55点
  • 原创分1分
  • 专家分2分
15楼#
发布于:2007-02-02 14:36
可是我的是pxa270的CPU,要怎么改呀
waterman
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2007-02-02
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-02-05 11:33
zhengshijie大虾:

我有些疑问:按你所说,FAL可以自动识别是large page,然后再remap 到sector (512B),
但是我按照你说的走了一遍,结果WINCE的storage manager始终是把flash Disk的sector 看成2KB大小。

 问题如下:

   1。如我们所知,FAL+FMD will package as DISK Driver(FlashDrv.dll), in the diver,
       it will provide 如下接口:DISK_Init,DISK_GetInfo.
        文件系统会得知flash disk的sector 的大小。
     所以,如果要将large page 做成512B sector size,是否要修改FAL

   2. 如果不需要修改FAL,那么是否需要其他配置。
  3. 你的驱动没有提到ECC,nand flash很容易出错,这个东东怎么办?
  4.在你的驱动中,在读一个FMD_ReadSector1G08,如果读多个sector一次,那么sectorinfo可能会被覆盖。

  最后明确一下,将large page (2KB)nand flash安装上去,我已经做成功,只需要将FMD的驱动按照large page flash driver修改一下即可,然后解决一下文件系统的一些小问题(wince 4.2,文件系统有兼容性问题在2KB sector)。所以我只能将2KB page size 安装成2KB sector。
  但是我无法做到将2KB page 配置成 512B,而不损失空间,或者修改FAL,或者违反flash的写特性(large page nand flash,一个物理页最多能写8次)

 如果能及时回答将非常,谢谢,大家可以多交流。
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
17楼#
发布于:2007-02-05 16:48
to waterman:
谢谢指出问题4,是我的coding错误,可以参考FMD_ReadSector1208()改正过来。
问题3,实际应用过程中,我并没有碰到出错,所以我把ECC去掉了,你认为有必要就自己加好了。
问题1,你想做成512,也无需修改FAL,你也改不了FAL,你没有它的源码。
你看到存储管理里是2K的,有什么疑问吗?它显示的是你的FLASH信息。
你最后的疑问是什么呢?因为没看过你的代码不知道你到底怎么做的。我的驱动已经验证过了是可行的。
hshowby
驱动牛犊
驱动牛犊
  • 注册日期2007-02-14
  • 最后登录2007-02-14
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-02-14 15:36
sjf2440.exe里没有1G08的信号,需要自己修改源码,要修改的东西也不是很多,我也是刚改好!
dingdehong
驱动牛犊
驱动牛犊
  • 注册日期2004-12-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望25点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-03-02 09:53
改128M Nand后的问题
首先非常感谢郑世杰的无私奉献,我的系统终于可以启动了.
改128M Nand后的问题如下:
1   Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
SDMMC config set rGPGCON: 286a5aa
OEMInit Done...
Sp=ffffc7cc  
系统启动到这里有时就不动了,是什么原因
2  USB同步不了了,以前64M的时候是可以的,想不能换大页Flash后和USB有何关联?
交流促进步dingdehong@126.com QQ:121133529 Tel:13543009985
上一页
游客

返回顶部