我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 615|回复: 0

ATmega128L单片机的Micro SD卡读写 - 单片机/处理器 - 电子工程

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:09:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<strong>引言</strong>

随着工业控制系统功能的增强,系统对于存储介质的安全、容量、性能的要求越来越高。Micro SD卡是在SD卡和Mini SD卡基础上发展起来的一种多功能存储卡,具备串行和随机存取能力,可以通过专用优化速度的串行接口访问,数据传输可靠,安全性好,传输速度快,存储容量大,体积小,被列为目前全球最小的迷你存储卡。Micro SD卡支持SD模式和SPI模式。随着高性能单片机的性能不断提高,利用高性能、低功耗的AVR 8位ATmegal28L单片机的串行外设接口SPI与Micro SD卡之间进行高速同步数据传输,设计开发了一种嵌入式文件系统。

<strong>1 硬件电路设计</strong>

MicrO SD卡的接口可以支持两种操作模式:SD模式和SPI模式。主机系统可以选择其中任一模式。SD卡模式允许4线的高速数据传输,传输速率高,但是大部分单片机无此接口,使用软件模拟协议复杂。SPI模式使用简单通用的SPI通道接口就可实现数据传输,目前大多数单片机提供SPI接口。SPI模式的优势在于可以使用标准主机,从而把外设减少到最低。SPI模式相对于SD模式的缺点是损失了传输速度;但是目前的微处理器的处理速度越来越高,利用SPI模式大都能满足工程需要。

Micro SD卡要求用全双工、8位的SPI操作。

ATmegal28L单片机和Micro SD卡之间只需要4根信号线就可以完成数据的读写,当CS信号线为低电平时,主机开始所有的总线传输。数据从单片机的MOSI引脚同步输入Micro SD卡的DI引脚,并由Micro SD卡的DO线同步输入单片机的MISO引脚,数据在CLK信号的上升沿同步输入和输出。在每个数据传输的结尾还必须提供8个额外的时钟,以允许 Micro SD卡完成任何未完结的操作。由于Micro SD卡的电压为3.3 V,所以选择需要支持3.3 V的I/O端口输出的ATmegal28L单片机。另外,使用SPI模式时,为了防止在无卡接人或卡驱动器呈高阻态时总线悬空,根据SD卡规范,这些信号需要在主机端用10 kQ~100 kΩ的上拉电阻,其硬件连接电路如图1所示。


<ignore_js_op>





2010-2-22 15:43:47 上传
<strong>下载附件</strong> (7.3 KB)




</ignore_js_op>


<strong>2 软件设计</strong>

2.1 Micro SD卡初始化为SPI总线模式

ATmegal28L单片机包含一个串行外设接口SPI,可以方便地对Micro SD卡接口进行配置。为了配置时钟和数据长度,需要对SPI控制寄存器SPCR和SPI状态寄存器SPSR进行设置:使能SPI,选择单片机为主机模式,时钟上升沿锁存数据,并且对SPI时钟进行设置。Micro SD卡的SPI模式通信由主机控制。每一个指令或数据块由8位的字节和CS标志构成,SPI通信由指令、响应和数据组成。主机先将Micro SD卡的片选CS置低,激活MicroSD卡进人工作状态。

刚上电时,Micro SD卡缺省使用专有的SD总线协议。将Micro SD卡切换到SPI模式,主机需要发出命令(2MD0(GO_IDLE_STATE)。Micro SD卡会检测到SPI模式选择信息,因为卡选择(CS)引脚在该命令和其他所有SPI命令传送过程中都保持为低电平。Micro SD卡以R1作为响应。空闲状态位被置为高电平,此时Micro SD卡进入空闲状态,此阶段的SPI时钟频率不能超过400kHz(将SPCR寄存器设置为0x53)。Micro SD卡进入SPI模式后,主机应该先发一条初始化指令CMD1。此时可将SPI频率设置为高速模式(将SPCR寄存器设置为0x50)。然后发送命令 CM1359决定是否开启CRC校验,设置读、写块数据长度,最后延迟8个时钟后返回。MicroSD初始化流程如图2所示。


<ignore_js_op>





2010-2-22 15:43:47 上传
<strong>下载附件</strong> (9.54 KB)




</ignore_js_op>


2.2 Micro SD卡读写单块数据

从Micro SD卡中读取一个数据块只需要主机发送CMDl7(READl_SINGLE_BLOCK)命令,并将起始地址作为参数(此地址必须和介质上一个块的起始位置对齐),然后.Micro SD卡会验证这个字节地址,并以一个R1命令作为响应。完成了Micro SD卡读取操作后,先发送一个起始数据命令,接着发送固定数量的数据,最后是两个字节CRC校验。

从Mimro SD卡中写入一个数据块和读取数据块相似,需要主机发送CMI)24(wRITE_BLOCK)命令启动写操作过程,Micro SD卡将以R1命令响应格式进行应答。如果命令响应,则进行写操作,主机发送起始令牌,然后发送固定数量的数据字节(512字节),返回一个数据响应令牌指示需要写入的数据是否完成,最后是两个字节的CRC校验,读写单块数据流程如图3所示。


<ignore_js_op>





2010-2-22 15:43:48 上传
<strong>下载附件</strong> (11.77 KB)




</ignore_js_op>


2.3 Micro SD卡的文件存储

