·制造业信息化·
收稿日期:2007-11-26
作者简介:王斌(1983-),男,硕士研究生。研究方向:嵌
入式系统
。
0引言
GPS导航仪现已广泛应用于汽车导航,但普通导航
仪设备的功能单一,因此有必要为导航设备添加娱乐功
能,如播放音频,视频等。而音频、视频的文件一般比
较大,需要比较大的存储空间。SD卡的价格低廉,存储
容量大,存储速度较快,且有数据加密功能,适用于存
储多媒体文件。而 WindowsCE是嵌入式操作系统,由
于其界面酷似桌面操作系统,故容易被用户接受。要在
windowsCE上使用SD卡,就要编写合适的SD卡驱动。
1系统的硬件设计
导航仪系统总体结构。导航仪的硬件系统如图1所
示 主 要 有 : 中 央 处 理 器 CPU,GPS模 块 ,NAND
FLASH,触摸屏,外扩存储卡。其中 CPU采用了
s3c2440A芯片作为 CPU。采用 ARM9内核,工作电压
1.3V,采用 0.13!mCMOS处理器,支持 WindowsCE,
PalmOS,Symbian和 Linux
操作系统,提供的接口有
NAND闪存,TFT/STN液晶
屏 , USB, SD/MMC/SDIO
存储卡等接口。外扩存储
卡采用了容量为 512MB的
SD卡。
GPS模块完成对 GPS
信息的采集,并把信息反馈给CPU,CPU完成对信息的
处理,并把处理后的信息显示于触摸屏上。NAND
FLASH存放 WindowsCE的内核文件,外扩存储器存储
多媒体以及其它文件。
(1)SD硬件特性。SD卡的接口可以支持两种操作
模式:SD卡模式和SPI模式 (位传输模式)。主机系统可
以选择以上其中任一模式,SD卡模式允许4线的高速数
据传输。 SPI模式允许简单通用的SPI通道接口, 但读
写速度大大降低了。SD卡的形状及引脚如图2所示。
(2)CPU与 SD卡的连接。在
s3c2440A中,有专门的SD卡的接
口,故可以把它们直接连接起来,
相应的电路如图3所示。
(3)SD卡的寄存器。在编写
SD的驱动时,主要就是对 SD卡
的寄存器进行配置,从而实现对
SD卡的读或写的操作。SD卡有六
个寄存器,分别
为:①CID卡的
识别号;②RCA
卡的相对地址;
③DSR可选寄存
器;④CSD描述
操作该卡的规则
(时序规则)。包
括,数据读/写时
间,工作电流,扇区大小,文件系统格式,卡所使用的
命令集,写保护等信息。通过该寄存器可以获取卡的容
量,访问方式;⑤SCR卡的配置寄存器;⑥OCR卡运行
汽车导航仪的SD卡驱动程序设计
王 斌,洪永强
(厦门大学 机电工程系,福建 厦门 361005)
摘 要:采用SD卡作为汽车导航仪系统的外扩存储器。根据SD卡的硬件特性,设计了CPU与SD卡的电
路连接。并
了WindowsCE下流接口驱动的特点,以及SD卡驱动程序与中断的关系,提出了
基于WindowsCE下的SD卡驱动的实现方法。
关键词:WindowsCE;SD卡;驱动程序
中图分类号:TN914 文献标识码:A 文章编号:1002-6673(2008)01-101-02
Vol.21,No.1
Jan.,2008
第21卷第1期
2008年1月
机电产品开发与创新
Development&InnovationofMachinery&ElectricalProducts
图1导航仪系统结构图
Fig.1Thestructureof
navigator
图2SD卡的形状及
引脚图
Fig.2Theshapeand
pinsofSDcard
图32440与SD卡的硬件连接图
Fig.3Theconnectionbetween2440
andSDcard
SD卡
外扩存储卡
NAND
FLASH
2440
GPS
模块
触摸屏
2440
SDDATA1
SDDATA0
SDCLK
SDCMD
SDDATA3
SDDATA2
8
7
6
5
4
3
2
1
9
SD卡
VCC
101
·制造业信息化·
DesignoftheSDCardDriverforCarGPSNavigatorBasedonWindowsCE
WANGBin,HONGYong-Qiang
(DepartmentofMechanicalandElectricalEngineering,XiamenUniversity,XiamenFujian361005,China)
Abstract:SDcardisusedasexternalmemoryincarnavigatorsysteminthisarticle.TheelectricalconnectionbetweenCPUandSDcardis
designedaccordingtothespecialityofSDcard.AndthefeaturesofstreaminterfacedriversbasedonWindowsCEandtherelationbetween
theinterruptionandthedriverofSDcardisanalysed,thentheimplementationoftheSDcarddriverispresented.
Keywords:WindowsCE;SDcard;driver
条件寄存器 描述卡的工作电压范围 ,它还包含一个上电
状态标记位用于描述是否完成卡上电过程。
2WindowsCE的驱动程序
(1)WindowsCE的驱动分类。按照驱动程序接口的不
同,WindowsCE驱动有两种模型:本机设备驱动程序和流
接口驱动程序。本机设备驱动适于集成到基于CE平台的
设备,它们被静态地链接到GWES.exe,一般不需要自行
编写。而流接口驱动程序是一般类型的设备驱动程序,表
现为用户级的动态链接库DLL,所有的流接口程序都是用
同一组接口并调用同一个
集。这些函数供操作系统内
核使用,主要完成
的文件I/O操作和电源管理。SD卡驱
动属于流接口驱动,故它可实现为标准的流接口函数:
DSK_Init, DSK_Deinit, DSK_Open, DSK_Close,
DSK_Write,DSK_Seek,DSK_PowerUp,DSK_PowerDown,
DSK_IOControl。
(2)WindowsCE的中断处理。当 SD卡插入时,就
会引发系统的中断。像 PC机一样,当设备需要驱动程
序的服务时,则要用中断通知操作系统。例如 SD卡的
拔出或是插入时,都会产生中断信号。WindowsCE.net
中断处理分两个部分,中断服务例程ISR和中断服务线
程 IST。中断服务例程通常要求很小,处理速度快,所
以它一般只是把物理中断号映射为逻辑中断标识符,并
返回给操作系统。IST则负责具体的事件处理。
与 SD卡相关的中断有:SD卡
中断,SDIO中
断和DMA中断。其中 SD卡检测中断是当有 SD卡插入
时引发的;SDIO中断是SDIO卡有数据需要与总线交换
时引发的;DMA是SD卡的DMA数据传送。
3SD卡驱动程序设计
(1)编写完整的驱动源代码,主要完成流接口函数
的编写。这些函数主要由以下组成:
DSK_Init():由设备管理器调用,用来初始化SD卡
DSK_Deinit():由设备管理器调用,用来卸载SD卡
DSK_Open():打开SD卡
DSK_Close():关闭SD卡
DSK_Write():将数据写到SD卡
DSK_Seek():移动SD卡的数据指针
DSK_PowerUp():对SD卡进行供电
DSK_PowerDown():结束对SD卡的供电
DSK_IOControl():发送命令到SD卡
其中DSK_Init()调用了三个函数完成初始化工作:
SD_InitializeAddress()初始化 SD的 IO地址,映射 IO
地址的物理内存,InitSD()初始化 SD相关寄存器,
SD_Identify()来获取SD相关信息。代码 (略)。
本文中利用了 DSK_IOControl()来完成对 SD卡的
读,写等操作,因此在其他函数 (如DSK_Write())中只
是简单返回调试信息,未作任何的操作。部分代码 (略)。
(2)编写 def文件,导出标准流函数。要把流驱动
的接口函数导出,则要建立一个def文件。
(3)编写驱动的注册文件。一个具体的流接口驱动
程序跟注册表部分是分不开的,当设备管理器 Device.
exe被加载时,它会检查 HKEY_LOACL_MACHINE\
Drivers\BuiltIn下的子键以便加载驱动。因此需要添加注
册表信息如下:
[HKEY_LOCAL_MACHINE_Drivers\BuiltIn\SDCARD]
“Index”=dword:1
“Prefix”=”DSK”
“Dll”=” SDCARD.dll”
“Order”=dword:0
其中Index指定驱动程序的索引,Prefix表明驱动的
前缀,Dll表示驱动的实现位于sampledv.dll,Order表示
驱动的加载顺序,0为第1个加载。
(4) 利用PlatFormBuilder调试驱动程序。用PB模
拟器调试驱动程序,并制作内核文件,将内核文件下载
到目标设备,完成SD卡驱动的开发。
4总结
开发SD卡驱动程序是一个复杂的过程,首先要掌握
SD卡的硬件特性,其次要了解WindowsCE的驱动分类及基
于它的SD卡驱动的协议栈,熟悉与SD相关的中断。下载
到目标设备后,该驱动程序能够正确识别SD卡,效果良好。
参考文献:
[1]周酼林,等.WindowsCE.net内核定制[M].电子工业出版社,2005.
[2]邵自然,吕格莉.基于嵌入式Linux的SD卡驱动程序的设计与实
现[J].ComputerEraNo.8,2006.
[3]陈瑜.基于WindowsCE.NET的设备驱动程序开发[J].微型电脑应
用,2006,3.
[4]李锡武,曹强,封仲淹.基于 ARM的 SD主控制器的设计与实现
[J].计算机工程与设计,2006,9.
102