基于ARM的SD主控制器的设计与实现Word下载.docx
- 文档编号:17270964
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:8
- 大小:25.83KB
基于ARM的SD主控制器的设计与实现Word下载.docx
《基于ARM的SD主控制器的设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《基于ARM的SD主控制器的设计与实现Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
封仲淹(1981-,男,湖北武汉人,硕士研究生,研究方向为网络存储系统。
基于ARM的SD主控制器的设计与实现
李锡武,曹
强,封仲淹
(华中科技大学计算机学院信息存储教育部重点实验室,湖北武汉430074
摘
要:
基于ARM的嵌入式系统和SD卡的应用越来越广泛。
提出了一种基于SAMSUNG的S3C2410A嵌入式处理器平台上实现SDHost控制器的方法,并为该平台上运行的WindowsCE系统编写了驱动程序。
对SD卡连续插拔导致的系统宕机问题,分别提出了延时采样和多次采样的软件防抖动的解决方法,并且进行测试和性能分析。
关键词:
嵌入式系统;
SD主机控制器;
驱动程序;
防抖动;
ARM系统中图法分类号:
TP368.1
文献标识码:
A
文章编号:
1000-7024(200617-3248-02
DesignandimplementationofSDhostcontrollerbasedonARMarchitecture
LIXi-wu,
CAOQiang,
FENGZhong-yan
(NationalStorageSystemLaboratory,SchoolofComputerScience,HuazhongUniversityofScienceandTechnology,
Wuhan430074,China
Abstract:
TheapplicationofSDcardandembeddedsystembasedonARMsystembecomemoreandmorepopular.TheimplementationoftheSDhostcontrollerbasedonSamsung'
sS3C2410Amicroprocessorplatformarepresented,itsdevicedriveforWindowsCEisde-veloped.Thesoftwareimplementationusingdelay-sampleandmulti-sampleareintroducedforsystemcrashcausedbycardpluggedinandpluggedoutcontinuously,thetestandperformanceanalysisarediscussed.
Keywords:
embeddedsystem;
SDhostcontroller;
devicedriver;
debounce;
ARMarchitecture
表1
S3C2410A部分GPIO引脚功能定义
信号方向S3C2410A功能引脚说明SD_nPWREN输入
LCD_PWREN/EINT12/
GPG4SD插槽电源使能
信号线SD_DATA3输入/输出SDDATA0/GPE104bit模式:
DATA3SD_DATA2输入/输出SDDATA0/GPE94bit模式:
DATA2SD_DATA1输入/输出SDDATA0/GPE84bit模式:
DATA1SD_DATA0输入/输出SDDATA0/GPE74bit模式:
DATA0
SD_CMD
输入/输出SDCMD/GPE6SD命令线SD_CLK输入SDCLK/GPE5SDIO/SD卡时钟线SD_nCD输出EINT1/GPF1SD卡检测引脚SD_WP
输出
EINT18/GPG10
SD卡写保护引脚
2006年9月计算机工程与设计
Sept.2006
第27卷第17期Vol.27
No.17
ComputerEngineeringandDesign
-3249-
一时刻,该引脚只能使用一种功能。
对于SD卡检测引脚,需要配置成外部中断源(EINTx),对应的EXTINT0,EXTINT1和EXTINT2寄存器控制该中断源的触发模式:
低电平触发,高电平触发,前沿触发,后沿触发或是前后沿触发。
S3C2410A时钟控制逻辑有两个锁相环路PLL(phaseloc-kedloop):
UPLL专用于USB时钟;
MPLL能够产生系统要求的3种时钟信号:
FCLK供CPU内核使用,HCLK供系统总线使用,PCLK供外部总线使用。
通过对MPLL控制寄存器MPLLCON配置,可以产生需要的时钟频率。
在时钟控制逻辑里,寄存器CLKCON用来控制如USB,LCD,UART,SD等接口模块的时钟使能。
其中bit[9]
用于控制SD/MMC接口的时钟。
SDHost控制器不能直接使用PCLK信号。
正常工作模式下,FCLK为266MHz,PCLK为66.5MHz,而SD卡的最高时钟为25MHz,MMC卡最高为20MHz。
通过对SDIPRE寄存器的bit[0-7]设置可以对PCLK进行分频,选择合适SD/MMC卡的工作频率。
分频公式为
Clockrate=PCLK/2/(SDIPRE[0-7]+1
2
驱动程序的实现
2.1
驱动程序体系结构
我们为开发平台上运行的WindowsCE系统开发了SD
Host控制器的驱动程序。
WindowsCE下,驱动程序是用户态的DLL,这些DLL向内核提供一些接口函数,这样设备管理模块就可以通过这些函数与具体的硬件设备进行通信。
WindowsCE的驱动程序模型主要有两种类型:
流式接口驱动和本地设备驱动。
流式设备驱动向上层提供统一的流式设备接口,而本地设备驱动可根据具体设备要求提供相应接口。
本文实现中SDHost
的驱动程序采用流式接口驱动模型。
驱动程序要实现相应的XXX_Open(,XXX_Close(,XXX_Init(,XXX_Deinit(,XXX_IOControl(,XXX_Read(,XXX_Write(XXX_Seek(,XXX_PowerUp(,XXX_PowerDown(等接口函数,其中XXX为设备驱动的前缀,应用程序可以通过文件操作来控制设备。
为了减少了SDHost驱动程序设计的复杂性,使其具有较好的可移植性,采用SDHostDDK,它在BSQUARESD协议栈的基础上,提供了平台独立的总线和客户端驱动和一组标准化的API供使用。
BSQUARESD卡的协议栈结构如图1所示。
该结构的设计很大程度上减少了SDHost驱动程序设计
的复杂性,使SDHost控制器驱动程序设计可以专著于硬件相关的部分。
总线驱动是SD卡客户端驱动程序和SDHost驱动程序之间的一个抽象层,它为SD卡客户端驱动提供平台独立的服务接口。
SDHost驱动程序需要完成处理器和硬件平台相关的处理,向上层驱动提供统一的服务接口。
2.2中断控制
中断控制是设备驱动程序里的关键部分,它关系到操作
系统的实时相应速度和系统的整体性能。
WindowsCE是通用的嵌入式系统,它在中断处理方面也有一定实时能力。
WindowsCE处理中断的过程分为两部分实现:
核心的ISR和用户线程IST。
ISR实现一般要求短小精悍、效率很高,它只实现简单的功能:
响应设备中断并返回一个中断标识码。
IST是用户态线程,负责处理具体的中断事务。
当有硬件设备产生中断时,系统进入核心ISR执行,响应设备中断并返回一个中断标识码,核心根据返回的中断标识码设置相应的事件,该事件将引起IST的执行,处理具体的中断事务。
处理过程如图2所示。
本实现中用到了下列中断:
SD卡检测中断,SDIO中断和DMA0中断(DMA0专用于SDHost的DMA数据传输)。
SD卡检测中断IST负责检测SD卡的插入和拔出,通知上层应用插槽的状态;
SDIO中断IST中ISTSD的DMA在CE中,因映射到内核的虚拟地址才能够完成相应的访问。
SDHost驱动程序在初始化的时候,必须进行资源分配和地址映射,配置好各个GPIO引脚的功能;
然后需要创建事件和相应的中断标识码的关联,创建中断服务线程IST,准备进行中断响应服务。
3卡检测与防抖动
系统初始化时,SD_nCD检测引脚被设置为上升沿和下降沿
触发,因此引脚电平发生变化时,都会有中断产生。
当硬件产生
中断时,系统进入核心ISR,对SD_nCD进行检测,返回相应的中断标识码,对于是SD插入还是拔出,则由驱动程序的IST来处理。
由于SD卡插槽采用的是机械式开关,在插拔卡的时候,机械开关断开、闭合时会有抖动,导致SD卡检测引脚的电平不稳定,从而有可能引起对卡的状态的误判。
这样会导致加载上层驱动,初始化失败造成系统宕机。
为了使每次插拔只响应一次,必须要采用相应的方法来防止抖动,避开按键按下的抖动时间。
图2WindowsCE中断处理过程
ISR允许高级别的中断允许除ID以外的所有中断允许全部中断
ISRISR
ISR
设置事件
允许ID
IST
线程可安装
ISPOAL
核心硬件
图1SD卡协议栈体系结构
SDIO卡
卡
SDHost控制器
SDHost控制器驱动
总线驱动
SD/MMC客户端驱动SDIO客户端驱动
NDIS子系统
文件系统驱动
(FATFS
特定应用接口
客户端驱动接口
主控制器接口
控制器总线接口
插槽电气接口
-3294-
了该算法具有较好的稳定性和实用性。
参考文献:
[1]JamesPAnderson.Computersecuritythreatmonitoringandsur-veillance[R].FortWashington,PA:
Technicalreport,1980.[2]
FrankJ.Artificialintelligenceandintrusiondetection:
Currentandfuturedirections[EB/OL].http:
//www.seclab.cs.ucdavis.edu/papers/ncsc.94.ps.[3]
HelmanP,BhangooJ.Astatisticallybasesystemforprioritizinginformationexplorationunderuncertainty[J].IEEETransactionsonSystems,ManandCybernetics,PartA:
SystemsandHumans,1997,27:
449-466.[4]
DenaultM,GritzalisD,KaragiannisD,etal.Intrusiondetec-tion:
ApproachandperformanceissuesoftheSECURENETSystem[J].ComputersandSecurity,1994,13(6:
495-507.[5]
MukkamalaS,SungAH.Detectingdenialofserviceattacksusingsupportvectormachines[C].ProceedingsofIEEEInter-nationalConferenceonFuzzySystems,IEEEComputerSocietyPress,2003.1231-1236.
[6]MukkamalaS,SungAH.AdistributedagentbasedIDSforstealthyprobedetection[C].India:
ProcofFirstIndianInterna-tionalConferenceonArtificialIntelligence,2003.413-422.
[7]
YihuaLiao,RaoVemuriV.UseofK-nearestneighborclassifierforintrusiondetection[J].ComputersandSecurity,2001,21(5:
439-448.
[8]StefanosM,MarvinC,DanZ,etal.AdatamininganalysisofRTIDalarms[J].ComputerNetworks,2000,34:
571-577.[9]KDDCup1999data[EB/OL].1999.http:
//kdd.ics.uci.edu/data-bases/kddcup.html.
[10]SrilathaC,AjithA,ThomasP.Featuredeductionandensemble
designofintrusiondetectionsystem[J].ComputerandSecurity,2004,28:
128-132.
[11]JiaweiHan,MichelineKamber.Datamining:
Conceptsand
techniques[M].MorganKaufmannPubilisher,2000.9-10.[12]LeonidPortnoy,EleazarEskin,SalvatoreJStolfo.Intrusionde-tectionwithunlabeleddatausingclustering[C].Philadelphia,PA:
ProceedingsofACMCSSWorkshoponDataMiningAp-pliedtoSecurity,2001.
在驱动程序IST里采用延时采样的方法来避免抖动,同时也尝试了多次采样的检测方法来避开用户按键的抖动时间。
延时采样是IST在收到SD卡检测事件以后,并不是立刻进行引脚信号判断,而是延时一段时间采样,延迟时间要根据系统电路特性而定,然后检测引脚信号,判断插槽的状态是卡插入还是拔出。
多次采样方法是IST在收到SD卡检测事件以后,要对引脚进行多次等间隔采样,根据采样出的多数电平信号的值来决定插槽卡的状态。
多次采样的方法可以有更短的响应时间,当采样出的电平信号多数值不能决定卡的状态时,需要进行重新采样判断。
对于延时采样的防抖动方法,必须考虑到实现的效率。
ISR运行于系统核心态,它的延时会影响整个系统,导致用户的输入响应时间过长,造成整体性能的下降。
而WindowsCE的驱动程序是用户态的DLL,作为用户进程来调度,因此在SDHost的驱动程序里实现防抖动,可保证系统整体性能不下降。
对于上述两种防抖动方法,我们进行了连续插拔的测试,结果如图3所示。
测试结果表明,这两种方法都取得了较好的效果,基本上解决了SD卡检测的抖动问题。
4结束语
使用S3C2410A的SD控制模块,通过对GPIO功能的扩
展来完成SD的检测和写保护的功能,实现SDHost控制器相对比较灵活。
在进行驱动程序开发过程中,对SD卡检测进行防抖动处理是必要的,必须根据系统电路特性来确定合适的检测时机,在驱动程序里面实现防抖动处理,保证整个系统的效率。
本文介绍的SDHost控制器已经应用在工程实践中,结果表明设计是灵活有效的,防抖动设计对于类似的设计也具有一定的借鉴意义。
[1]
S3C2410A-200MHzand266MHz32-bitRISCmicroprocessoruser'
smanual[M].Samsung,2004.
[2]
Jö
rgHenkel,XiaoboSharonHu,ShuvraS.Bhattacharyya:
Takingontheembeddedsystemdesignchallenge[J].IEEEComputer,2003,(4:
35-37.
[3]陈向群.WindowsCE.NET系统分析及实验教程[M].北京:
机械工业出版社,2003.
[4]吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:
人民邮电出版社,2004.
[5]叶庆云,刘奇.基于ARM的操作系统中断堆栈分析及实现[J].武汉:
武汉理工大学学报,2004,26(1.
[6]陈文智.嵌入式系统开发原理与实践[M].北京:
清华大学出版社,2005.
[7]MichaelJPont.C语言嵌入式系统开发[M].北京:
中国电力出版社,2003.
[8]SDIOnow!
HostDDKuser'
smanual[M].BSQUARE,2002.[9]SD-memorycardspecifications/part1physicallayerspecifica-tionversion1.01[M].SDGroup,2001.
图3SD卡插拔宕机次数测试
宕机次数
插拔次数不防抖动;
等间隔采样10次;
延时100
ms
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM SD 主控 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)