基于单片机的SD卡读写系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SD卡读写系统设计
1文献综述
SD卡(Secure Digital Memory Card )中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。
SD卡由日本松下、东芝及美国San Disk公司于1999年8月共同开发研制。
SD卡为9引脚,目的是通过把传输方式由串行变成并行,以提高传输速度。
它最大的特点就是通过加密功能,可以保证数据资料的安全保密,它还具备版权保护技术,所采用的版权保护技术是DVD中使用的CPRM 技术(可刻录介质内容保护)。
大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。
长期以来,闪存卡(SD卡、MMC卡等)因其体积小、功耗低、容量大和非
易失性等特点,在嵌入式存储领域的应用越来越广泛。
特别是近年来,随着闪存技术的发展,存卡价格不断下降且存储容量不断提高。
当数据采集系统需要长时间地采集和记录海量数据时,应用SD卡作为存储介质是很好的选择,例如电能检测、温度湿度检测、病人心肺数据记录等。
近年来,单片机系统发展迅猛,这不仅体现在CPU处理能力迅速提升、外界设备与处理器交互能力快速提高,更体现在单片机系统的复杂性日益提高、系统存储容量急剧增大。
这些变化对于数据操作的灵活性提出了越来越高的要求。
因此,如何系统地、灵活地管理数据文件就成了单片机系统开发者无法回避的问题。
文件系统的使用使开发者获得“路径”的概念,从而回避了存储介质的地址空间,不用每次都从头对物理介质进行操作。
文件系统提供清晰明了的API 函数,使上层应用层不再关心底层存储介质,而方便地利用标准接口访问底层存储器。
标准化的接口和层次分明的程序增加了程序的可移植性。
因此在单片
机系统中植入文件系统是单片机系统发展的必然结果。
由于该系统是通过SD卡模组向SD卡写入一系列文件,这些文件需要被Windows 系列操作系统正确识别,并进行读写操作,因此,我们选择了应用最为广泛的FAT16文件系统。
FAT16是Microsoft 开发的文件系统,是一种技术成熟、结构简单、系统资源开销小、易于在单片机系统上的硬件平台上实现的文件系统。
它是Microsoft 公司在其MS2DOSS作系统中采用的文件系统,具有出色的文件管理性能,能被当前大多数操作系统识别。
因此,SD卡与FAT16文件系统相结合是嵌入式数据存储、记录系统的理想方案, 可以将采集记录的数据直接在PC 上读取和处理。
本文选用基于MCS-251架构的AT89S52单片机,将FAT16文件系统移植进单片
机,并开发了一套SD 卡读写系统。
此读写系统应用在了一套基于AT89S52 和SD 卡的存储系统上, 实现了数据文件按FAT16 文件系统存储规则存储。
通过串口将本系统连接到PC上,在Win dows操作系统上就能直接读取SD卡上的数据文件。
这套文件系统可以很方便地应用在各种工业现场以及小型的单片机数据采集系统中, 在数据采集存储方面更加灵活、稳定。
2.选题依据、主要研究内容、研究思路及方案
2.1系统方案介绍
本系统采用MCS251架构的AT89S52单片机。
AT89S52是一种低成本、低功耗、高性能的CMOS8 位微控制器, 具有8 KB 在系统可编程Flash 存储器。
应用
AT89S52读写SD卡,首先要确定它们之间的通信方案。
SD卡有2种可选的通信协议:SD模式和SPI模式。
SD模式是SD卡的标准读写方式,选用此模式需要选择带SD 卡控制接口的MCU或者额外的SD卡控制单元;SPI模式通过SPI 总线完成SD 卡与主控制器的通信。
AT89S52 没有集成SD 卡控制器, 为了不增加额外的SD 卡控制单元硬件成本, 本设计方案采用SD 卡的SPI 通信模式。
虽然AT89S52 也没有集成SPI 接口模块, 但可以用软件的方式模拟SPI 接口时序。
另外一个要解决的问题是SD卡与AT89S52的电平匹配。
SD卡的逻辑电平相当于3. 3 V 的TTL电平标准,AT89S52的逻辑电平为5 V CMOS电平。
解决电平匹配问题的原则有2 条:一为输出电平器件输出的高电平的最小值,应该大于接收电平器件识别为高电平的最低电压值;另一条为输出电平器件
输出低电平的最大电压值,应该小于接收电平器件识别为低电平的最高电压值。
考虑到SD卡在SPI工作模式下,数据的传输都是单向的,这样可以在单片机向SD 卡传输数据时采用晶体管加下拉电阻的方法, 基本电路如图1 所示。
而在SD 卡向单片机传输数据时可以采用直接连接, 因为它们之间的电平刚好满足上述的电平兼容原则,既经济又实用。
这个方案需要双电源供电,1个5 V电源,1个
3.3 V 电源。
2.2AT89S52 与SD卡接口电路设计
2.2.1 SD 卡接口规范
SD卡工作在2. 7〜3. 6 V 电压下,图2是普通SD卡
的结构示意图和引脚排列图,表1列出了各引脚在SPI 模式下的定义和功能描 述。
主机与SD 卡之间通过指令来实现交互。
222 接口电路设计
AT89S52内有256字节的RAM ,由于SD 卡数据的读出与写入是以块 为单位的,而
每块为512字节,所以需要在单片机的最小系统
上扩展1片
RAM 本系统选用的RAM 芯 片 为HM62256容量32KB 。
系统硬件电路 如图3所示。
图3系统硬件原理图
3.3V
5V
TkQ 0
I 9013 - 3・3¥输出
4.7kf i
一
霾
SD 卡扌 陵口
器
图i 电平转换电路
图2 SD 卡结构示意图
SD CS
Dataln
Vssl VCC CLK Vss2 DaraOut
5V
〒
匹配 转换 33V
电平转换
电路
AT89S52
SD_CE SD_S 匚 K : SD DI SD DO CEHO < TxD > J H3.3VCRSIZ>-
lr 30pFx2 F IT
P1.0 PO.O PLI P0.1 Pl.2 P0.2 PL3 P0.3
PL4 P0.4 PL5 P0.5 PL6 P0.6 PL7 P0.7 ALE RxD TxD RST RD WE XI X2
P2.7 P2.6 P2.5 P2.4 P2.3
P2.2 P2.1 P2.0 1L05952MHZ
AO/DQZ A1/D1>
A2.DV
A37DJ/ A4/LJV 心/I 少 A6/Dd/ A7/D7Z
A15 y A14 / A13 > A12 All > A10 / A9 > A8> vcc
74LS57310.1P.F co 1 7 E ccQQ:db V D E O1 7N ODD …D G —Z vcc
HM~
62256
j J
ol 2 AAA
A13 A14 D7 WR RD GND CS L
<wE> <KD>
接口驭动电路
存储单元
O.lpf
表1 SPI模式下SD卡引脚定义
2.3软件设计
2.3.1 FAT16 文件系统[224]
FAT16文件系统的存储结构如图4所示。
磁盘上的数据按照其不同的特点
和作用大致可分为5 部分:MBR(Main Boot Record)区、DBR(DosBoot Record)
区、FAT( File Allocatio nTable) 区、DIR(Directory) 区和DATA 区[2], 如
图4所示:
图4 FAT16存储结构示意图
其中,MBR区位于物理磁盘0扇区,DBR区位于逻辑磁盘0扇区。
MBR区与物理磁盘一一对应,其余四个区和逻辑磁盘一一对应。
SD卡不支持多分区,因此以上五个区在SD卡中都是唯一的。
主引导记录区(Main BootRecord ,MBR) 位于物理磁盘第零扇区。
MBR中
有硬盘分区记录表(Disk Partition Table ,DPT) ,DPT 记录了各逻辑分区的相
对偏移。
SD卡不支持多分区,在1个SD卡中只有1个分区,因此在SD卡上的DPT只有1个分区表项被占用。
系统引导记录区(DOS Boot Record ,DBR)位于磁盘逻辑分区的第0扇区,是操作系统可以访问的第1个扇区,它其中包含1个称为BPB(Bios Parameter Block)的本分区参数记录表。
BPB记录着本分区的根目录大小、FAT个数、磁盘介质描述、分配单元大小等重要参数。
BPB结构如
表2所示:
表2 BPB结构表
DBR之后是FAT( File Allocation Table , 文件分配记录表),记录文件在磁盘上的存储位置。
在Windows系统中,文件存储的单位是簇而不是字节,1个文件不是连续地存放于磁盘的某一区域,而往往分成若干段,像链子一样存放。
FAT表记录了每个文件的起始簇号、后继簇号
和终止簇号。
FAT表中的每个表项对应数据存储区中的1个簇,由于FAT表对文件管理的重要性,FAT表有1个备份。
DIR是根目录区,紧接着第2个FAT表(FAT2)之后,记录着根目录下每个文件的起始簇号、大小等属性。
操作系统根据DIR中文件的起始簇号和大小,结合FAT 表来定位文件。
FAT16文件系统中1个文件的存储示意图如图5所示。
根目录:
FAT :
! f
数据区:
图5文件存储示例
232 SD卡指令规范[1 ]
图6 SD卡指令格式
单片机通过相应指令与SD卡进行交互。
SD卡有特定的指令格式,都是6字节长,最高有效位(MSB)传输优先,如图6所示。
SD卡指令的最高2位“01”是SD卡指令的开始标志,最后1位“ 1”是结束标志。
6位的指令是SD卡的指令序号,例如CMD17的6位指令即17的二进制表示010001。
指令参数占4字节,具体内容参照SD卡规范。
7位CRC校检的生成多项式为G( x) = x 7+ x3+ 1。
事实上SD卡在进入SPI模式后,不再通过CRC码来确认指令的传输正确与否,指令中的7为CRC校检,只在SD模式下起作用。
因此仅SD卡上电后的第1条切换SPI模式指令CMD0需要校检码, 而此校检码是固定的0x95 ,其他指令的CRC均置1即可。
SD卡响应有4种格式,不同指令对应不同响应,具体内容可参看SD卡规范。
2.3.3SD卡读写驱动
(1)SPI时序模拟
用软件来模拟SPI总线的具体方法是:将SCK的初始状态置0 ,允许接收后(即CS置0)将SCK置1 ,这样单片机由DI线输出1位数据到SD卡;接着再将SCK置0 ,单片机由DO线从SD卡读1位数据。
至此,模拟1位数据输入输出完成。
此后再将SCK置1 ,依次循环8次,完成SPI总线1字节数据的输入输出。
以下是本系统软件模拟SPI时序的汇编代码。
以通
用寄存器A作为函数参数,实现将寄存器A中的数据通过SPI总线发送出去, 并将从SPI总线读到的数据存到寄存器A中。
/*接口定义* /
CS BIT P1.0
SCK BIT P1. 1
DI BIT P1.2
DO BIT P1.3
/ * SPI总线读写函数,A为传递参数,用到R4 * /
SPI_RW: MOV R4 , # 8
SPILOOP :CLR CL K
CLR DI
JNB ACC. 7 ,AAA
SETB DI
AAA : SETB CL K ;在时钟上升沿发送一位数据
MOV C ,DO
RLC A
CLR CL K ;在时钟下降沿读入一位数据
DJNZ R4 ,SPILOOP
CLR CL K
RET
(2)SD卡的初始化
SD卡的初始化流程如图7所示。
SD卡上电延时74个时钟周期后[1 ],单片机向SD卡发送复位命令CMDQ使SD卡进入SPI模式。
之后循环发送激活SD 卡指令
CMD1 ,直到接收到SD卡响应的第0位为0。
(结束)
图7 SD卡初始化流程
(3)SD卡数据块的读写
完成SD 卡的初始化后,就可以对SD 卡进行读写操作。
读写操作都是通过 指令来完成的:单块写命令CMD24 ,多块写命令 CMD25单块读命令CMD17,多 块读命令CMD18单块读写时,数据块的长度为512字节,多块读写时SD 卡收 到1个停止命令CMD12后停止读写。
图8、图9分别是单块读、 写SD 卡的 软件流程。
图 10 FAT16 文件读写流程
发送512字节数据
发送2字节CRC 码 2.4 FAT16文件读写
按照FAT16文件系统的文件组织规范 FAT16文件读写的软件流程如图10所示。
,编写读文件函数和写文件函数。
SD 匸初始化
读乍a 洽写文件 I 搜屛垂J
搜寻日录|
[创建新文件]
读文件]
C 结束]
发送写指令CMD24
发送数据起始标志 图8读SD 卡流程
接收SD 卡响应
C 结束2)C 返回J
图9写SD 卡流程
Y
3.结语
通过串口将本系统连接到PC 进行测试, 结果表明本系统完成了对FAT16 文件系统下文件的读写。
当采用11. 059 2 MHz 晶振时, 读写速度和质量都令人满意。
本系统采用51架构的AT89S52单片机,实现了基于FAT16文件系统的读写SD 卡设计, 整套系统成本较低, 在嵌入式数据记录和存储中有广泛应用前景。
参考文献[ 1 ] SanDisk Corporation. Secure Digital Card Product Manual
Revision 1. 7 ,2003.
[ 2 ] 关硕,关济实. FAT16 文件系统在单片机存储系统上的实现
[J ] . 科技信息:科学教研,2008 (13) .
[ 3 ] Microsof t Corporation. FA T : General Overview of On2Disk Format Version 1. 03 ,2000.
[ 4 ] Microsof t Corporation. How FAT Works : Local File Sys2
tems[OL ] . ht tp :/ / technet . microsof t . com.。