嵌入式系统的SD控制器设计实现

发布者:心有归属最新更新时间:2018-02-19 来源: eefocus关键字:嵌入式系统  SD控制器 手机看文章 扫描二维码
随时随地手机看文章

  引言

  在目前的掌上电脑等嵌入式系统中,SD(securedigital)卡以其体积小和引脚数少的优势,提供了比CF更好的外部设备扩展解决方案。因此,如何在系统中集成SDHost控制模块,以及在嵌入式操作系统里面实现其驱动程序,都是目前嵌入式系统设计者要考虑的问题。
 

  本文实现所采用的开发平台是基于SAMSUNG公司的S3C2410AARM微处理器,利用处理内部的SD控制模块,采用GPIO扩展的方法实现SDHost控制器。


  使用S3C2410A的SD控制模块,通过对GPIO功能的扩展来完成SD的检测和写保护的功能,实现SDHost控制器相对比较灵活。在进行驱动程序开发过程中,对SD卡检测进行防抖动处理是必要的,必须根据系统电路特性来确定合适的检测时机,在驱动程序里面实现防抖动处理,保证整个系统的效率。

  1 SDHost硬件设计

  SCDA1A0100是ALPS公司生产的SD卡连接插槽,采用高可用的滑动触点开关,能够准确地检测到卡插入的时机。

  通过小型化和薄型化设计,已经广泛应用于PDA,数码相机和个人电脑。当插槽有SD卡插入时,SD卡会触动槽内的触点开关,引起卡的检测引脚和写保护引脚的相应电平变化。

  Samsung的S3C2410A内部支持SDHost的控制模块,有SDHost控制寄存器和可以用于SDHost控制器的IO引脚,可用编程的方法对其功能进行选择;但对于SD卡的检测,写保护和插槽的电源使能等功能没有专门的引脚。在本文实现中,对于卡检测、电源引脚,通过GPIO扩展来实现。部分引脚定义如表1所示。

  表1 S3C2410A部分GPIO引脚功能定义

  

S3C2410A部分GPIO引脚功能定义

 

  S3C2410A的GPIO引脚分为GPA,GPB等8组,每组的IO引脚有控制寄存器(GPxCON),数据寄存器(GPxDAT),Pull-Up寄存器(GPxUP)进行控制。每根引脚所在的GPxCON里有对应位控制其功能,通过对GPxCON编程来控制其功能,某一时刻,该引脚只能使用一种功能。

  对于SD卡检测引脚,需要配置成外部中断源(EINTx),对应的EXTINT0,EXTINT1和EXTINT2寄存器控制该中断源的触发模式:低电平触发,高电平触发,前沿触发,后沿触发或是前后沿触发。

  S3C2410A时钟控制逻辑有两个锁相环PLL(phaseLOCkedloop):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系统开发了SDHost控制器的驱动程序。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所示。

  

SD卡协议栈体系结构

 

  图1 SD卡协议栈体系结构

  该结构的设计很大程度上减少了SDHost驱动程序设计的复杂性,使SDHost控制器驱动程序设计可以专着于硬件相关的部分。总线驱动是SD卡客户端驱动程序和SDHost驱动程序之间的一个抽象层,它为SD卡客户端驱动提供平台独立的服务接口。SDHost驱动程序需要完成处理器和硬件平台相关的处理,向上层驱动提供统一的服务接口。

  2.2 中断控制

  中断控制是设备驱动程序里的关键部分,它关系到操作系统的实时相应速度和系统的整体性能。WindowsCE是通用的嵌入式系统,它在中断处理方面也有一定实时能力。

  WindowsCE处理中断的过程分为两部分实现:核心的ISR和用户线程IST。ISR实现一般要求短小精悍、效率很高,它只实现简单的功能:响应设备中断并返回一个中断标识码。IST是用户态线程,负责处理具体的中断事务。

  当有硬件设备产生中断时,系统进入核心ISR执行,响应设备中断并返回一个中断标识码,核心根据返回的中断标识码设置相应的事件,该事件将引起IST的执行,处理具体的中断事务。处理过程如图2所示。

  

WindowsCE中断处理过程

 

  图2 WindowsCE中断处理过程

  本实现中用到了下列中断:SD卡检测中断,SDIO中断和DMA0中断(DMA0专用于SDHost的DMA数据传输)。SD卡检测中断IST负责检测SD卡的插入和拔出,通知上层应用SD插槽的状态;SDIO中断IST只是简单的通知总线驱动有SDIO中断产生,具体处理交给SDIO卡的驱动程序;DMA0中断IST负责处理SD的DMA数据传送。

  在WindowsCE中,由于驱动程序DLL运行在用户态,因此驱动程序要访问硬件寄存器,必须在驱动程序的进程空间分配一段虚拟空间,然后将这段虚拟空间映射到硬件寄存器所映射到内核的虚拟地址才能够完成相应的访问。SDHost驱动程序在初始化的时候,必须进行资源分配和地址映射,配置好各个GPIO引脚的功能;然后需要创建事件和相应的中断标识码的关联,创建中断服务线程IST,准备进行中断响应服务。

