WinCE 5.0下面SD卡驱动的开发。这是我做的第一个项目,当时做这个项目花费了相当的时间和精力,搞的我精疲力尽。几乎可以说当时对WinCE一点都不懂。也不知道从何处下手,就东看西看。东改西改,改的是一塌糊涂。幸好老板和老大都比较宽容,给了我充裕的时间和支持,将自己有关SD卡在WinCE 5。0下面的驱动理解的点滴给记录下来,希望能够对别人有所帮助。 目前WinCE下面的驱动主要有两种架构,一种就是WinCE自带的三层架构(Host,BUS,Client)。另外就是直接将驱动写成Block驱动的形式,分真正的驱动和一个专门用来Loader的程序。本人用的微软自带的三层架构,下面将较为详细的介绍一下这种架构,以及如何在这种架构下来实现SD卡驱动。(建议大家做SD卡驱动前先将SD card的Spec看一下(下载SDSPEC),知道其的一些特性,主要包括初始化流程,那些命令是干什么的。还有就是有那些内部寄存器。这些寄存器又是又通过那些命令获得的,了解了这些才能再以后能有个好的调试。)有关SD卡的一些规格(网上一大堆到处都又)本文将不做介绍,主要介绍其在WinCE下面的实现。WinCE下面SD卡的架构如下图所示:
如图所示:最下面的是你的H/W部分,其中SD Host Controller是你的SD...

>> 阅读全文

今天在网上看了看SD 卡方面的 资料,结合自己的理解 整理如下.
有时间我去做个实验验证一下.
0.SD驱动有两种架构,一为INTEL的,一为MS的,你如果用的MS的Public自带的代码,那就看注册表中HKEY_LOCAL_MACHINE\Drivers\BuiltIn项下的host,bus项设置好了没有,如果OK,那就检查HKEY_LOCAL_MACHINE\Drivers\Active下host,bus两层驱动跑起来没有.
逻辑上主要是:
SDHC_SC2410.dll是最底层,负责具体的发命令什么的,SDBus.dll是中间层,负责整合命令和管理,这两个在HKEY_LOCAL_MACHINE\Drivers\BuiltIn下,系统启动时就加载,SDMemory.dll是最高层.正常工作时,一旦卡插入,SDHC_SC2410.dll的IST检测到中断,通知SDBus.dll做初始化工作,OK后SDBus.dll加载SDMemory.dll,系统才能识别卡.
1.WINCE 下 SD驱动程序包括 三部分
HOST 硬件地层部分 对应文件一般是SDHC_SC2410.dll
BUS 中间逻辑命令层 SDBUS.DLL
CLIENT 上层 SDMEMORY.DLL
SD 卡驱动是表准驱动,一般不需要独立去写.
2.在WINCE 项目中添加SD 卡的相关的组建,例如:
CATALOG->device drivers->SDIO-&g...

>> 阅读全文

首先解释下这两个东东
The RAM on a Windows CE–based device is divided into two areas: the object store and the program memory.
The object store resembles a permanent, virtual RAM disk. Data in the object store is retained when you suspend or perform a soft reset operation on the system. Devices typically have a backup power supply for the RAM to preserve data if the main power supply is interrupted temporarily. When operation resumes, the system looks for a previously created object store in RAM and uses it, if one is found. Devices that do not have battery-backed RAM can use the hive-based registry to preserve data during multiple boot processes.
The program memory consists of the remaining RAM. Program memory works like the RAM in personal computers — it stores the heaps and stacks for the applications that are running.
我承认我很懒,上面一段话的URL是ms-help://MS.WindowsCE.500/wcecoreos5/html/wce50conMemoryArchitecture.htm
>> 阅读全文

Platform Builder 5.0 编译过程中,提示"Warning: Image exceeds specified memory size by 90124 bytes and may not run.",这样一般也会生成多个NK.nbx(NK.nb0,NK.nb1,...),可能会导致你的镜像跑不起来,这样看你的配置而定了:比如你是要下载NK.bin还是NK.nb0咯。
参见了网上一些帖子:
关于NK.nb0,NK.nb1:nbx的文件大小是一定的,就是说不过生成几个,每个都是一样大,最后一个正常会有很多0在后面,可以用UE等工具看一下。 对于文件的大小设置建议参考bin文件,最后生成的bin文件大小基本上就接近你需要的大小了,建议稍微大一点。
要考虑定制的系统添加的组件的多少,越多最后生成的文件有效数据就越大。当有效数据超过你定义的大小,那么就会出现你这样的情况。
一般的解决方法是:1. 刪減不必要的component2. 重新規劃config.bib,RAMIMAGE的大小
而问题的终结解决方法是:.%_WINCEROOT%\PLATFORM\\FILES下的config.bib修改MEMORY节中关于NK存放空间的大小,以及CONFIG节中ROMSIZE的大小(具体数值应和在MEMORY节中关于NK存放空间的大小),然后要重新Sysgen一次。
注意,如果不想重新...