为了方便ATmegal28L单片机对Micro SD卡中文件进行操作,以及要使Micro sD卡的数据能在PC机上得到正确的访问,需要在Micro SD卡上创建它们支持的文件系统,这就需要设计自己的文件管理系统FAT。FAT文件系统有FATl2、FATl6、FAT32,它们的主要不同是在磁盘分配表结构中每个记录所占的位数不同。FAT32文件分配表每一表项为32位。本文选择建立FAT32文件系统。

文件分配表系统的分区应该有以下几部分:

①保留区,FAT32称这个区域为引导扇区(bootsec-tOr)。它是操作系统可以直接访问的第一个扇区,主要包括与引导操作系统有关的引导参数和引导程序,还有就是与FAT文件系统有关的BPB参数(Bios ParameterBlock)。

②文件分配表,记录磁盘上簇的分配情况,在条件允许的情况下,通常都会把文件分配表全部读到内存中去。

③根目录区,记录根目录的信息。文件和目录数据区,是各种文件数据的实际存放区域。

一个文件管理系统的工作过程主要有三步:第一步是读取MBR区,主要是读DPT表,了解存储设备分区情况。第二步,读取BPB信息,确定FAT文件系统的各种基本参数。第三步,显示当前目录位置。文件系统的实现,就是把对应的文件目录操作拆成相应的扇区读写命令就可以了。因此,应该在FAT初始化的时候将读写扇区函数指针指向Micro SD卡的读写函数:


<ignore_js_op>





2010-2-22 15:43:48 上传
<strong>下载附件</strong> (3.95 KB)




</ignore_js_op>


2.4 FAT32文件系统应用接口函数的实现

FAT32文件系统向应用层提供的接口有:FAT_FindFreeCluster(),查找空簇;FAT_ModifyFAT(),修改FAT 项;FAT_OpenDir(),打开目录;FAT_MkDir(),建目录;FAT_RmI)ir(),删除目录;FAT_Rename(),重命名;FAT_Create(),创建文件;FAT_Open(),打开文件;FAT_write(),写文件;FAT_Read(),读文件;FAT_Close(),关闭打开文件;FAT_Delete(),删除文件。下面对文件的打开、读/写和删除函数接口作详细介绍。

2.4.1 文件的打开

在该文件系统中,要读/写一个文件必须先打开它,这里通过调用函数FAT_Open()实现,文件的打开可以用只读、只写、读写的方式打开。其中,以只读的方式打开文件时,如果文件不存在,则打开文件错误;以只写的方式打开文件,如果文件存在,则文件先被删除然后再建立这个文件;以读写的方式打开文件与只写方式不同,若文件存在,则不会被删除而是直接打开,否则就和只写方式一样。下面以只写方式打开文件为例:

首先,函数要查找空闲的打开文件登记项,如果没有找到则不能打开文件,如果找到则记录。然后,获取文件的内部名称及所在目录的首簇号,判断目录是否存在。最后,获取:FDT登记项,判断是否为目录,删除文件,添加FDT表项,修改打开文件的信息登记项,返回句柄。文件以只写方式打开文件的流程如图4所示。


<ignore_js_op>





2010-2-22 15:43:48 上传
<strong>下载附件</strong> (10.88 KB)




</ignore_js_op>


2.4.2 文件的读/写

SD卡上文件都是以簇为单位存取的。读SD卡上的文件,首先要在FAT初始化之前对SD卡初始化,将FAT中读写一个扇区指向SD卡中读写扇区函数,然后获取文件所在逻辑盘的信息,计算数据所在扇区,读取扇区中的数据,最后调整文件指针。


<ignore_js_op>





2010-2-22 15:43:48 上传
<strong>下载附件</strong> (7.96 KB)




</ignore_js_op>


2.4.3 文件的删除

删除文件时,不涉及数据区的操作,只须在文件的目录登记项上作一个删除标记,并把文件在FAT表中所占用的簇标记为“空簇”。


<ignore_js_op>





2010-2-22 15:43:47 上传
<strong>下载附件</strong> (3.17 KB)




</ignore_js_op>


<strong>结语</strong>

本设计将Micro SD卡的存储方式应用到电脑横机控制系统中,简化了花型文件数据存储设计,减小了系统的尺寸,提高了系统的可靠性,使得花型文件的读出和存取简单易行,裁剪了FAT32实现了嵌入式文件系统,提高了系统的存储能力。采用ATmegal28L高性能单片机的串行外设接口SPI,满足访问Micro SD卡的功能要求,加快了整个系统的设计进程。实践证明,该文件系统读取Mi—cro SD卡上花型文件的速度满足该控制系统的要求。该嵌入式文件系统只需对底层驱动进行简单修改就可移植到CF卡、闪存等其他的存储介质上。

参考文献

1. 陈冬云 ATmega128 单片机原理与开发指导 2006
2. 段勇 基于MSP430单片机的SD卡读写 2007(9)
3. 张洪涛.莫文承.李兵兵 基于 SPI协议的SD卡读写机制与实现方法 [期刊论文] -电子元器件应用2008(3)
4. 邓剑.杨晓非.廖俊卿 FAT 文件系统原理及实现 [期刊论文] -计算机与数字工程2005(9)
5. 左源.刘新宁.师超 一种SD卡控制器的硬件实现 [期刊论文] -电子器件2007(2)

作者:西安工程大学 朱大锐 张团善 高文 来源:单片机与嵌入式系统应用 (5)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表