3 卡检测与防抖动

 

  系统初始化时,SD_nCD检测引脚被设置为上升沿和下降沿触发,因此引脚电平发生变化时,都会有中断产生。当硬件产生中断时,系统进入核心ISR,对SD_nCD进行检测,返回相应的中断标识码,对于是SD插入还是拔出,则由驱动程序的IST来处理。

  由于SD卡插槽采用的是机械式开关,在插拔卡的时候,机械开关断开、闭合时会有抖动,导致SD卡检测引脚的电平不稳定,从而有可能引起对卡的状态的误判。这样会导致加载上层驱动,初始化失败造成系统宕机。为了使每次插拔只响应一次,必须要采用相应的方法来防止抖动,避开按键按下的抖动时间。

  在驱动程序IST里采用延时采样的方法来避免抖动,同时也尝试了多次采样的检测方法来避开用户按键的抖动时间。

  延时采样是IST在收到SD卡检测事件以后,并不是立刻进行引脚信号判断,而是延时一段时间采样,延迟时间要根据系统电路特性而定,然后检测引脚信号,判断插槽的状态是卡插入还是拔出。多次采样方法是IST在收到SD卡检测事件以后,要对引脚进行多次等间隔采样,根据采样出的多数电平信号的值来决定插槽卡的状态。多次采样的方法可以有更短的响应时间,当采样出的电平信号多数值不能决定卡的状态时,需要进行重新采样判断。

  对于延时采样的防抖动方法,必须考虑到实现的效率。

  ISR运行于系统核心态,它的延时会影响整个系统,导致用户的输入响应时间过长,造成整体性能的下降。而WindowsCE的驱动程序是用户态的DLL,作为用户进程来调度,因此在SDHost的驱动程序里实现防抖动,可保证系统整体性能不下降。

  对于上述两种防抖动方法,我们进行了连续插拔的测试,结果如图3所示。测试结果表明,这两种方法都取得了较好的效果,基本上解决了SD卡检测的抖动问题。

  

SD卡插拔宕机次数测试

 

  图3 SD卡插拔宕机次数测试

  4 结语

  本文介绍的SDHost控制器已经应用在工程实践中,结果表明设计是灵活有效的,防抖动设计对于类似的设计也具有一定的借鉴意义。


关键字:嵌入式系统  SD控制器 引用地址:嵌入式系统的SD控制器设计实现

上一篇:嵌入式操作系统中USB双向通信的设计与实现
下一篇:嵌入式实现地铁杂散电流监测装置

推荐阅读最新更新时间:2024-03-16 15:55

