WinCE驱动开发流程
wince驱动开发学习笔记嵌入式技术/walking_man 发表于2007-03-20, 20:03首先是wince驱动的分类问题。
按照书上讲的说CE下驱动分成单体驱动和分层驱动,而看到另一种说法是本机驱动和流式驱动。
经过microsun大哥的指点,把这两种分类法分开了。
在这里引用一下:“单体与分层只是从代码的形式上做的分类.分层驱动代码上分为PD D与MDD,一般的微软已经实现了MDD,可能也实现了PDD,我们只需要对PDD做些修改就能使用,比如音频的驱动,显示的驱动。
单层驱动是把PDD与MDD写在一起,没有做严格的区分,通常这种驱动比较简单,比如:ATADISK。
至于本地驱动和流式驱动是从驱动与系统其它模块(调用者)的接口形式上做的分类.其实,本地驱动这个名称不大恰当,可能叫专用驱动或其它名字更为合适.它是指调用它的模块给它有特定的接口,比如电源驱动和通用LED驱动。
而串口,网卡等就是流接口驱动程序. 所以,一个驱动程序可以是单体的流式驱动,例如:ATADISK.也可以是分层的流式: 如OHCI ”按照我的理解,单体和分层是驱动实现方式上的分类,而本地和流式则是驱动模型上的分类,所谓本地驱动就是操作系统有保留专门的接口,所谓流式是指编写的DLL文件里可以导出各种流式接口函数。
第二点:驱动的功能属性。
设备驱动程序是操作系统内核和硬件的接口,操作系统定义了一组标准的接口,编写驱动的过程也就是实现这些接口。
从应用程序到具体硬件间有如下这些环节起作用:应用程序-调用OS函数-操作系统-驱动接口-驱动程序-硬件操作函数-硬件。
在wince里驱动都以用户态的DLL存在,需要通过进程加载到slot里。
共有三类系统进程用来加载:Device.exe,GWES.exe,File Sys.exe.绝大多数设备驱动都是通过Device.exe加载的。
需要注意的是,不同的OS保留的设备驱动接口是不一样的,如桌面windows 和wince就不同。
第三点:wince下设备的初始化分为两个阶段:Device.exe的初始化;外设的枚举和加载。
其流程是:上电-启动bootloader-启动N K-启动注册表init键(Device.exe启动)-初始化数据结构,I/O,电源管理等-加载BusEnum.dll(总线枚举器)-枚举注册表下Driver/buil din的所有子键。
这里的枚举过程就是循环调用ActivateDeviceEx()函数加载驱动的过程。
在OS启动完毕后,我们可以用PB的Remot e Registry Tool查看H_L_M/drivers/active包含的子键,看哪些驱动随启动而加载。
第四点:流接口驱动的概念。
暴露流式接口函数的驱动即是流驱动,它把外设抽象成一个文件。
过程是:应用程序使用文件API 对设备进行访问,OS接受API调用FileSys.exe,转到device.exe,调用流接口,与硬件交互。
所谓流接口函数有十个,包括XXX_Init、XXX_Deinit、XXX_Open、XXX_Close、XXX_Read、XXX_Write、XXX_P owerUp、XXX_PowerDown、XXX_Seek、XXX_IOControl,在wince5.0中增加le了XXX_PreClose,XXX_PreDeinit.而我们在应用程序里对应的文件A PI有CreateFile、DeviceIoControl、 ReadFile、 WriteFile,CloseHandle,SetFilePointer.第五点:编写流驱动的步骤。
有两种实现途径:1。
写DLL,做成Project,加入到OS里。
2。
改BSP,把驱动写在BSP里,再选择那个BSP做OS。
第一种方法步骤是在PB中新建一个DLL项目,编写一些输入函数,寄存器,外设的声明,写DLLENTRY函数;实现流接口函数;编写DLL的导出函数文件.DEF;为驱动程序写入注册表项,还需要修改bib文件。
第二种方法就是在platform/BSP/dr ivers下新建一个目录,然后在drivers目录中的dirs文件中加入新建的目录名。
在新建的目录下,新建你的源代码文件,在其中实现DL L函数。
新建名称分别为sources, makefile, ***.def的文件;修改pl atform.reg和p latform.bib文件。
几个小知识点:(1)应用程序可以通过ActivateDeviceEx()加载设备驱动;(2)注册表里的设备前缀Prefix项应该用三个字母表示,驱动的索引是I ndex.如果应用程序用CreateFile()来打开驱动程序时,第一个参数应该是这个Prefix项加上Index的值。
(3)驱动程序中要用DMA,需要为其保留一段物理空间,就要修改config.bib给驱动程序共享数据用。
(4)查看驱动是否加载,可以用远程工具看注册表buildin/a ctive键,或者是看device.exe的进程是否包含DLL文件。
(5)DL L的入口函数名称默认是DllMain,但我们可以改成别的名称,在SOU RCES文件中加入这样一行,DLLENTRY=ABCD入口函数就被改成了ABCD,我们就应该实现名为ABCD的函数.(6)感觉写驱动无从下手的时候,可以尝试看现有的代码与平台无关驱动源码位于public\common\OAK\Drivers与平台相关驱动platform\{bsp}\srv\Drivers基础知识:1)系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。
设备驱动程序为应用程序屏蔽了硬件细节,在应用程序看来硬件只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。
设备驱动是内核的一部分。
2)驱动程序完成以下功能:——对设备初始化和释放;——把数据从内核传送到硬件和从硬件读取数据;——读取应用程序传送给设备文件的数据和回送应用程序请求的数据;——检测和处理设备出现的错误。
3)上层应用程序运行在用户模式(非特权模式,Ring 3),代码被严格约束执行。
如不能执行硬件IO指令。
所有的这些被阻止的操作如果想运行必须通过陷阱门来请求操作系统内核。
4)操作系统内核运行在内核模式(特权模式,Ring 0),可以执行所有有效的CPU指令。
包括IO操作,可访问任何内存区。
5)整个硬件系统资源在驱动程序面前是赤裸裸的,驱动可以使用所有系统资源,编写驱动程序时我们必须格外小心驱动代码的边界条件,确保它们不会损坏整个操作系统。
2、Windows支持的驱动:1)虚拟设备驱动程序(Virtual Device Driver):Windows3.1(Windows95/98/Me)2)内核模式驱动程序(Kernel Mode Driver):Windows NT3)Win32驱动程序模型(Win32 Driver Mode):从Windows98开始使用。
其中WDM是目前主流,然而在WinCE系统中,由于硬件资源有限和嵌入式系统的特点,对其的支持非常有限。
3、WinCE系统驱动简介:1)WinCE毕竟是一个嵌入式系统,有其自身的特殊性,为了提高运行效率,所有驱动皆为动态链接库,驱动实现中可以调用所有标准的API。
而在其他Windows系统中可能的驱动文件还有.vxd,.sys 和动态链接库。
2)WinCE驱动从结构上讲分为本地驱动(Native Driver)和流接口驱动(Stream Driver)。
——本地驱动主要用于低级、内置的设备。
实现它们的接口并不统一,而是针对不同类型的设备相应设计。
因此开发过程相对复杂,没有固定的模式,一般做法是通过移植、定制现有的驱动样例来实现。
——流接口驱动是最基本的一种驱动结构,它的接口是一组固定的流接口函数,具有很高的通用性,WinCE的所有驱动程序都可以通过这种方式来实现。
流接口驱动程序通过文件系统调用从设备管理器和应用程序接收命令。
该驱动程序封装了将这些命令转换为它所控制的设备上的适当操作所需的全部信息。
流接口驱动是动态链接库,由一个叫做设备管理程序的特殊应用程序加载、管理和卸载。
与本地驱动程序相比,所有流接口驱动程序使用同一组接口函数集,包括实现函数:XXX_Init、XXX_Deinit、XXX_Open、XXX_Close、XXX_Read、XXX_Write、XXX_PowerUp、XXX_PowerDown、XXX_Seek、XXX_IOControl,这些函数与硬件打交道。
用户函数:CreateFile、DeviceIoControl、ReadFile、WriteFile,这些函数方便用户使用驱动程序。
3)WinCE下驱动的加载方式:——通过GWES(Graphics, Windowing, and Events Subsystem):主要加载与显示和输入有关的驱动,如鼠标、键盘驱动等。
这些驱动一般为本地驱动。
——通过设备管理器:两种结构的驱动都加载,加载的本地驱动主要由PCMCIA HostController,USBHost Controller driver,主要是总线类的驱动;流接口驱动主要有音频驱动,串并口驱动。
——动态加载:前两者都是系统启动时加载的,动态加载则允许设备挂载上系统时将驱动调入内核,主要有外接板卡驱动,USB设备驱动等。
4、流接口驱动函数介绍:1)DWORD XXX_Init(LPCTSTR pContext, LPCVOID lpvBusContext);pContext:指向一个字符串,包含注册表中该流接口活动键值的路径lpvBusContext:该函数是驱动挂载后第一个被执行的。
主要负责完成对设备的初始化操作和驱动的安全性检查。
由ActiveDeviceEx通过设备管理器调用。
其返回值一般是一个数据结构指针,作为函数参数传递给其他流接口函数。
2)BOOL XXX_Deinit(DWORD hDeviceContext);hDeviceContext:XXX_Init的返回值。
整个驱动中最后执行。
用来停止和卸载设备。
由DeactivateDevice触发设备管理器调用。
成功返回TRUE。
3)DWORD XXX_Open(DWORD hDeviceContext, DWORD AccessCode , DWORD ShareMode);hDeviceContext:XXX_Init的返回值。
AccessCode:访问模式标志,读、写或其他。
ShareMode:驱动的共享方式标志。
打开设备,为后面的操作初始化数据就够,准备相应的资源。
应用程序通过CreateFile函数间接调用之。
基于WinCE的流接口驱动程序开发
是从 宏观上进 行了研究 , 如文献[ — 】 例 4 5 。本 文主要 结合 Ca — y
ma n开 发 板 上 L CD 显 示 屏 的 背光 控 制 流 接 口 驱 动 程 序 实 例 详
细分 析 了 WiC n E下 流 接 口驱 动 程 序 的 开 发 实 现 流 程 。
t a a i pl L h t sm e CD diply S s a ba l t tea cki sr m dr er u o c yman gh i r ns n a v PXA27 i gie t an y i a pl te 0 s vn o alss m y h pr e s oc s of W i o sr a nd ws CE te m it f c dr e , nera e v i r Key wor : ido CE.te dsW n ws sr am nera ier yman it f ce dr v , Ca PX A27 0
目前 , i Wn CE提 供 了 四 种 设 备 模 型 ,其 中 两 种 是 专 门 用 于 WiC 的模 型 , 外 两 种 外 部 模 型 来 自其 他 的 操 作 系统 。 基 于 nE 另 WiC 的 两 种 模 型 是 本 机 的 设 备 驱 动 程 序 和 流 接 口的 驱 动 程 nE 序 。 两种 外 部 模 型 用 于 通 用 串行 总 线 ( S 和 网 络 驱 动 器 接 口 U B) 标 准 ( DI)驱 动 程 序 。 其 中流 接 口驱 动 程 序 是 为 连 接 到 基 于 N S WjCE平 台 的外 围 设 备 而 设 计 的 , 些 外 围 设 备 包 括 S 卡 、 n 这 D 摄 像 头 、 印 机 等 。目前 针 对 流接 口驱 动 程序 的设 计 和 开 发 很 多 都 打
基于WinCE的I 2C驱动程序设计
IC总线遵从 同步 串行 传输 协议 , z 即各 位 串行 ( 一位
接一位) 发送 , 由时钟 (l k 线 指示读 数 据( aa 线 的时 c c) o dt)
刻 。每个数据包前有一 个地址 , 以指示 由哪个器件来接收
式 的特点是专为各种 具有严 格 资源限制 的硬件 系统 所设 计的 。为 了将操作 系统 和硬 件设备连接起 来 , 联系硬件 和
US B等接 口以及 S / D MMC卡 。
¥ C 4 0 处理器 的 1C总 线可 以处 于下 面 4种 模 3 21 微 2
式下: 主接 收模 式 、 主发送 模式 、 接收模 式 和从 发送 模 从
维普资讯
技 术 纵 横
基于 W 的 1 iC nE 2 0驱动程序设计
■ 中 国地 质 大学 王 小 芳 王 典 洪 陈 飞
将操作 系统和相应 硬件 设 备连 接 起 来, 写联 系硬 件 和 软件 的驱 动程 序 至 关重 要 。本 文主要 讨 论 在 编
.
_
WiC n E操作 系统下 , 如何设 计 实现 ¥ C 4 0芯片具有 Ic接 口的驱动程序 ; 3 21 。 详细介绍 Wi E下, n C 流驱 动 程序的编写方 法, 同时将驱动通过 Pafr B i e 编译进操作 系统 , l om u d r t l 最后用动 态链接库 的方式提供给 用
通信线通过上拉电阻被拉升至 +5V。在控制 系统 中的每 个集成电路 可 以通 过 一个 C S缓 冲 器来 读 每一 条线 MO
路, 也可 以通过一个栅 极 开路 的 F T管 将 每一条 线 的电 E 平下拉 。因此 , 对每个芯片来说 , 每条线既是输入线 , 又是
Apalis i.MX6 WinCE 开发入门说明书
Apalis i.MX6 WinCE开发入门Revision History17-Aug-2015 Rev. 0.2 V1.1A 添加SD卡槽图片及错误修正2-Feb-2016 Rev. 1.1 V1.1A 增加WinCE Image V1.0b6 说明6-Jun-2016 Rev. 1.3 V1.1A 增加社区信息15-Aug-2017 Rev. 1.5 V1.1A 更新V1.2版本image内容,修正错误目录1.开发设备及材料准备 (6)1.1硬件准备 (6)1.1.1Apalis i.MX6 系列核心板模块 (6)1.1.2Apalis 系列载板 (6)1.1.3基本配件(按需自行配置,不包含在标准载板购买包装内) (6)1.2软件准备 (6)2.开发平台配置 (7)2.1硬件连接框图 (7)2.2电源连接 (7)2.2.1Apalis 开发板 (7)2.2.2Ixora 载板 (7)2.3显示输出连接 (7)2.3.1Apalis 开发板 (7)2.3.2Ixora 载板 (8)2.4调试串口COMA连接 (8)2.4.1Apalis 开发板 (8)2.4.2Ixora载板 (8)2.4.3串口连接参数为115200/8/1/none (8)2.4.4USB 串口驱动请从下面FIDI网站下载 (8)2.5调试USB口(在需要时连接) (8)2.5.1Apalis 开发板 (8)2.5.2Ixora载板 (8)2.6USB键盘/鼠标连接 (9)2.6.1Apalis 开发板 (9)2.6.2Ixora 载板 (9)2.7网络连接 (9)2.7.1Apalis 开发板 (9)2.7.2Ixora 载板 (9)2.8上电启动,开关机和重启开关 (9)2.8.1Apalis 开发板 (9)2.8.2Ixora 载板 (9)2.9上述所涉及的连接器和开关布局图 (10)2.9.1Apalis 开发板 (10)3.修改显示分辨率 (11)3.1修改Eboot分辨率 (11)3.2修改WinCE显示分辨率 (11)3.3清除WinCE注册表恢复到默认状态 (11)4.远程桌面连接 (12)4.1ActiveSync (USB)方式连接 (12)4.2网络方式连接 (12)5.开发主机SDK部署,针对VS2008开发环境 (13)5.1安装VS2008 (13)5.2安装WINCE 6.0 SDK (13)5.3安装WINCE 7.0 SDK (13)5.4测试SDK (13)6.VS2008应用调试之USB调试 (14)7.VS2008应用调试之网络调试 (15)7.1连接 (15)7.2主机端VS2008设置 (15)7.3目标板设置(英文版WinCE7) (16)7.4目标板设置(中文版WinCE7) (16)7.5测试连接情况 (17)8.E-boot和OS image更新升级 (18)8.1关于ToradexApalis i.MX6模块的image更新 (18)8.2使用Toradex Easy Installer进行模块系统更新 (18)8.3Eboot损坏情况下进入恢复模式重新刷写Eboot和OS image (18)8.4Eboot正常情况下,升级Eboot 或者OS image (20)8.4.1如模块当前WinCE系统正常,建议首选进入系统后使用Update Tool来升级相关组件 (20)8.4.2如当前Eboot版本为V1.2以下版本并升级为V1.2及以上版本 (20)8.4.3如当前Eboot版本已经为V1.2及以上版本 (21)9.软硬件开发资源及Toradex开发者中心 (22)9.2载板硬件开发资料下载 (22)9.3WinCE软件image,BSP,SDK等资源下载 (22)9.4开发上手指南以及Lib库的使用说明文档 (22)9.5Toradex社区 (22)10.Toradex公司简介及本地支持联系方式 (23)10.1Toradex公司简介 (23)10.2本地支持联系方式 (23)1. 开发设备及材料准备1.1 硬件准备1.1.1 Apalis i.MX6 系列核心板模块✓Apalis i.MX6 Quad 2GB IT | V1.1C✓Apalis i.MX6 Quad 1GB | V1.1B✓Apalis i.MX6 Dual 1GB IT | V1.1B✓Apalis i.MX6 Dual 512MB | V1.1B1.1.2 Apalis 系列载板✓Apalis Evaluation Board | V1.1A✓IxoraCarrier Board | V1.1A1.1.3 基本配件(按需自行配置,不包含在标准载板购买包装内)✓电源适配器✓外部显示连接线(如VGA、RGB、LVDS等)✓调试串口连接线✓调试USB口连接线1.2 软件准备✓Windows系统开发主机✓Virtual Studio 2008 开发套件✓串口工具如SecureCRT或者Xshell等2. 开发平台配置2.1 硬件连接框图2.2 电源连接2.2.1 Apalis 开发板✓X15,输入电源类型7-27V DC,螺丝接线连接,建议功率24W✓X17,输入电源类型12V +/-10%,5.5mm 圆形接头,建议功率24W;当外设如LVDS,PCIE等需要12V电源是必须通过此接头供电。
WinCE6.0下双模终端的USB转串口驱动开发
0 引 言
我国 3 G牌 照 的 发放 , 宣告 了 3 时代 的到 来 , G
基于 T —C MA和 C MA WC MA 的双 模 终 端 将 DS D D / D 取代 2 时代 的单 模 终 端 。诺 基亚 、 星 、 为 、 G 三 华 中 兴等 国 内外 通 信 厂 商 都 积 极 投 入 到 双 模 手 机 终 端 的开发 中来 , 目前 双模 手 机终 端 的研发 已经 成 为热 点 。当前市场 中主要 的智 能手 机操 作 系统 有 : o i N ka 主推 的 Sm in 开 放 内核 的嵌 入 式 Ln x 微 软 的 y ba , iu , WiC n E等 。由于 WiC 6 0嵌人 式 系统具 有实 时性 n E.
Wi E. U B设备驱动开发只提供了一些底层支持 n 60对 S C
的原因, 以通 信 模 块 厂 商 未 提 供 WiC 6 0下 的 所 nE .
U B驱 动 , 要 实 现 通 信 模 块 的基 本 功 能 , 开 发 S 而 除
纯 U B驱 动 外 , WiC 6 0下 , 需 要 修 改 Mo S 在 nE. 还 . d m源码 , e 存在 着开 发 周 期 长 、 作量 大 、 容 性 差 工 兼 等 问题 , 给开发 人 员带 来 了极 大 的不 便 。而通 过 串 口直接对 Mo e dm进 行操作 , 不仅 避 免 了上述 在开 发 中存 在 的问 题 , 时 由于操 作 Mo e 的 是 虚 拟 串 同 dm 口, 由它来 适 配 Moe 不 会 出 现 由物 理 串 口操 作 d m, Mo e 时制 约 M d m处理速 率 的问题 , 然保持 了 dm oe 仍 U B高 速的特 点 , 开 发人 员 只 需 开发 出对应 模 块 S 故 的 U B转 串 口驱 动 亦 可实 现 上 网 、 电话 等 功 能 ; S 打
Wince6.0应用开发:一、平台搭建
Wince6.0应用开发:一、平台搭建由于需要参加一个比赛,于是就接触了WinCE6.0的应用开发,可是所看到的资料大部分都是关于WinCE6.0系统的开发,或者在系统之上的驱动开发。
像我这种只在WinCE6.0上利用厂商提供的类库进行应用开发的真实伤不起。
下面介绍开发环境:我的自己的系统是WIN7的系统其实假如你和我一样的话只开发应用的话,其实根本不需要按照网上那样下差不多4G的东西。
需要做的是,一、装个vs2008(记得包含智能设备开发这一项,vs2010是不支持智能设备开发的。
当然你也可以选择vs2005,这随便你。
vs2008对应的Wince上的.net compact framework3.5,而vs2005对应的是2.0),二、再装个WINCE6.0_CHS_SDK(这是个wince6.0的SDK软件开发包)三、安装一个Wince设备的同步软件。
四、(可选择)假如你想要让你的模拟器上网的话,你就吧Virtual Pc 2007安装上吧!详细的步骤:一、装个vs2008开发应用的话,比较快捷的无疑有c++以及c#,所以这就看你自己的需要的了,不过在安装的时候,记得选择上智能设备课编程技术这一项。
如下图这样第一步就完成了。
二、安装这个的目的是因为其提供了一个Win ce6.0的模拟器,之后只需要将写好的程序点击(开始执行不调试)或者(启动调试)都行,vs2008便会在模拟器上部署应用程序。
之后便可以执行了。
下载地址:《传送门》安装时的注意事项:1、安装的时候记得选择自定义2、然后如下图记得取消文档这一项,否则会出现安装失败的提醒。
三、同步软件的安装:Winxp:装的是Activesync 4.5 《传送门》Win7:装的是Windows mobile center 《传送门》补充:假如百度网盘的内容被取消了,给我留言,我会马上补充回来的四、Virtual Pc 2007安装后便能在wince模拟器中,做些设置便能上网了。
智能无线抄表系统中CC1101的WinCE驱动开发
智能无线抄表系统中CC1101的WinCE驱动开发智能无线抄表系统中CC1101的WinCE驱动开发0引言随着经济技术的不断发展,以及自动化程度的提高,越来越多的场合需要用到远程控制。
在承接的国家大学生创新性实验计划项目——基于无线跳传网络的智能抄表系统中,中继(SINK)模块,即采用S3C2410在WinCE下驱动射频芯片CC1101作手持终端控制器。
其中,在WinCE下驱动CC1101成为该项目的一个难点。
CC1101使用SPI通信,而SPI驱动属于WinCE串口驱动的一种,是流驱动。
本文将介绍WinCE5.0下,C1101的SPI 驱动程序设计。
1CC1101的SPI接口特性CC1101基于TI公司的0.18μm CMOS晶体SmartRF04技术,是一种低成本、真正单片的UHF收发器,为低功耗无线应用而设计。
电路主要设定在315MHz,433MHz,868MHz和915MHz的ISM(工业,科学和医学)和SRD(短距离设备)频率波段,CC1101的主要操作参数和64位发送/接收FIFO可通过SPI接口控制,具有14个命令寄存器,47个普通配置寄存器和12个状态寄存器,通过4线SPI兼容接口(SI,SO,SCLK和CSn)配置。
其中,SPI接口是一种同步串行通信接口,CSn是芯片选择管脚,当该管脚为低电平时,SPI接口可以通信;SI和SO为数字传输管脚,SI用于数据输入,SO用于数据输出;SCLK为同步时钟,在时钟的上升沿数据被写入或读出。
CC1101中SPI接口的读/写操作方式。
CC1101的配置、命令发布和发射接收缓存的数据读取都通过SPI完成,SPI的操作都由主机控制,对CC1101来说,主机的控制操作即是发送的headerbyte。
下面介绍两种主要状态下的主机操作。
(1)读寄存器、读状态①写入头字节(R,0/1,address);②dummy write为从设备提供一个CLK,从SPI接收数据即读出address的数据。
WinCE.NET下USB OTG设备驱动程序设计
下USB OTG设备驱动程序设计孔旋,邓中亮北京邮电大学电子电子工程学院计算机应用技术专业,北京(100876)E-mail:kongxuan1982@摘要:本文介绍了USB OTG技术,分析了两用USB OTG设备驱动程序配置模型以及下设备驱动程序模型,并详细介绍了下pl2303的usb转串口桥接器芯片驱动程序的设计与实现。
关键词:USB OTG,,驱动程序1.引言USB,全称是Universal Serial Bus(通用串行总线)。
在1994年年底,由当时的康柏、IBM、Microsoft等多家公司联合发起成立的通用串行总线开发者论坛(USB Implementers Forum,简称USB IF)先后陆续推出了USB0.7、USB1.1、USB2.0规范,其理论传输数率最高可达480Mb/s。
最近,根据现有的USB接口在有线/无线,性能及应用规范上的不同,USB IF将USB接口分为5类,并发布了相应的标识,分别是:Wireless USB、Original USB、Hi-Speed USB、On-The-Go USB及Hi-Speed On-The-Go USB[1] 。
是微软公司向嵌入式领域推出的一款紧凑、高效的32位嵌入式操作系统,具有多任务、实时性、模块化及可伸缩性、强大的通信和多媒体能力等特点[2] ,在移动计算、工业控制和信息家电等诸多领域都有广泛的应用。
本文将通过工具Platform Builder实现TI OMAP850 PDA手机平台下USB OTG设备驱动程序,并实现基于OTG技术的一种应用——在无PC条件下,以PDA手机平台端为USB 主机端的数据通信。
B OTG技术2.1 OTG技术简介USB技术的发展,使得PC和周边设备能够通过较简单、可方便热插拔的方式连接在一起,通过USB总线,在PC的控制下进行数据交换。
但这种方便的数据交换方式,就在不久以前(10年以内),一旦离开了PC,各设备间无法利用USB接口进行操作,因为当时没有任何一种PC以外的其他设备能够充当PC一样的Host。
WINCE移植简要开发步骤
WINCE移植简要开发步骤一、建立新的BP工程,选择适当的CPU选择一个合适的模板勾选必要的组件选择合适的网络组件,去掉设备不支持的设备组件二、为工程添加设备驱动1、添加SD卡的支持添加Device Drivers->SDIO->SD Memory添加Device Drivers->SDIO->SDIO Host->Samsung 2410SDIO Host2、添加BSP板载驱动添加Catalog->BSPs->Samsung SMDK2410:ARMV4I->Device Drivers下要用的各种设备三、添加开发和应用程序支持1、添加MFC支持添加Catalog->Core OS->Windows CE devices->Applications and Servies Development->Microsoft Foundation Classes(MFC)2、添加SQL CE的支持添加Catalog->Core OS->Windows CE devices->Applications and Servies Development->SQL Server CE2.03、添加其它想添加的组件,但要注意不要使用的就不要添加,以免镜像文件太大四、设置各CPU语言和编译设置(注意,每种CPU都要设置一下)设置语言设置编译选项五、修改注册表(打开如图所示platform.reg文件进行编辑)1、设置网卡为DHCP模式设置网卡为DHCP模式,在PB5和EVC4中才可以通过微软同步软件实现远程连接和调试,查找TcpIp子键,添加或者设置AutoCFG,EnableDHCP两个值[HKEY_LOCAL_MACHINE\Comm\CS89001\Parms\TcpIp]"AutoCFG"=dword:1"EnableDHCP"=dword:12、设置触摸屏的初始坐标参数查找TOUCH子键,添加或者设置CalibrationData的值:[HKEY_LOCAL_MACHINE\HARDW ARE\DEVICEMAP\TOUCH]"MaxCalError"=dword:7"CalibrationData"="395,763 799,251 759,1279 47,1275 67,215"3、设置SD/MMC卡的目录名称查找SDMemory子键,设置Folder的值,这个值在我们调用CD卡上的程序时候要用到,如果不设置,也可以通过在程序中遍历目录的方法来查找:[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]"Name"="SD Memory Card""Folder"="Storage Card"六、编译自己的WinCE分别选中不同类型的CPU,点击Build OS->Sysgen编译系统,为了减少错误,请暂时关闭木马防火墙软件七、打包制作SDK把内核编译完成后,就可以打包制作自己的SDK了。
基于WINCE5.0环境下的LAN91C111驱动程序开发
LAN9 Cl l Drv r De eo m e tBa e n W i CE5 0 1 l ie v lp n sd o n .
Z NG u , HA a HA I i Z NGJ n K i (. h 4hKe a hIstt o E C, h i h a gHee 00 8 , hn ; 1T e5t s r tue f T Sia un b i 5 0 1 C ia e c ni C jz 2 Nay n b egat co lB n b n u 23 1, hn) . v guSren Sh o, e guA h i 30 2 C i Be a
S S 公 司生 产 的嵌 入 式 以太 网控 制 器 L N9 C1 1 原 理 和 主要 特 点,给 出 了 L N9C1 1 ¥ C 40构 成 嵌 入 式 以太 网接 M C A 1 1的 A 1 1 和 3 24
口的设计 实例, j 明了硬件和软件设计 。 并 说 经过 实验证 明, 用该设计方案的产品, 采 运行稳 定, 该方案具有较 高的性价 比和 实用价
¥3 C24 0 4 w rt h i e i ng t e drv r und r W i i e nCE 5. 0.Expei e a eul s w a t i r ha vey oo o r to o W i CE5. rm ntl r s t ho t t he dr s h ve s r g d pea n n n i 0
L AN9 1 s 0 wo e t e a f c aa t r t s o AC + HY n efc o AN9 1 n y ARM 9 0 r c s r 1 1 i C1 c n  ̄ d wi t i o h r cei i f M h h d sc p i tr e f L a 1 1 a d b C1 2 T p o es o
怎样将一个驱动加入WINCE中-WINCE-sparkle-cliz
#include<windows.h>
//#include <ceddk.h>
#include<nkintr.h>
#include<pm.h>
#include"pmplatform.h"
#include"Pkfuncs.h"
#include"s2440.h"
#defineIO_CTL_WDD_1_OFF 0x01
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
WDDGpioInit();
switch(dwCode)
{
caseIO_CTL_WDD_1_ON:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<5);
break;
// 1. Virtual Alloc
Virtual_Alloc();
WDDGpioInit();
mInitialized = TRUE;
returnTRUE;
}
//-----------------------------------------------------------------------------
{
RETAILMSG(1,(TEXT("USERWDD: WDD_Open\r\n")));
returnTRUE;
}
//-----------------------------------------------------------------------------
