有谁搞过WINCE 6.0 R2下面新的MDD+PDD+FMDj架构的emunandtool flash驱动

君,已阅读到文档的结尾了呢~~
WinCE中nandflash驱动开发介绍..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
WinCE中nandflash驱动开发介绍
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口当前位置: >>
>> 浏览文章
WinCE中nandflash驱动开发介绍
文章来源:不详 作者:佚名
先来谈一下flash,flash是一种非易失存储器,一般flash存储设备分为Nandflash和Norflash。这两种flash各有优缺点。在读写速度上,norflash的读速度快一些,nandflash的写速度会快一些。Nandflash的容量一般都比Norflash大很多,而且相比价格比较便宜。但是Norflash支持XIP,而nandflash不支持,而且Nandflash可能有坏块。相关的比较,网上很多文章都有介绍,这里就说这么多了。
这里介绍nandflash驱动,在WinCE中,有专门针对flash存储设备驱动的支持,一般传统采用FAL+FMD的架构。在WinCE最新的版本中,也就是Windows CE6.0 R2中,还支持MDD+PDD的架构。在FAL+FMD架构中,FAL层由微软来实现,我们需要实现FMD层的相关接口函数。在MDD+PDD的架构中,MDD替换了原来架构中的FAL,而PDD相当于原来的FMD,只要实现PDD层就可以了。如果你的系统已经升级到WinCE6.0 R2,那么你应该可以在\WINCE600\Public\COMMON\OAK\DRIVERS目录下面找到这两种架构驱动的源代码。 由于MDD+PDD的架构在WinCE6.0 R2中才有支持,本人也没有实现过。所以这里只介绍基于FAL+FMD架构下,nandflash驱动的开发,这也是目前大家都采用的开发flash驱动的架构。
如上面所说,我们需要实现FMD层的相关接口,下面来介绍一下各个接口函数:1. PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut): 这个是Flash设备的初始化函数。在WinCE启动的时候,要加载Flash驱动时,首先调用这个函数对flash设备进行初始化。如果你的系统中有nandflash的controller,那么你需要在这里对你的nandflash controller进行初始化。如果没有的话,你需要针对你的硬件设计进行相关的片选,时序等进行配置。返回一个handle表示成功,这个handle将被FMD_Deinit(..)函数用到,如果返回NULL表示失败。
2. BOOL FMD_Deinit(PVOID hFMD): 这个函数在nandflash驱动卸载的时候被调用,参数就是FMD_Init函数返回的Handle.一般在这个函数里面,你可以释放一些用到的资源,然后关闭nandflash controller。
3. BOOL FMD_ReadSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors): 这个函数用于读nandflash的一个扇区。对于nandflash来说,分大page和小page,大page是2048个bytes一页,小page是512个bytes一页。所以大page每个扇区有2048 bytes,小page每个扇区有512 bytes。startSectorAddr: nandflash物理扇区的起始地址,对于nandflash来说,就是nandflash中从哪个page开始。pSectorBuff:扇区数据buffer,从nandflash中读出的每一个扇区的数据都存放在这个buffer中。pSectorInfoBuff:扇区信息buffer,一般每个扇区的信息会被保存在nandflash的带外数据中,针对小page,带外数据有16 bytes,大page有64 bytes。从nandflash的带外数据将该扇区的相关信息读出来,存放在这个buffer中。dwNumSectors:读取多少个扇区,对于nandflash来说相当于读取多少个page。
4. BOOL FMD_WriteSector(SECTOR_ADDR
中国高校自动化网 All Rights Reserved.
信息产业部备案号:Tomcat内存储器溢出的三种情况及处理方法剖析_wince6.0的可不可以直接构建MBR 区焚入Flash实现分区_[讨论]Web方式上服务器消息的实时读取__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
Tomcat内存储器溢出的三种情况及处理方法剖析
wince6.0的可不可以直接构建MBR 区焚入Flash实现分区
[讨论]Web方式上服务器消息的实时读取
Tomcat内存储器溢出的三种情况及处理方法剖析
Tomcat内存溢出的三种情况及处理方法剖析Tomcat内存溢出的原由
在生产环境中tomcat内存配置不好很简单出现内存溢出。造成内存原由是不一样的,当然处理方式也不一样。 这里根据平时遇到的情况和相关 资料执行 一个总结。多见的通常会有下面三种情况: 1.OutOfMemoryError: Java heap space 2.OutOfMemoryError: PermGen space 3.OutOfMemoryError: unable to create new native thread. Tomcat内存溢出处理方案 对于前两种情况,在使用本身没有内存泄露的情况下可以用配置 tomcat jvm参数来处理。(-Xms -Xmx -XX:PermSize
-XX:Maxp ermSize) 结尾一种可能须要调整操作系统和tomcat jvm参数同时调整才能达到目的。 第一种:是堆溢出。 在JVM中假如 98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。 没有内存泄露的情况下,调整-Xms -Xmx参数可以处理。 -Xms:原始堆大小 -Xmx:最大堆大小 但堆的大小受下面三方面影响: 1.相关 操作系统的数据模型(32-bt还是64-bit)限定;(32位系统下,通常限定在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试 1612M,64为操作系统对内存无限定。) 2.系统的可用虚拟内存限定; 3.系统的可用物理内存限定。 堆的大小可以运用 java -Xmx***M
version 命令来测试。支持的话会出现jdk的版本号,不支持会报错。 -Xms -Xmx通常配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m 第二种:长久保存区域溢出 PermGen space的全称是Permanent Generation space,是指内存的长久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space执行 清理,所以假如你的APP会LOAD很多CLASS的话,就很可能出现PermGen space不正确。这种不正确多见在web服务器对JSP执行 pre compile的时候。但目前的hibernate和spring项目中也很简单出现这样的疑问。/topic/80620?page=1 的帖子有探讨的这个疑问。可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,导致内存溢出。 这一个通常是加大-XX:PermSize
-XX:Maxp ermSize 来处理疑问。 -XX:PermSize 长久保存区域原始大小 -XX:PermSize 长久保存区域原始最大值 这通常结合第一条运用,比如 set JAVA_OPTS= -Xms1024m -Xmx1024m
-XX:PermSize=128M -XX:PermSize=256M有一点须要留心:java -Xmx***M
version 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的 和 比如系统支持最大的jvm堆大小事1.5G,那
-XX:PermSize=768M 是无法 运行的。 第三种:无法 建立新的线程。 这种现象比较少见,也比较奇怪,首要是和jvm与系统内存的比例相关。 这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发觉,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述不正确发生的可能性就越大。 产生这种现象的原由如下(从这个blog中明白到原由:/hexiong/blog/item/16dc9e518fb10cc.html): 每一个32位的进程最多可以运用 2G的可用内存,因为另外2G被操作系统保存。这里假设运用 1.5G给JVM,那么还余下500M可用内存。这500M内存中的一部分必须用于系统dll的加载,那么真实剩下的也许只有400M,现在重要的地点出现了:当你运用 Java建立一个线程,在JVM的内存里也会建立一个Thread对象,但是同时也会在操作系统里建立一个真实的物理线程(参考JVM规范),操作系统会在余下的400兆内存里建立这个物理线程,而不是在JVM的1500M的内存堆里建立。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每线程,因此,在余下400M的可用内存里边咱们最多也只能建立 400个可用线程。 这样结论就出来了,要想建立更多的线程,你必须降低分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。 给出一个相关能够建立线程的最大个数的估算公式: (Maxp rocessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads 对于jdk1.5而言,假设操作系统保存 120M内存: 1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads 1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads 在2000/xp /2003的boot.ini里头有一个启动选项,好像是:/PAE /3G ,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。那样应该可以让JVM建立更多的线程。 因此这种情况须要结合操作系统执行 相关 调整。 因此:咱们须要结合不同情况对tomcat内存分配执行 不同的诊断才能从根本上处理疑问。 以上就是针对Tomcat内存溢出的几种处理方案。
wince6.0的可不可以直接构建MBR 区焚入Flash实现分区
wince6.0的可不可以直接构建MBR 区烧入Flash实现分区
这两天在研究wince下的NandFlash分区的问题,我们的系统没有在Eboot下进行分区,在烧完NK第一次启动后,WINCE自动进行文件管理,无盘符,但是所有剩余的空间被当成了一个区来管理。我在控制面板的存储管理器下面可以实现分区,并显示成盘符,这是烧好后手动分区。
研究了下网上关于Eboot下的分区介绍,突然有个想法,因为查到分区其实就是构建了个MBR的分区表,那么如果根据MBR的结构,可不可以直接构建一个需要的MBR表,然后直接烧录上FLASH上的某个指定的区块,就是先WinCE在启动的时候直接读取实现分区?
因为在网上看到MBR是一个512字节的数据结构,只要将4个分区项的参数填入,按理不是就可以直接实现分区的嘛,只是我试了下,貌似无效,打开存储管理器,Flash容量大小变小了一点点(因为烧写的数据可能不对,这个区块被认为有系统数据,这个区块不被文件系统管理),其它的仍是一样的,还是一个完整的数据区。
不知道这种思路有没有问题,谢谢!
另外关于MBR的CHS怎么理解,因为按照网上的说法,每个分区项有16个字节,第2,3,4三个字节表示的是起始的扇区号,第2字节代表磁头,第3字节低6位代表扇区号,第3字节高2位和第4字节代表柱面号,扇区号6个位,因此范围为0-63,柱面号10个位,范围为0-1023,我的FLASH是三星的256MByte的,分为2048个Block,每个Block有64个Sector,那么这个Block、sector怎么与磁头、柱面和扇区号对应呢?------解决方案--------------------可以的,我就干过类似的。其实烧系统的时候就需要构建分区表,你参考对应的代码就可以了。------解决方案--------------------就看你用的是flash驱动的什么架构,如果是FAL的老架构的话,你是可以直接构建MBR的,如果是新架构MDD+PDD那你就得研究了,不过基本很难
[讨论]Web方式上服务器消息的实时读取
[讨论]Web方式下服务器消息的实时读取说老实话,这也不是什么新鲜的事物,只是当自己要来实现的时候总会有一些顾虑,所以拿出来先和各位高手切磋切磋。在Web上抓取服务器消息的通常做法是用Ajax或隐藏帧定期到服务器上取消息,但过于频繁的刷新会增加服务器的资源消耗,为了尽可能减小这种消耗,通常我们都会把刷新的时间间隔设置得比较大。但这样一来,消息的获取就有一定的滞后,在对消息要求很实时的情况下,这显然是不合适的。比如我们在使用微博的时候会有一种体会,当有人@你或给你回复的时候,我们可以立刻收到通知,甚至在进行私信的聊天的时候,还能知道对方正在输入消息。我目前在考虑一个系统的架构,这个系统采用B/S+C/S的混合模式,而消息在这个系统中不仅仅是给用户传递信息,更重要的是它还起到了协调客户端工作的功能,因此,对消息的实时性要求很高。有些人可能会说可以采用Socket的办法让客户端直接连接服务器,但我不打算这样做,原因很简单,因为浏览器不能直接使用Socket(至少目前还不能),如果用两个体制的话会把系统弄得太复杂。我现在的思路是这样的,仍旧采用客户端(或浏览器)刷新服务器获取消息的办法,但为了达到实时性的要求,以及减少服务器因为开启TCP连接消耗的目的,获取消息的请求采用一个较长时间的HTTP连接。具体做法是这样:客户端先发送一个异步的HTTP请求,服务器检查有没有新消息,如果有就直接返回,如果没有就等30秒,期间不断检查有没有消息,有就立刻返回。客户端收到消息后进行处理,同时在5秒后重新发起消息请求。流程图如下:由于在读取消息的时候会保持了一个较长时间的HTTP连接,虽然可以减少服务器开启TCP的消耗,但可能会同时有数十个TCP连接保持在服务器上(服务器操作系统Windows Server 2003 Standard,在线人数大约为50-60)。所以,在这里发个帖请大家讨论一下这个方案的可行性,或者你有更好的解决办法,请不吝赐教,谢谢!------解决方案--------------------
图画的很清晰,不错啊。。。。。。。可以适当再延长Http的连接时间,许会效果会更好。
------解决方案--------------------为什么不直接用socket?
------解决方案--------------------
WebSocket不行?
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:后使用快捷导航没有帐号?
查看: 1575|回复: 7
WinCE6.0 R2有关NANDFlash的驱动架构Mdd+Pdd是否支持XIP模式?
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
各位朋友,
& & 请问,是否有人做过这方面的工作?做过的达人,WinCE6.0 R2有关NANDFlash的驱动架构Mdd+Pdd是否支持XIP模式?如果支持,需要做哪些工作?可否指教一二?万分感谢!
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
XIP or BinFS??
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
终于看到有人用R2了
一样的,FAL上层套用MDD,实际没变。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
引用 1 楼 paul_chao 的回复:
XIP or BinFS??
就是多个bin文件:XIPKERNEL.bin,nk.bin,chan.bin等,生成xip.bin,然后把该bin文件改名为nk.bin,烧录到nandflash,启动加载OS有问题。就是flashmdd.dll和flashpart.dll都加载了,但是k.coredll.dll发生异常。
这个和BinFS有关系吗?
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
引用 2 楼 clementzhao 的回复:
终于看到有人用R2了
一样的,FAL上层套用MDD,实际没变。
在非多bin的情况下,已经成功了,但是现在在多bin(XIPKERNEL)模式下,就发生问题了。你有做过类似的工作吗?如果有的话,可否赐教,谢谢!
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
关键看你用到nandflash是否mlc
如果非mlc,又用了mbin,而coredll发生异常,一般是写入数据和原始数据不一致的问题。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
引用 5 楼 clementzhao 的回复:
关键看你用到nandflash是否mlc
如果非mlc,又用了mbin,而coredll发生异常,一般是写入数据和原始数据不一致的问题。
这个问题已经解决了,谢谢赐教!
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
现在的问题是:
系统似乎已经开始运行了,有些打印信息可以持续地打出来,好像已经进入桌面了,但是由于显示驱动没有加载,所以桌面没有显示出来。当然,电池驱动等也没有加载起来。
有没有高人可以赐教啊?谢谢!
Powered by
逛了这许久,何不进去瞧瞧?wince6.0 nandflash驱动 FAL+FMD
[问题点数:88分,结帖人fjx1982441]
wince6.0 nandflash驱动 FAL+FMD
[问题点数:88分,结帖人fjx1982441]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2007年8月 硬件/嵌入开发大版内专家分月排行榜第一
2007年11月 硬件/嵌入开发大版内专家分月排行榜第二
2009年10月 硬件/嵌入开发大版内专家分月排行榜第二2009年4月 硬件/嵌入开发大版内专家分月排行榜第二2009年3月 硬件/嵌入开发大版内专家分月排行榜第二2009年2月 硬件/嵌入开发大版内专家分月排行榜第二2008年12月 硬件/嵌入开发大版内专家分月排行榜第二
2009年7月 硬件/嵌入开发大版内专家分月排行榜第三2009年6月 硬件/嵌入开发大版内专家分月排行榜第三2009年5月 硬件/嵌入开发大版内专家分月排行榜第三
2009年10月 硬件/嵌入开发大版内专家分月排行榜第二2009年4月 硬件/嵌入开发大版内专家分月排行榜第二2009年3月 硬件/嵌入开发大版内专家分月排行榜第二2009年2月 硬件/嵌入开发大版内专家分月排行榜第二2008年12月 硬件/嵌入开发大版内专家分月排行榜第二
2009年7月 硬件/嵌入开发大版内专家分月排行榜第三2009年6月 硬件/嵌入开发大版内专家分月排行榜第三2009年5月 硬件/嵌入开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 wince nandflash 的文章

 

随机推荐