嵌入式系统面向低功耗的协同设计
摘要:在系统设计中,低功耗系统或低功耗协同设计系统并没作为一个整体在当前的研究中得到充分的重视。本文阐述在系统级设计中功耗的重要性,综述硬件低功耗、软件低功耗和通信低功耗的设计方法,并给出实现低功耗设计的一种可行方法。 关键词:协同设计 硬件低功耗 软件低功耗 功耗估计 1 概述 对于当今的各种电子设备尤其是嵌入式系统来说,功耗是一个非常重要的问题。系统部件产生的热量和功耗成比例,为解决散热问题而采取的冷却措施进一步增加了整个系统的功耗。为了得到最好的结果,在设计初级阶段就要尽可能地考虑低功耗问题。 由于现在大部分数字系统都利用CMOS电路,因此,本文提出的思路和探讨领域,主要指CMOS电路。在CMOS电路里,功耗由下式决
[应用]
ARM7嵌入式系统在车辆调度中的应用
一、车辆调度系统的整体设计: 整个系统包括四个部分(1)通信主站;(2)车载从站;(3)通信链路。(4)系统监控部分。下面对各个部分的功能做一个简单的介绍。 (1)通信主站:完成信息的转发,它是连接系统监控部分和车载从站的纽带,它将从系统监控部分来的信息转发给车载从站。并且接收车载从站的信息,并将信息上传给系统监控部分。 (2)车载从站:被监控的对象,接收监控调度命令,并可以返回自己的状态信息。状态信息的取得是依靠在车载从站中的GPS接收机来完成车辆位置和速度信息等的采集工作。 (3)通信链路:完成通信主站和车载从站的信息传递及通信主站和系统监控部分的信息交互。其中前者在本次设计中是以GSM手机模块做为通信的工具,而后者是
[单片机]
ARM7<font color='red'>嵌入式系统</font>在车辆调度中的应用
嵌入式系统中PCI总线仲裁器的设计方法
  嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电器工程师协会( U.K. InstitutiON of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。由于嵌入式系统通常进行大量生产。所以单个的成本节约,能够随着产量进行成百上千的放大。   PCI总线是现今最为流行的工业控制总线之一。它广泛地应用在计算机中,很多目标嵌入式设备中的
[嵌入式]
基于LPC2220微控制器嵌入式系统实现数据采集控制系统的设计
引言 随着计算机技术、电子技术和控制技术的发展,智能化、自动化、精确化的灌溉和施肥技术正逐渐取代传统的灌溉方式。在施肥过程中,需要在线检测肥料溶液的酸碱度和电导率以及灌溉压力、管道流量等,然后根据这些参数来控制电磁阀和水泵的运行达到自动灌溉施肥的目的。目前,常用的数据采集控制系统都是为某一实际应用而设计的,通用性和可扩展性差、数据存储能力不足,价格昂贵。因此基于周立功公司的ARM7核心板设计了一种通用的数据采集控制系统,并且已经应用到自动灌溉施肥系统中,能够满足稳定性,实时性以及大容量的数据存储的要求。该数据采集控制系统采用模块化设计,可以很方便的扩展和剪裁模块,同时只要对软件进行少量修改就可以方便的移植到其它应用系统中。 1
[单片机]
基于LPC2220微<font color='red'>控制器</font>和<font color='red'>嵌入式系统</font>实现数据采集控制系统的设计
实现Ethernet over SDH的嵌入式系统研究
摘要:简要介绍了Ethernet over SDH(EoS)系统的结构原理,阐述和分析了EoS的LAPS协议核心技术,给出了使用FPGA完成SDH网络和以太网的连接,从而实现EoS的嵌入式系统设计方案。 关键词:EoS;以太网;SDH;嵌入式系统 随着波分复用技术和高速以太网技术的发展,骨干网的带宽呈几何级数增长,已达到了吉比特甚至更高的水平。而连接骨干网和用户网的接入网的速率却没有太大的提高,已成为网络发展的瓶颈。要想实现高速、可靠的接入,使终端用户充分利用骨干网的巨大容量,必须采用新的高速接入技术。SDH技术已非常成熟,其安全性好,可靠性高;用SDH传输网络承载以太网IP包以实现网络用户的远程接入或异地局域网互连,是一种非
[应用]
MP32处理器在定制嵌入式系统中实现MIPS辅助系统
MP32处理器是业界第一款100%兼容MIPS? 2.0体系结构的软核处理器,适用于我们的所有FPGA和HardCopy? ASIC。这一灵活的应用类处理器在您的定制嵌入式系统中实现了软件和工具MIPS辅助系统,您还可以使用ALTEra的嵌入式知识产权(IP)内核以及Qsys系统集成流程。通过这些设计资源,您可以加速开发高度集成的低成本、低功耗MIPS定制嵌入式系统。 特别是Qsys系统集成工具,利用它您能够集成单个或者多个内核MP32处理器和Altera的系列嵌入式视频和网络IP内核,以及您自己的定制IP,从而迅速方便的开发定制解决方案。 Altera一直与业界最好的供应商——Altera?嵌入式联盟合作,提供同
[单片机]
单片机在嵌入式系统应用中的抗干扰措施
  单片机在嵌入式系统应用中,抗干扰性能是系统可靠性的重要指标,抗干扰设计是单片机系统研制中不可忽视的一个重要内容。本文根据笔者在实际工作中的体会,就单片机在嵌入式系统应用中的抗干扰问题进行探讨,并给出了排错设计、容错设计的一些方法和措施。   随着科学技术的迅速发展,单片机在各个领域中的应用越来越广泛。在众多的应用系统中共同面临的一个问题,就是它在应用系统中的可靠性,这就要求我们在设计时应根据现场具体情况,在硬件设计、线路板设计、软件设计等方面来采取相应的抗干扰措施。    一、抗电源干扰的措施   大部分单片机嵌入式系统都采用市电电源供电,在应用系统中一个很重要的干扰就来自电源。市电的各种干扰,如雷电、大容量感性负载的起
[单片机]
ARM嵌入式系统开发之发送过程的实现
要通过网卡发送数据时,上层协议实体调用函数hard_start_xmit(),在我们的驱动程序中这个函数被映射成DM9000_wait_to_send_packet()函数,正如它名字中wait所表示的那样,这个函数只完成了等待发送的工作,实际的发送是调用DM9000_hardware_send_packet()函数完成的,这也是前面提到的buffer分配机制的一种体现。 在具体介绍这两个函数之前,有必要简单说一说DM9000芯片发送数据的工作原理。前面已经讲过,为了增加网络吞吐量DM9000芯片内部集成了8K的buffer,芯片对这些buffer采用了内存页面管理方式,每页256B,内部寄存器支持简单的内存分配指令。对于内核
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved