阅读:29306回复:72
【原创】2K大页面NAND FLASH的WINCE5.0/4.2下的驱动源码。
就在上周我在为开发2K大页面驱动而苦恼的时候,周末终于全部搞定了,并且做了较好的改进,前后花了我3天3夜的时间,现在直接把最终的成果直接奉献给大家。
能跟据FLASH ID识别自动注册相应FLASH的访问接口,目前代码上实现了K9S1208,K9F1G08,K9F2G08,K9F4G08,K9K8G08,K9F2G16的访问接口,实测过K9S1208,K9F1G08的功能,验证结果证明,该驱动可以识别出K9S1208,K9F1G08,自动加载相应的芯片访问接口,支持文件系统访问。通过查看参考K9F2G08/K9F4G08/K9K8G08的芯片资料,发现它们的普通命令接口和K9F1G08是一样的,只是块个数不一样而已,行地址是3个周期的,比K9F1G08多一个,所以把它们也支持了,但没有条件实测,理论上应该是行得通的,有相应硬件的人使用该驱动别忘了告诉我结果,有问题请联系我。请大家下载回去使用的时候看一下readme.txt里面有我的联系方式。 各位可以把使用情况,出现什么问题告诉我,让我可以改进和完善它。 |
|
最新喜欢:linuc |
沙发#
发布于:2007-01-15 20:52
呵呵,支持!多谢了!
|
|
板凳#
发布于:2007-01-16 10:30
疯狂的顶一下
|
|
地板#
发布于: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();初始化会失败。 |
|
地下室#
发布于: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改了就可以了。 |
|
5楼#
发布于:2007-01-16 14:39
虽然没用到,但是对无私的人还是顶一下,好贴~~~~~~~
|
|
6楼#
发布于:2007-01-22 13:34
刚在找这方面资料 强烈地支持
有什么使用的问题或者效果会和楼主联系的 |
|
7楼#
发布于:2007-01-22 23:14
thanks
|
|
8楼#
发布于:2007-01-23 18:28
好人!多谢!
|
|
9楼#
发布于:2007-01-24 09:30
多谢了!
|
|
10楼#
发布于:2007-01-24 09:30
多谢了!
|
|
11楼#
发布于:2007-01-27 13:02
看看!
|
|
12楼#
发布于:2007-01-29 10:21
多谢!
|
|
13楼#
发布于:2007-01-31 16:15
我是用的2440,只是不知用什么软件才能将这些程序下载到Flash里去
|
|
14楼#
发布于:2007-01-31 17:17
我用压缩包里的sjf2440.exe 测试k9f1g08却无法识别,提示无法读出flash id,不知为何,有没有人遇到这个问题
|
|
15楼#
发布于:2007-02-02 14:36
可是我的是pxa270的CPU,要怎么改呀
|
|
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次) 如果能及时回答将非常,谢谢,大家可以多交流。 |
|
17楼#
发布于:2007-02-05 16:48
to waterman:
谢谢指出问题4,是我的coding错误,可以参考FMD_ReadSector1208()改正过来。 问题3,实际应用过程中,我并没有碰到出错,所以我把ECC去掉了,你认为有必要就自己加好了。 问题1,你想做成512,也无需修改FAL,你也改不了FAL,你没有它的源码。 你看到存储管理里是2K的,有什么疑问吗?它显示的是你的FLASH信息。 你最后的疑问是什么呢?因为没看过你的代码不知道你到底怎么做的。我的驱动已经验证过了是可行的。 |
|
18楼#
发布于:2007-02-14 15:36
sjf2440.exe里没有1G08的信号,需要自己修改源码,要修改的东西也不是很多,我也是刚改好!
|
|
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有何关联? |
|
|
上一页
下一页