基于SPI的SD卡驱动软件设计精Word格式.docx
- 文档编号:21334400
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:6
- 大小:22.04KB
基于SPI的SD卡驱动软件设计精Word格式.docx
《基于SPI的SD卡驱动软件设计精Word格式.docx》由会员分享,可在线阅读,更多相关《基于SPI的SD卡驱动软件设计精Word格式.docx(6页珍藏版)》请在冰豆网上搜索。
按照SD卡规
范的描述,SD卡提供了两种通信协议:
SD模式和SPI模式,驱动可以选择任意一种模式来实现。
目前基于SPI的SD卡驱动研究还比较少,研究基于SPI总线模式的SD卡驱动软件设计并分析SD卡的初始化过程和读写过程。
摘
要:
0引言
SD卡(SecureDigitalMemoryCard是由日本松下、
东芝及美国Sandisk公司于1999年8月在MMC(Multi
MediaCard基础上共同研制出来的一种多功能存储卡。
SD卡体积很小,重量只有2克左右,但是却拥有大容量、数据传输快、极大的移动灵活性和很好的安全性等优点,因此被广泛应用于便携式的设备上。
SD卡提供了两种通信协议:
SD模式和SPI模式,可以选择任意一种模式来实现,模式的选择在上电后的第一个复位命令中进行,由主机到SD卡的片选信号(CS信号决定,本设计研究的是SPI模式的SD卡。
SPI接口(Serial
PeripheralInterface是一种全双工的、基于字节传输的同步通信协议,芯片管脚上只需要占用4根线,既节约了芯片管脚,又为PCB的布局节省了空间,简单易用,因此越来越多的芯片开始集成这种通信协议。
SPI总线有一个缺陷,就是缺乏应答机制以确认是否接收到数据。
基于SPI模式的SD卡驱动,每个命令和数据的发送都包含一个应答,用于指示命令或数据传输是否成功,有效地弥补了SPI总线传输的缺陷。
1驱动设计
1.1SPI设备驱动框架
由于SPI总线工作于主从模式,因此,设备驱动框
架中必须包含一个Master结构和一个Slave结构。
由于在一条SPI总线上,只能有一个Master设备,但是可以包含多个Slave设备,因此,通常在使用SPI总线传输的时候,我们往往将Master当作一个微控制器,控制一到多个Slave的数据传输。
SPI设备驱动框架,包含了所有SPI设备的注册机制和设备管理机制,以及SPI设备的数据传输接口,通过函数指针回调的方式来执行具体硬件相关的处理细节。
在系统初始化的时候,我们需要先在当前处理器上注册一个SPI控制器,作为SPI总线的主设备。
然后当应用程序需要使用SPI总线进行数据传输的时候,就可以将数据存储设备作为一个SPI从设备注册到主设备上,由主设备控制从设备进行数据传输。
一个主设备可以支持多个从设备,因此多个SPI设备就可以直接通过该框架注册到SPI系统中进行串行数据传输了。
SPI总线按照单字节串行传输的方式来传输数据,一次只传输一个字节,不管是发送还是接收。
字节传输时默认按高位在前,低位在后的传输方式,当然也可以通过配置相关寄存器以采用低位在前的传输方式。
但是有一点需要注意的是,在一次数据传输过程中,当传到最后一个字节时,最后一个字节的传输必须按照低
2012.02
位在前的特殊传输方式(LST,以标示本次数据帧传输的结束。
由于SPI总线采用全双工的通信方式,由两条单向数据线分别担负两个数据传输方向,因此数据的发送和接收可以同时进行。
1.2SD卡设备驱动
(1SPI模式下的SD卡通信原理
在SPI模式下,SD卡作为一个SPI设备连接到SPI控制器上。
在SPI模式下,SD卡同样拥有四根信号线:
CS(主机到卡的片选信号、CLK(主机到卡的时钟信号、DataIn(主机到卡的数据信号、DataOut(卡到主机的数据信号。
SPI控制器作为该SPI系统的主机,通过GPIO连接SD卡的CS片选信号来对SD卡进行片选,SD卡的时钟由SPI控制器提供。
主机与SD卡之间通过DataIn和DataOut数据线进行数据交换,如图1所示。
图1SD卡与SPI主机连接示意图
在SPI模式下,SD卡采用“命令+应答”的方式工作,主机发起总线传输时,总是假设CS信号是低电平有效的。
对于每个命令,SD卡都会有一个相应的应答返回,即使在传输出错时,也会发回一个错误应答。
同样的,对于每个数据块的传输,SD卡都会产生一个特殊的数据应答。
SD卡默认工作在SD模式下。
为了使SD卡进入SPI模式,需要在发送第一个RESET命令(GO_I-DLE_STATE命令,即CMD0时使CS片选信号为低电平有效。
SD卡正确响应RESET命令之后,即进入IDLE状态。
(2SD卡驱动实现
SD卡采用命令驱动的工作方式,通过发送命令和等待应答来与SPI主机进行通信。
在开始数据传输之前,SD卡也要先发送数据传输命令并等待正确应答之后,才开始传输。
每个SD卡命令都由6个字节(48位组成,其中每个位域的含义如表1所示。
在SD卡命令中,命令类型通过commandindex字段来识别。
在SPI模式下,SD卡可以不采用CRC校验来保护数据,但是命令、应答、和数据的CRC位仍然需要保留,只是传输过程中可以忽略它们。
不过有两个例外:
CMD0和CMD8。
CMD0必须有CRC校验,因为它是负责从SD模式切换到SPI模式的,而在SD模式下,
CRC校验是必需的。
CMD8用于识别SD卡的版本是1.0还是2.0,该命令的CRC校验也是必需的。
在SPI模式下,可以通过CRC_ON_OFF命令(CMD59来打开或关闭CRC校验。
对于每个命令,SD卡都会产生一个相应的应答信号。
SPI模式下的应答,主要有如下几种:
R1、Rb1、R2、R3、R7、DataResponse。
SD卡对物理层而言,它是一个SPI设备,与SPI总线相连,而对应用程序而言,它是一个块设备,通过文件系统实现数据管理。
因此,整个SD卡系统呈现一个典型的分层管理,可以分为物理层、主机传输层和应用
层,如图2所示:
图2SD卡系统结构
从图2可以看出,SD卡提供给应用程序的读写接
表1SD卡命令格式
趪
趹
口,主要通过文件系统的相关操作来提供。
当然,应用程序也可以直接通过SD卡驱动程序直接进行卡上二进制数据的读写,但是这毕竟是少数,因为这样做会破坏卡上的文件系统,所以通常只有对SD卡的读写烤机测试程序才可能这么做。
一般的应用,还是通过文件系统操作来读写SD卡数据的。
1.3系统流
在上层应用中,应用程序通过文件系统来对SD卡进行读写操作,SD卡作为一个块设备与文件系统进行交互。
在底层的读写操作中,SD卡则作为一个SPI设备与SPI主机进行交互,通过SPI总线实现主机到卡和卡到主机之间的数据传输。
整个流程如图3所示:
图3SD卡读写过程数据流图
2SD卡初始化
本设计的SD卡驱动,必须支持SD规范标准2.0,并且能够兼容1.0标准。
在规范2.0上,定义了两种类型的卡:
标准容量卡(存储容量在2GB以内和大容量卡(存储容量大于2GB并且在32GB以内。
SD卡的最大块长度为512字节,不管CSD寄存器中的READ_BL_LEN字段设置为多少。
在标准容量卡中,如果数据块的partialaccess属性(CSD中的READ_BL_PARTIAL字段打开的话,块长可以在1个字节到512字节之间。
而在大容量卡中,一个数据块只能固定为512字节长度。
在SD卡的初始化过程中,就要识别出卡的规范版本以及卡的类型了。
根据SD规范2.0的描述,SD卡上电后的初始化流程如图4所示。
SD卡上电后默认处于SD模式,因此在发送CMD0进行复位之前,必须确保CS信号处于低电平有效,这一点由硬件电路设计来保证。
由于1.x版本的SD卡无法识别CMD8,因此可以通过该命令的应答来识别出当前SD卡使用的规范是1.x版本还是2.0版本。
对于2.0版本的SD卡,在初始化过程中,OCR寄存器需要读两次,第一次用于检查支持电压,第二次用于判断卡的类型为标准容量卡还是大容量卡。
而1.x版本的SD卡由于不支持大容量卡,只需要检查电压即可。
考虑到在SD卡上电初期,电压的上升过程大约需要64个时钟周期才能达到SD卡的正常工作电压,这个过程称为Supplyrampuptime。
另外,还需要大概10个时钟周期的时间来与SD卡进行同步。
因此,SD卡上电之后,至少需要先延迟74个时钟周期,之后才能开始发送CMD0进行复位操作和SPI模式的选择。
SD卡按照上述流程完成初始化之后,就可以对SD卡进行正常的数据读写操作了。
3SD卡读写
SD卡驱动最主要的任务,就是实现数据的读写操作。
由于SD卡驱动采用“命令+应答”的形式和SPI主机通信,因此每次数据传输之前,都要先发送相应的读写命令并等待正确应答,才能进行数据传输。
和SD卡读写相关的几个主要命令集中列于表2:
表2SD卡数据读写相关命令
SD卡数据传输通过数据令牌(DataToken进行,所有字节都按照高位在前(MSB的传输方式。
数据令牌的长度在4字节到515字节之间,并且按照如表3格式组织。
对于单块读、单块写和多块读命令而言,数据令牌格式如表3:
表3SD卡数据令牌格式
对于多块写命令,数据令牌格式则采用如下格式:
对于每一个写入块的第一个字节,如果是数据传输则为StartBlock(0xFC,如果是停止传输的指令(CMD12则是StopTran(0xFD。
多块连续写操作的结束,由
CMD12负责。
当读操作发生错误时,SD卡会返回一个数据错误应答来替代。
这个错误应答只有一个字节,高4位为
0,低4位指示了一些错误位,格式如表4:
表4数据传输错误应答格式
读单块的过程很简单:
首先发送读单块命令,正确应答后则从SPI总线接收一个数据块,保存在内存缓冲区中供应用程序使用。
读多块的过程和这个过程类似,区别在于读多块过程结束后(或读过程出错时,需要使用CMD12通知SD卡停止数据传输。
写单块的过程比读单块过程,多了一个检查数据应答的过程,以便确认数据是否正确写入SD卡中。
写多块的停止,同样通过CMD12完成。
在多块数据写入
图4SD卡初始化流程
趽
ConstructionofLibraryManagementSystemBasedonDelphi
WANGCheng1
ZHAOBI-fang2
(1.WellsFargoBank,WestDesMoines,50266,USA;
2.ASDIInc,WestDesMoines,50266,USA
Keywords:
LibraryManagement;
ManagementSystem;
SoftwareEngineering
Howtoscientificallymanagethelibraryisnotonlyrelatedtotheknowledgeoftheconvenience
ofthereader,isalsorelatedtothedevelopmentofthelibrary,therefore,todevelopacompre-hensivelibrarymanagementsystemwillbecomeessential.DescribestheenvironmentintheBorlandDelphi7.0adoptionofthe"
top-downmasterplan,fromthebottomupapplicationde-velopment"
thestrategydevelopmentprocessofthissystemindetailsandputsforwardinforma-tioninlibrarymanagement,resourcesharingofbasicobjectives,soastopromotethepaceto-wardsthedigitallibrary,andpresentssystemarchitecturedesignandfunctionaldesign,frombookstorageregistertothequeryview,fromthelibrarycardissuedtoborrowbooks,formingacompletelibrarymanagementsystemsolutions,softwareengineeringfromtheperspectiveofascientificandrigorouselaboration,andachievesthroughDelphi.
Abstract:
DesignofSDCardDriveSoftwareBasedonSPI
YANGhuai-de1,
PIAOxi-nan2
(1.DepartmentofComputerEngineering,DongguanPolytechnic,Donguan523808;
2.CollegeofCity,DongguanUniversityofTechnology,Dongguan523106
SPI;
SDCard;
DriveSoftware
SDcardisaflashmemorystoragemediabasedonnewsemiconductor,widelyusedinportable
devices.DescribedinaccordancewithSDcardspecification,SDcardprovidestwocommunica-tionprotocols:
SDmodeandSPImode,thedrivercanchooseeithermodetoachieve.CurrentSPI-basedSDcard-drivenresearchisstillrelativelysmall,onthebasisoftheSPIbusmodede-signsSDcarddriversoftwareandanalysestheinitializationandread-writeprocessofSDcard.
完成后,应当通过ACMD22命令获取成功写入的块数,和需要写入的块数进行比较,以此判断多块连续写是否完全成功了。
4结语
本文着重研究了基于SPI的SD卡驱动软件设计
及实现,给出了驱动软件设计的整个框架图,并详细讨论了SD卡的初始化和读写操作,对后续功能的完善和开发具有很好参考价值。
参考文献
[1]赵炯.Linux内核完全注释.同济大学,2003
[2]邵自然,吕格莉.基于嵌入式Linux的SD卡驱动程序设计
与实现[J].计算机时代,2006(8:
37~39
[3]魏永明,耿岳,钟书毅.Linux设备驱动程序[M]3版.北京:
中国电力出版社,2006
[4]李亚峰.ARM嵌入式Linux设备驱动实例开发[M].北京:
中国电力出版社,2008
[5]SDGroupSD-MemoryCardSpecificationsPartII[EB/OL].2009.05.02.
(上接第75页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 SPI SD 驱动 软件设计
![提示](https://static.bdocx.com/images/bang_tan.gif)