新闻中心

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

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

作者: 时间:2011-09-06 来源:网络 收藏
本文Host的驱动程序采用流式接口驱动模型。

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

  驱动程序要相应的XXX_Open(),XXX_Close(),XXX_Init(),XXX_Deinit(),XXX_IOControl(),XXX_Read(),XXX_Write(),XXX_Seek(),XXX_PowerUp(),XXX_PowerDown()等接口函数,其中XXX为设备驱动的前缀,应用程序可以通过文件操作来控制设备。

  为了减少了Host驱动程序的复杂性,使其具有较好的可移植性,采用HostDDK,它在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,准备进行中断响应服务。

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


评论


相关推荐

技术专区

关闭