ATmega128L单片机的Micro SD卡读写

发布者:zonheny最新更新时间:2015-04-15 来源: eechina关键字:ATmega128L  单片机  Micro  SD卡读写 手机看文章 扫描二维码
随时随地手机看文章
引言

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

1 硬件电路设计

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所示。

1.gif 

2 软件设计

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所示。

2.gif 

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所示。

3.gif 

2.3 Micro SD卡的文件存储

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

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

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

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

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

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

4.gif 

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所示。

5.gif 

2.4.2 文件的读/写

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

6.gif 

2.4.3 文件的删除

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

7.gif 

结语

本设计将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)
关键字:ATmega128L  单片机  Micro  SD卡读写 引用地址:ATmega128L单片机的Micro SD卡读写

上一篇:AVR中断应用设计要点
下一篇:基于AVR的笔记本电池检测仪

推荐阅读最新更新时间:2024-03-16 13:58

基于单片机的led显示屏控制系统设计
  本设计使用双RAM技术来组织用于控制矩形 显示屏 的控制系统数据,提高了信息垂直循环 显示 时的存储器效率,大幅度降低了对数据存储器的占用率,并且对刷新频率的要求也不是很高。    1、 LED显示 数据组织   需要显示的区域小于或等于实际显示区域时,采用静态显示即可。但大多时候需要显示的区域大于或等于实际显示区域,如图1所示。为了简化问题的分析,本文将显示区域高度设置为 LED显示屏 高度的4倍,宽度等于LED显示屏宽度。设显示屏的高度为Lh,宽度为Lw,则显示区域高度Dh=4Lh,宽度Dw=Lw。本文以单色显示作为描述对象,且Bw=Bn=8(Bw为扫描线条数,Bn为输出数据宽度),如图1所示。  
[电源管理]
基于<font color='red'>单片机</font>的led显示屏控制系统设计
基于MC9S12微控制器的发动机高能直接点火控制
摘要:发动机高能直接点火系统需按点火顺序、点火时刻和点火能量的要求实现各点火线圈的独立控制。介绍了以MC9S12DP256微控制器为核心的电子控制单元的软硬件系统设计。利用MCU的增强型捕捉定时器,该将输入捕捉与输出较功能相配合,满足了6个点火线圈初级电路通断电的复杂时序控制要求。该系统在某稀燃天然气发动机的开发中进行了应用,结果表明:在各种工况下,都能获得可靠的点火。 关键词:微控制器 增强型捕捉定时器 点火系统 随着电子技术的发展及对发动机性能要求的提高,微机控制的电子点火系统逐渐取代了传统的发动机点火系统,实现了更为精确的点火时刻和点火能量的控制。 在发动机点火系统中,采用的每个发动机汽缸各带一个点火线圈,对各缸点
[单片机]
SPE61A单片机的非接触式高压验电器的应用开发
   1 非接触式验电器的设计思想   本次开发的验电器主要用于铁路中高压输电线路的监测工作,其设计要求是监测铁路中高压线路的运行情况,要求能正确判断高压线是否带电,并将有电、无电信号通过发光二极管显示出来,同时还要发出相应状态的语音提示信息。   另外,验电器通常安装在室外,因此本装置还要满足室外工作的要求。   2 总体设计方案和框图   本验电器以SPE61A单片机作为检测和控制核心。装置采用铜片式传感器监测高压线附近电场,将电场信号转化为电压信号后送往信号处理电路,信号处理电路将该模拟信号转换成直流的有电、无电的状态信号送往单片机。单片机将接收到的信号与上一次信号进行比较,如果本次采集的信号跟上次采集信号
[单片机]
SPE61A<font color='red'>单片机</font>的非接触式高压验电器的应用开发
单片机应用系统中去除工频干扰的快速实现
引 言   针对工频干扰的特点,本文使用参考文献1所提出的自适应相干模板法。这是一种极其简单、有效的滤除工频干扰的算法,十分有利于单片机快速实现,在采样率不太高的情况下,能达到实时滤波。该算法之所以利于单片机快速实现,是因为算法本身多数为加法和减法运算,不涉及乘法运算,且通过合理的选择M值,可将除法运算巧妙地简化为移位运算或更简单地直接甩掉低位字节 。 1 自适应相干模板法 1.1 滤除工频干扰的原理   参考文献1所提出的自适应相干模板法,是根据工频干扰的特点,从原始信号中得到工频干扰的模板,再从原始信号中减去该模板,达到滤除工频干扰的目的。 假设X(n)为原始信号,S(n)为其中的有用信号,N(n)为工频干扰信号,则 X(n)
[单片机]
<font color='red'>单片机</font>应用系统中去除工频干扰的快速实现
单片机AT89C51 正反转可控的步进电机
单片机AT89C51 正反转可控的步进电机 单片机源程序: /*************** writer:shopping.w ******************/ #include reg52.h #define uint unsigned int #define uchar unsigned char uchar code FFW = { 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09 }; uchar code REV = { 0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01 }; sbit K1 = P3^0; sbit K2
[单片机]
<font color='red'>单片机</font>AT89C51 正反转可控的步进电机
PIC18Fxx单片机内部EEPROM存取程序
#include p18cxxx.h #include p18f6680.h #include usart.h #pragma config OSC=HS #pragma config WDT = OFF void eebf_d( void); void eebf( void); unsigned char out_bz ; unsigned char *buf_d ,*buf ; int j=0 ; //创建接受数组 #pragma idata bigsata unsigned char out ; #pragma idata void eebf( void) //将数据存EEPR
[单片机]
采用单片机和CPLD器件实现仿人手臂形假肢控制系统的设计
假肢是人体缺损肢体的替代物,用以弥补缺损肢体的形状和功能。本文针对失去整个手臂的情况,设计出一种仿人手臂形假肢的控制系统。使用者可以补偿部分缺失的功能,达到生活自理甚至于可以从事基本劳动,减少身心痛苦,同时也相应地解放了护理工作用。在设计中,采用C8051F020单片机作为主控制器,并通过CPLD(Complex Programmable Logic Device)完成对各个关节控制量的检测以及凌阳61单片机实现语音控制功能。 1、 机器人假肢结构 多自由度机器人型假肢(上肢)拥有6个自由度,其结构原理图如图1所示。 2、 假肢控制系统的硬件设计 2.1 控制器的工作原理 控制系统原理框图如图2所示,主要由控制、驱动、被控
[单片机]
采用<font color='red'>单片机</font>和CPLD器件实现仿人手臂形假肢控制系统的设计
基于RS485主从结构通信单片机代码
RS485主从结构通信代码,用于组网内部通信 单片机源程序如下: #ifndef _485MON_H // 防止485Mon.h被重复引用 #define _485MON_H #include reg52.h // 引用标准库的头文件 #include stdio.h #include string.h #define uchar unsigned char #define uint unsigned int #define ACTIVE 0x11 #define GETDATA 0x22 #define READY
[单片机]
基于RS485主从结构通信<font color='red'>单片机</font>代码
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved