Linux SD卡驱动分析
摘要:随着计算机硬件的发展及数据量的增加,对存储设备的要求也越来越高。因此sd 卡和linux 操作系统以其优越的性能, 在嵌入式设备上得到了越来越广泛的应用。该文以三星的s3c2440芯片为基础平台,描述了在linux系统中如何实现mmc/sd卡控制器的驱动,以及它与care部分、core部分之间的关系。 关键词:linux设备驱动 mmc/sd卡 s3c2440 中图分类号:tp316.81
sd card driver analysis in the linux operation system hong li quan li
(college of information, wuyi university,jiangmen city, guangdong province 529020)
abstract: with the development of hardware of computer and the increasing of data.the requirement of storage device is also developing.because of its characteristic,sd card and the linux ope-rating system with its superior perfo-rmance on embedded devices has been more widely used. in this paper, bas-ed on platforms of the s-amsung s3c2440 , describes how to implement mmc / sd card d- river, and some of it with the care, core part of the relati-onship .
keywords: linux device driver mmc/sd card s3c2440
1 sd卡简介
sd卡是一种基于半导体快闪记忆器的新一代记忆设备,被广泛地用于便携式设备,例如移动电话、数码相机、个人数码助理(pda)和多媒体播放器等。sd卡拥有体积小,容量大、数据传输快、移动灵活及安全等优点。因其价格低廉,应用也越来越广泛,本文重点介绍基于s3c2440 的sd卡控制器驱动。
sd卡基于9针接口,最大可工作在25mhz。sd卡的引脚说明如表1.sd 卡的引脚具有双重功能,即可以工作在sd模式,也可以工作在spi模式。
表1 sd卡的引脚说明 针脚 名称 类型 描述
1 cd dat3 i/o/pp 卡监测数据位3 2 cmd pp 指令/回复 3 vss s 地 4 vcc s 供电电压 5 clk i 时钟 6 css2 s 地
7 dat0 i/o/pp 数据位0 8 dat1 i/o/pp 数据位1 9 dat2 i/o/pp 数据位2 1.1 sd卡驱动程序
sd卡的驱动包括三部分:care驱动部分、core部分、host驱动部分。
1.2 core部分
core驱动部分完成不同协议和规范的实现,设置有关sd卡相关的状态或修改状态、修改寄存器等操作并为host提供接口函数。整个mmc/sd模块中最重要的部分是core核心层,他提供了一系列的接口函数,对上提供了将主机驱动注册到系统,给应用程序提供设备访问接口,对下提供了对主机控制器控制的方法及块设备请求的支持(引用的借口函数在host部分详细介绍)操作流程如下:(引用网络)
(1)取得总线。(2)检查总线操作结构指针bus_ops,如果为空,则重新利用各总线对端口进行扫描,检测顺序依次为:sdio、normal sd、mmc。当检测到相应的卡类型后,就使用mmc_attach_bus()把相对应的总线操作与host连接起。
(3)初始化卡接以下流程初始化: a、发送cmd0使卡进入idle状态 b、发送cmd8,检查卡是否sd2.0。sd1.1是不支持cmd8的,因此在 sd2.spec中提出了先发送cmd8,如响应为无效命令,则卡为sd1.1,否则就是sd2.0(请参考sd2.0 spec)。 c、发送cmd5读取ocr寄存器.
d、发送acmd55、cmd41,使卡进入工作状态。mmc卡并不支持acmd55、cmd41,如果这步通过了,则证明这张卡是sd卡。 e、如果d