作者:张文
SD卡(Secure Digital Memory Card)是由日本松下、东芝及美国SanDisk公司于1999年共同开发研制,它是一种给予半导体记忆器的新一代记忆设备,具备存储容量大、数据传输速度快、移动灵活及安全性能高等优点。2000年成立了SD协会(Secure Digital As-sociation,简称SDA),会员阵容强大,其中包括IBM、Microsoft、Motorola、NEC、Samsung等,吸引了大量厂商参加。在这些领导厂商的推动下,SD卡已成为目前消费数码和嵌入式设备中应用最广泛的一种存储卡。
1 SD卡简介
SD卡外形如图1所示。
SD卡的技术是基于MultiMedia卡(MMC)格式,但SD卡比MMC卡略厚,且具有较高的数据传送速度。一般SD卡大小约为32 mm×24 mm×2.1 mm,但可以薄至1.4 mm,与MMC卡相同。
SD卡具有以下特性:可选的通信协议-SD模式和SPI模式;可变时钟频率0~25 MHz;通信电压范围2.0~ 3.6 V;工作电压范围2.0~3.6 V;卡片带电插拔保护;10万次编程/擦除;高速串行接口,支持双通道闪存交叉存取,最高读写速率10 Mbit/s。
2 SD卡操作模式
SD卡的接口可以支持两种操作模式:SD模式和SPI模式,通过这两种模式都可以实现数据的传输。SD模式是SD卡标准的读写方式,其采用6线制,使用CLK、CMD、DATO~DAT3进行数据通信,数据传输速率高,但是协议复杂,只有少数单片机才提供此接口;而SPI方式采用4线制,使用CS、CLK、Dataln、DataOut进行数据通信。单片机对SD卡进行读写时一般都采用SPI模式,因为大多数中高档单片机都提供SPI接口,易于实现。
具体通信过程中,主机只能选择其中一种通信模式。通信模式的选择对于主控制器来说是透明的,卡会自动检测复位命令的通信协议模式,而且通信模式一旦选定,系统在通电情况下不能改变。SD卡的引脚定义和内部结构如图2所示。
SPI模式下SD卡的引脚功能如表1所示。
3硬件设计
SD卡的操作模式选用SPI模式,单片机通过软件编程实现SPI模式的数据传输。在SPI模式下,单片机与SD卡的连接主要有4根线:包括时钟线,两根数据传输线和一根片选线。引脚1 (CS)作为SPI片选线,引脚2( DI)作为SPI总线的数据输入线,引脚7(DO)作为数据输出线,引脚5用作时钟线(CLK)。除了电源和地,保留引脚可悬空。
SD卡的10口是兼容TIL电平的,所以接51单片机完全可以正常工作,一般为了保证管脚的安全,会串接一个200 Q左右的电阻,SD卡的电压还是用3.3 V。如果是SD卡的输入脚,那么电平应该就跟51的输出脚一样是SV,而低电平则可以拉到OV。
SD卡SPI模式下与单片机的连接图如图3所示。
4软件设计
SD卡的软件设计主要包括两部分内容:SD卡的上电初始化过程和对SD卡的读写操作。SD卡在进行通信和数据读写时采用标准的SPI接口,若采用的51内核单片机不具备标准SPI接口,在通信过程中需要通过软件编程,实现对标准SPI接口通信协议的模拟。
SPI模式是一种简单的命令相应协议,主控制器发出命令后,SD卡针对不同的命令返回对应的响应。SD卡的命令列表都以CMD和ACMD开头,分别指通用命令和专用命令,后面接命令的编号。SD卡命令格式如图4所示。SPI接口的选用是在上电初始时向其写入第一个命令时进行的。以下介绍SD卡的驱动方法,只实现简单的扇区读写。
4.1命令与数据传输
SD卡自身有完备的命令系统,以实现各项操作,命令格式如图4所示。
4.2 SD卡的初始化
SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。在初始化过程中,SPI的时钟不能太快,否则会造成初始化失败;在初始化成功后,应尽量提高SPI的速率。在刚开始要先发送至少74个时钟信号,随后就是写入两个命令CMDO与CMD1,使SD卡进入SPI模式。SD卡初始化时序图如图5所示。
SD卡上电后,主机必须首先向SD卡发送74个时钟周期,以完成SD卡上电过程。SD卡上电后会自动进入SD总线模式,并在SD总线模式下向SD卡发送复位命令CMDO,此时应设置片选信号CS处于低电平态,使SD卡进入SPI总线模式。SD卡进入SPI工作模式后会发出应答引号,若主机回应信号为01,即表明SD卡已进入SPI模式,此时主机即可不断地向SD卡发送命令字CMD1并读取SD卡的应答信号,直到应答信号为00,表明SD卡完成初始化过程。
4.3 SD卡的读写操作
完成SD卡的初始化后即可进行读写操作,通过发送SD卡读写命令完成。
SPI总线模式支持单块(CMD24)和多块( CMD25)写操作。多块操作是指从指定位置开始写下去,直到SD卡收到一个停止命令CMD12才停止;单块写操作的数据块长度只能是512字节,SD卡对每个发送给自己的数据块都通过一个应答命令确认。SD卡每次读写数据的最小单位是1个扇区,即512个字节
扇区读是对SD卡驱动的目的之一。SD卡的每一个扇区中有512个字节,一次扇区读操作将把某一个扇区内的512个字节全部读出。过程很简单,先写入命令,在得到相应的回应后,开始数据读取。扇区读操作时序图如图6所示。
扇区写是SD卡驱动的另一目的。每次扇区写操作将向SD卡的某个扇区中写入512个字节,过程与扇区读相似,只是数据的方向相反与写人命令不同而已。扇区写操作时序图如图7所示。
5总结
SD卡以其优越的性能在嵌入式设备上得到广泛的应用,是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件。SD卡允许在两种模式下工作,即SD模式和SPI模式,本文选择51内核单片机作为主控制器,采用SPI总线与SD卡进行通信,详细介绍了SD卡的SPI接口的结构、时序和工作原理,讨论SPI模式单片机对SD卡的读写操作过程,并讨论了相关的设置、硬件连接和软件设计。
6摘要:
SD卡具有价格低廉、存储容量大、使用方便、通用性与安全性强等优点,这使得SD卡在现在的日常生活与工作中使用非常广泛,已经成为最为通用的数据存储卡。SD卡广泛应用在诸如MP3、数码相机等设备上作为存储设备;工业控制器及数据采集等设备也常需要使用SD卡提高数据存储的灵活性。通过接入SD卡等大容量存储设备,不但可以用于存储多媒体信息,还可以用于存放单片机系统中的应用程序。讨论如何利用单片机实现SD卡的读写。