>> 阅读全文

我会在blog中将开发CE5.0时遇到的问题总结出来,供有遇到相同问题的朋友参考。因为我在解决这些问题时,也是参考了网上很多朋友的文章或帖子,在这里对他们表示一下感谢呵呵。 我对问题的解释如果有不对的地方还请高手指正,免得误人子弟哈。
st1\:*{behavior:url(#ieooui) }
1. 如何加入或删除BSP中的模块。
这里以display驱动为例来讲解。
BSP的根目录下有一个$(platform name).bat文件。里面定义了一系列的开关,比如:
set BSP_NODISPLAY=

set BSP_NODISPLAY=1
我们可以在workspace下的platform.bib中可以看到有这么一段定义:
IF BSP_NODISPLAY !
S3C2440DISP.dll $(_FLATRELEASEDIR)\S3C2440DISP.dll NK SH
ENDIF BSP_NODISPLAY !
因此,如果我们在.bat中定义了BSP_NODISPLAY为1,则S3C2440DISP.dll不会被加入到NK中。反之,则在生成NK的时候需要加入S3C2440DISP.dll。
而如何将display驱动加入编译列表呢。这就要看WINCE500\PLATFORM\$(platform name)\Src\Drivers下的dirs文件了。文件里枚举了要参与编译的...

>> 阅读全文

“IT”这个英文缩写,原本在人们脑中总是条件反射地与“精英”二字联系在一起。标准的形象应该是“西装革履,背着笔记本电脑到处跑,天天加班,高投入却也高收入”。曾经听人说:“想赚钱,就来做IT吧;想减肥,也来做IT吧。
IT人的高收入和高负荷劳动是形成共识的
可如今,人们渐渐忘却了“精英”,而是自然而然把“民工”两个字跟在了“IT”后面。不知道什么时候开始,IT业初级程序员的工作性质与进城打工的“农民工”变得如此惊人的相似。很多IT公司的高管认为“人便宜,就是要用到坏掉,然后再找更便宜、更年轻的”,于是,初级程序员们与农民工一样被剥削,一样日复一日做着没什么太大技术含量的枯燥工作,一样拿着微薄的收入,有上顿没下顿,买不了房开不了车。企业也不愿意付出培训成本,使得初级PG的素质很难提高,无法在现有的岗位上看到未来,就只能频繁换工作,却始终找不到自己的位置,继续重复着“IT民工”的劳动。
想要在IT这条道路上好好向前走,当然不能忽视最初“民工型”的编码工作,但是,想要不做“IT民工”,就要进一步进修,把自己在编码技术和项目管理技能等各方面“武装到牙齿”,才能在这个用光速更新换代的行...

>> 阅读全文

在Platform Builder 5.0 里,设计模板中的“Mobile Handheld”中,在"Application & Media"向导中,有一项为"Quarter VGA Resources - Portrait Mode",右边的注解为:支持系统组件使用QVGA资源以驱动240×320分辨率的屏幕。这一项是在“Mobile Handheld”模板中所特有的。 QVGA即"Quarter VGA"。顾名思义即VGA的四分之一尺寸,亦即在液晶屏幕(LCD)上输出的分辨率是240×320像素。QVGA支持屏幕旋转,可以开发出相应的程序,以显示旋转90°、180°、270°屏幕位置。由HandEra公司发布。多用于手持/移动设备VGA机型的屏幕分辨率和一般普通PDA不同,分辨率是480x640(即由横向480个点,纵向640个点组成的屏幕,这个点称为象素点),但是VGA屏幕尺寸又和QVGA的屏幕尺寸基本相同,也就是说,同样大小的面积,VGA屏幕能显示的点数就要比QVGA的多。那么VGA的象素点就要做的更小,所以看上去VGA屏幕的图像要比普通QVGA屏幕精细的多。 这就是说:QVGA液晶技术,就是在液晶屏幕上输出的分辨率是240×320的液晶输出方式。这个分辨率其实和屏幕本身的大小并没有关系。比如说,如果2.1英寸液晶显示屏幕可以显示240×320...

>> 阅读全文

笔者的淘宝店铺,欢迎光临指导、购物:
http://shop36763580.taobao.com/

>> 阅读全文