用户中心

资讯 > 嵌入式系统

嵌入式Linux系统中MMC卡驱动管理技术研究

2007.07.08阅读 3291

  摘要  简明介绍MMC卡驱动程序的体系结构,设计并实现MMC卡的底层驱动;对传统的块设备驱动程序中的单块读写进行改进,实现MMC卡的集群读写,同时实现了卡的电源管理和即插即用功能。
  关键词 Linux MMC卡 底层驱动 集群读写 热拔插

  引 言
  MMC(Multitmedia Card)是一种体积小巧、容量大、使用方便的存储器,目前在手机等嵌入式系统中有着广泛的应用。MMC通过卡内的一个集成片内控制器对MMC卡进行控制和管理,当主机正确地驱动MMC卡后,就可以像磁盘一样方便地存取数据。本文所研究与实现的Linux驱动程序,以Intel XScale的PXA250为硬件平台,在遵循MMC卡通信协议规范的基础上,实现了卡的底层读写。然后对传统的块设备驱动程序中的单块读写进行了改进,实现了集群读写技术,提高了卡的读写速度;同时增加了电源管理功能,满足了嵌入式系统低功耗的需求;增加了即插即用功能CONTROL ENGINEERING China版权所有,方便了用户的使用。

  1 MMC卡驱动程序的体系结构
  MMC卡仅通过5个引脚与主机的控制器相连,通过串行协议与主机通信。MMC卡在硬件上的简单构造必然导致在实现驱动

程序上的复杂。依据MMC卡的通信掷议规范和Linux驱动程序的结构,把驱动程序原有的底层驱动、守护线程、单块读写进行改进和扩展,其结构层次再划分为底层驱动、守护线程、集群读写、电源管理及热拔插管理5个部分,如图l所示。

嵌入式Linux系统中MMC卡驱动管理技术研究如图

  图1中各部分的功能为:
  ①底层驱动——处理直接涉及与MMC卡硬件寄存器端口的操作,包括:命令的发布和响应、中断响应和处理、PIO或者DMA通道数据传输等。
  ②集群读写——将磁盘相邻数据块的读写请求合并起来一起发布读写命令,以加快数据读写,并在读写中实现并发控制。
  ③电源管理——实现MMC卡的低功耗管理。
  ④热拔插管理——实现MMC卡的即插即用功能。
  ⑤守护线程——响应文件系统的读写请求并启动对卡的1/O。


  2 MMC卡驱动程序的实现
  2.1 底层驱动
  底层驱动指的是直接对MMC卡进行操作。MMC卡采用串行的数据传输方式;是一种比较“精细”的卡www.cechina.cn,对它的操作比较复杂而且必须有准确的时序安排。以下从命令的发布和响应、中断响应和处理、DMA数据传输3个方面讲述如何进行底层读写驱动。

  (1)命令发布和响应
  MMC卡的操作是通过对其18个控制寄存器的读写实现的。首先,设置时钟起停寄存器MMC_STRCPL的最低两位为01.关闭MMC卡内部时钟。然后,设置中断屏蔽寄存器MMC_LMASK的最低7位都为1,屏蔽所有对MMC控制器的中断,再向指定的MMC控制寄存器中写入命令参数,如时钟频率设置寄存器MMC_CLKRTwww.cechina.cn,读写块数寄存器MMC_NOB,命令寄存器MMC_CMD等。最后,打开内部时钟,解除屏蔽的中断。这时,当前读写进程进入睡眠状态,等待中断处理程序的唤醒。

  (2)中断响应和处理
  MMC卡在数据传输请求、内部时钟关闭、命令发布完毕、数据传输完毕的情况下都会产生中断,但足MMC卡的控制器只通过1裉GPIO23的引脚与CPU相连,用于中断信号线的复用;因此在中断处理程序中,必须首先判断到底是哪种原因产生的中断,然后再进行相应的处理。这里,MMC卡在正确发布读写命令以后,系统会产生1次中断,中断处理程序中读取MMC_IREG的值,判断命令已经发布成功,同时唤醒等待命令完成的进程。

  读写进程被中断唤醒后,首先读取MMC卡响应寄存器MMC_RES中的状态信息控制工程网版权所有,再根据这些状态信息判断命令是否发布成功和卡的当前状态。如果这些状态信息表示命令执行成功,则通过读写缓冲寄存器MMC_RXFIFO和MMC_TXFIFO进行数据的读写(这里使用DMA进行数据传输,提高了数据的传输速度);如果返回的状态信息表明命令执行不成功,则根据状念信息进行相应的出错处理。

  (3)DMA数据传输
  驱动程序中对MMC卡的数据读写是通过DMA通道进行传输的。为了保汪操作的连续性,驱动程序对MMC卡的输入和输出缓冲各设置1个DMA通道,在进行实际数据传输时,读写进程也进入睡眠状态,等待DMA数据传输完毕后,被DMA中断唤醒。实现一次读操作的伪代码如下:
  Pxa_read_mmc(){

  关闭时钟,屏蔽中断;
  设置读写寄存器的内容; /*读写块数,起始块数,读写速度等*/
  打开时钟控制工程网版权所有,发布读写命令;
  Interruptible_sleep_on(); /*进入可打断睡眠状态,等待中断程序的唤醒*/
  被中断程序唤醒,打开DMA通道,进行数据传输,再次进入可打断睡眠状态;
  被DMA传输完毕中断唤醒,发布结束传输命令,结束数据传输;

  2.2 集群(clustering)读写和并发控制
  2.2.1 传统的块设备驱动

版权声明:版权归控制工程网所有,转载请注明出处!

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688