新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式系统的SD控制器设计实现

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

作者:时间:2011-09-06来源:网络收藏

引言

本文引用地址:http://www.eepw.com.cn/article/150261.htm

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

本文所采用的开发平台是基于SAMSUNG公司的S3C2410AARM微处理器,利用处理内部的控制模块,采用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的驱动程序模型主要有两种类型:流式接口驱动和本地设备驱动。流式设备驱动向上层提供统一的流式设备接口,而本地设备驱动可根据具体设备要求提供相应接口。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