FAT文件系统在SD卡上的实现和应用.docx

上传人:b****6 文档编号:8422612 上传时间:2023-01-31 格式:DOCX 页数:53 大小:938.66KB
下载 相关 举报
FAT文件系统在SD卡上的实现和应用.docx_第1页
第1页 / 共53页
FAT文件系统在SD卡上的实现和应用.docx_第2页
第2页 / 共53页
FAT文件系统在SD卡上的实现和应用.docx_第3页
第3页 / 共53页
FAT文件系统在SD卡上的实现和应用.docx_第4页
第4页 / 共53页
FAT文件系统在SD卡上的实现和应用.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

FAT文件系统在SD卡上的实现和应用.docx

《FAT文件系统在SD卡上的实现和应用.docx》由会员分享,可在线阅读,更多相关《FAT文件系统在SD卡上的实现和应用.docx(53页珍藏版)》请在冰豆网上搜索。

FAT文件系统在SD卡上的实现和应用.docx

FAT文件系统在SD卡上的实现和应用

FAT文件系统在SD卡上的实现和应用

摘要

本次设计的内容是FAT文件系统在SD卡上应用与实现。

SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。

因此不少数码相机也开始支持SD卡。

本文主要利用C语言进行程序设计,编辑与编译软件:

WinAVR仿真调试软件:

AVRStudio4,首先通过介绍SD总线下SD卡的底层读写操作,然后对FATFS文件系统结构进行分析,通过用串口查看SD卡获取文件。

最后设计SD卡文件的读取、创建、删除的代码实现,通过交叉编译在Atmega16开发板上测试。

结果显示,该方法可以应用到MP3项目中,便于歌曲的读取,同样便于文件的管理。

AVR单片机的最小系统设计容易:

只需要连接电源、焊接晶振就可以工作。

很多概念初学者理解起来更容易:

例如AVR的时钟源(晶振、内部RC等)不经过分频直接提供给CPU使用,而51的CPU主频等于晶振的12分频。

AVR既具有简单的、可以自制的ISP下载线和Jtag仿真器,又有DIP直插的封装形式。

AVR的C语言编程与C语言教科书上学习的标准C语言语法是几乎一样的,不像51的C语言,一些bit、srf之类的变量定义在教科书中是找不到的,有利于后续嵌入式系统的学习。

关键词:

SD卡、FatFs文件系统、AVR单片机

 

TheapplicationandRealizationofFATfile

systemintheSDcard

Abstract

ThecontentofthisdesignistheapplicationandRealizationofFATfilesystemintheSDcard.SDcardstructurecanguaranteethesecurityofdigitalfiletransfer,butalsoeasytoformat,sohaveawiderangeofapplications,music,movies,newsandothermultimediafilescanbeeasilysavedtoSDcard.SomanydigitalcamerasalsosupportSDcard.Inthispaper,usingtheClanguageprogramdesign,editingandcompilingsoftware:

WinAVRsimulationsoftware:

AVRStudio4,firstintroducestheunderlyingSDcardunderSDbusreadandwriteoperations,andthenontheFAT32filesystemstructureisanalyzed,byusingserialviewtheSDcardaccessfile.Finally,designoftheSDcardfileread,create,deletethecodetoachieve,throughcrosscompilerinAtmega16developmentboardtest.Theresultsshow,themethodcanbeappliedtotheMP3project,easytoreadthesamesong,forfilemanagement.

Theminimumsystemdesigniseasy:

justneedtoconnectthepowersupply,weldingoscillatorcanwork.Manybeginnersunderstandconceptsmoreeasily:

forexampleAVRclock(crystal,internalRC)withoutfrequencydirectlyforCPU,and51CPUfrequencyequaltothefrequencyof12.AVRnotonlyhasasimple,canbemadeISPdownloadlineandJtagsimulator,andapackageofDIPline.ThestandardClearningAVRCprogramminglanguageandClanguagetextbooksonthelanguagegrammarisalmostthesame,unlikethe51Clanguage,definitionofvariablesbit,SRF,isnottobefoundintextbooks,usefulforembeddedsystemstudy.

Keywords:

SDcardfilesystem,FatFs,AVRmicrocontroller

目  录

第一章引言

第一节研究背景

最小文件系统的特点:

•Windows可兼容的FAT文件系统;

•不依赖平台,便于移植;

•代码和工作区占用空间非常少;

•多种配置可选;

如:

多卷(物理驱动器和分区);多ANSI/OEM代码页,包括DBCS;

在ANSI/OEM或Unicode中长文件名的支持;RTOS的支持

多扇区大小的支持;只读,最少API,I/O缓冲区等等...如图1.1所示:

图1.1fatfs文件系统应用

有关C语言的介绍

C语言是国际上流行的计算机高级语言,它很适合作为系统描述语言,即方便编写系统软件,亦可以编写应用软件。

在早期的操作系统软件大部分是汇编语言编写而成的,但由于汇编语言是依赖于计算机硬件程序可读性和可移植性级语言,相比较C语言兼具一般语言优点还能克服其他语言的缺点。

有关SD/MMC简介

SD(SecureDigitalCard)卡,由松下、东芝和SanDisk共同推出,在1999年8月才首次发布。

SD卡数据传送和物理规范是由MMC发展而来,尺寸和MMC差不多,大小为32mmx24mmx2.1mm。

长宽和MMC一样,但却厚了0.7mm,以方便容纳更大容量的存贮单元。

SD卡和MMC卡均保持着向上兼容,也就是说,MMC可被新的SD设备存取,而兼容性则取决于应用软件,与此同时SD卡却不可被MMC设备存取。

(SD卡外型采用了与MMC厚度相同的导轨式设计,让SD设备可以适合MMC)SD接口除了保留MMC的7针以外,还在两边多加2针作为数据线。

采用NAND型的FlashMemory,基本上与SmartMedia的一样,平均数据传输率可达到2MB/s。

MMC(MultiMediaCard)卡是由西门子公司和首推CF的SanDisk在1997年推出。

MMC的发展目标主要目标是针对数码影像、电子书、手机、音乐、玩具等产品,是号称是目前世界上最小FlashMemory的存贮卡,大小只有32mmx24mmx1.4mm。

虽然相对SmartMedia厚,但整体体积却相比SmartMedia小巧,而且也比SmartMedia轻,重量只有1.5克。

MMC同样是把存贮单元和控制器一起做到了卡上,智能控制器可使得MMC同时保证兼容性和灵活性。

MMC存储卡可以分为MMC与SPI(serialperipheralinterface)两种不同工作模式,首先,MMC模式是标准默认模式,有MMC的全部特性。

而SPI模式是MMC存贮卡可选的第二种模式,此模式是MMC协议一个子集,一般主要用于只需要小数量的卡(通常是1个)和较低数据传输率(与MMC协议相比)的系统,此模式可以把设计花费减少到最小,但随之而来的,性能就不如MMC。

MMC的诞生作为一种低成本的数据平台和通讯介质,所以它的接口设计非常的简单。

它的读写模式共包括流式、多块和单块。

最小数据传送是以块为一个单位的,缺省的块大小是512bytes。

如图1.2所示:

图1.2sd卡实物图

第二节研究现状

AVR单片机为ATMEL公司研制开发的一种新型单片机,它和51单片机、PIC单片机相比较具有一系列优点:

1:

在相同系统时钟下AVR运行速度是最快的;

2:

芯片内部Flsah、EEPROM、SRAM的容量较大;

3:

所有型号Flash、EEPROM都能反复烧写,而且全部支持在线编程烧写(ISP);

4:

多种频率内部RC振荡器、启动延时、上电自动复位、启动延时看门狗等功能,零外围电路亦可以工作;

5:

每个IO口都能以推换驱动的方式输出高、低电平,驱动能力较强;

6:

内部资源丰富,大部分都集成AD、DA模数器;PWM;SPI、USART、TWI、I2C的通信口;丰富的中断源。

目前支持AVR单片机编译器的语言主要是汇编语言、C语言、BASIC语言等。

其中C编译器主要为CodeVisionAVR、AVRGCC、IAR、ICCAVR等,C语言编译器因为它本身具有功能强大、运用灵活、代码小、运行速度快等先天性优点,使得它可以在专业程序设计上有不可代替的地位。

有关sd卡

SD卡是东芝在MMC卡技术上加入加密技术的硬件而成,由于MMC卡可能会容易让使用者拷贝数码音乐,东芝便加入这些技术期望让音乐业界安心。

  用户可使用一个USB读卡器,在个人电脑上插入SD卡。

某些新型电脑上已经内置可读卡的装置。

最新的发展是SD卡内建了USB插口,省略了读卡器。

SD卡的结构可保证数字文件传送的安全性,也很方便进行重新的格式化,所以一直有着广泛的应用领域,音乐、新闻、电影等多媒体文件都能方便地保存进SD卡里。

因此不少数码相机也开始支持SD卡的功能。

关于文件系统

文件系统由三部分组成:

文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。

从系统的角度来看,文件系统是对文件存储器空间进行组织和分配的,负责文件存储并对存入的文件进行保护和检索的系统。

具体地说,它负责为用户建立文件,存入、读出、修改文件,控制文件存取,当用户不再使用时撤销文件等。

FAT有一个很大的缺点:

当文件删除后写入新资料,FAT不会将档案整理成完整片段再写入,长期使用会使档案资料慢慢变得分散,而降低了读写速度。

硬盘碎片整理是其中一种解决方法,但是必须经常整理以此保持FAT文件系统的效率。

第三节主要工作

在AVR单片机上通过串口链接电脑,电脑操作串口调试程序向AVR单片机上的SD卡发送指令,查看SD卡是否能接受调试程序所发送的信息,并且回馈。

最终建立一个FATFS(用于在小型嵌入式系统中实现FAT文件系统)实现对SD卡的操作。

图1.3sd卡初始化

第二章需求分析

第一节需求分析

本次设计的是FAT文件系统在SD卡上应用与实现。

SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。

因此不少数码相机也开始支持SD卡。

此方法可以应用到MP3项目中,便于歌曲的读取,同样便于文件的管理。

英雌,市场的需求便应运而生。

第二节性能分析

FatFS是一个为小型嵌入式系统设计的通用FAT(FileAllocationTable)文件系统模块。

FatFs的编写遵循ANSIC,并且完全与磁盘I/O层分开。

因此,它独立(不依赖)于硬件架构。

它可以被嵌入到低成本的微控制器中,如AVR,8051,PIC,ARM,Z80,68K等等,而不需要做任何修改。

AVR单片机的最小系统设计容易:

只需要连接电源、焊接晶振就可以工作。

很多概念初学者理解起来更容易:

例如AVR的时钟源(晶振、内部RC等)不经过分频直接提供给CPU使用,而51的CPU主频等于晶振的12分频。

AVR既具有简单的、可以自制的ISP下载线和Jtag仿真器,又有DIP直插的封装形式。

AVR的C语言编程与C语言教科书上学习的标准C语言语法是几乎一样的,不像51的C语言,一些bit、srf之类的变量定义在教科书中是找不到的,有利于后续嵌入式系统的学习。

鉴于FatFs的和AVR单片机的性能较为优秀,此次就采用在AVR单片机上移植FatFs文件系统的构架。

 

第三章功能设计

第一节总体设计

一个好的系统设计的步骤决定了程序是否能按照设计者的目的按时完成,是否能在规定时间内按照设计者的要求高质量的完成程序的功能。

通过对通讯录功能、系统模块、用户需求进行全方位的分析制定开发流程,开发流程如下所示。

如图3.1所示:

图3.1开发流程

第二节硬件设计

SD卡有2种操作模式:

SD卡模式、SPI模式。

SD卡模式允许通过4线高速总线传输,但由于大部分单片机无此接口模块,故选择SPI模式。

HCSl2X系列单片机内部都带有此同步串行外部设备接口(Serial Peripheral Interface,SPI)。

单片机可以通过SPI系统组成一个通信速率比SCI高的同步网络,故使用SPI模式可以把外设减少到最低。

SPI模式相对于SD卡模式的缺点是损失了传输速度;但是目前的微处理器的处理速度越来越高,利用SPI模式大都能满足工程需要。

 

Atmega16单片机的全双工8位SPI模块有4个引脚,分别为主入从出引脚MISO、主入从出引脚MOSI、串行时钟引脚SCK以及从机片选引脚SS。

当CS信号线为低电平时,主机开始所有的总线传输。

数据从单片机的MOSI引脚同步输入Micro SD卡的DA引脚,Micro SD卡返回数据由DO线同步输入单片机的MISO引脚,数据在CLK信号的上升沿同步输入和输出。

第三节软件设计

一、模块初始化 

 Atmega16单片机包含2个串行外设接口SPI,可以很方便地实现对Micro SD卡接口的数据传输。

为了配置时钟和数据长度,需要对SPI控制寄存器(SPCRl和SPICR2)、SPI波特率寄存器SPIBR和SPI数据寄存器SPIDR进行设置:

使能SPI模块,将SPICRl中的MSTR位置1使单片机工作在主机模式,产生串行时钟来同步主从双方的移位寄存器,配置SPI时钟极性位与SPI时钟相位控制位,使能从机输出选择;初始化SPI波特率寄存器。

 

二、SD卡初始化 

SD卡初始数据传输需工作在低于400 kb/s的频率,因此配置SPI波特率寄存器,以工作在低速模式下。

片选信号后应延时至少74个时钟周期。

SD卡默认缺省使用SD总线传输协议,主机需要发出命令

CMDO(CMD_GO_IDLE_STATE)才能使SD卡工作在SPI传输模式下,当单片机返回0x 01时说明已经进入了IDLE状态。

此时应循环发送CMD55+ACMD41以确认是否为SD卡,如果回应超时则发送CMDl(CMD_SEND_OP_COND)以确认是否为MMC卡。

经实验发现,Kingston公司的Micro SD卡使用CMD55+ACMD41或者CMDl都可以进行激活。

激活SD卡的SPI模式后SD卡进入准备状态,此时发送CMDl6(CMD_SET_BLOCKLEN)设置SD卡的读写块大小,然后重新配置SPI波特率寄存器SPIBR使单片机SPI工作在高速频率下,延时8个时钟周期后返回,完成SD卡初始化。

为了方便管理和扩展性开发,对SD卡进行了分区。

模拟硬盘模式创建出了MBR区(主引导扇区)与DBR区(操作系统引导记录区),在向下兼容的同时实现了对分区过的SD卡FAT文件系统的读写。

 

三、FAT文件系统信息读取 

SD卡数据可分为5部分:

MBR区、DBR区、FAT区、DIR区和DATA区。

MBR区是主引导区,位于整个SD卡的第1单块上。

在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节是DPT(Disk Partition Table,分区表),最后2个字节“55 AA”是分区的结束标志。

这整体构成了SD卡的主引导扇区。

DBR是操作系统引导记录区,是操作系统可以直接访问的第1个扇区,它包括1个引导程序和1个被称为BPB(Bios Parameter Block)的本分区参数记录表。

BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT、个数,分配单元的大小等重要参数。

 

FAT文件系统的分区有如下几个部分:

保留区,存放FAT文件系统的重要参数和引导程序;FAT表,记录簇使用情况;根目录区,记录根目录信息。

在FAT文件系统中,文件是以簇的形式保存在SD卡中的,簇的排布是不连续的,1个文件如果大于1个簇的话,则要通过FAT表来查找该文件所有簇所在的位置,从而找到整个文件。

目录一般只占有1个簇的大小,在FAT表中等同于小于1个簇的小文件,值显示为FF。

 

 

第四章SD卡规范

第一节SD卡概述

SD存储卡(SecureDigitalMemoryCard)是特别为符合新出现的音频和视频等消费电子设备的安全性、容量、性能和环境等设计的一种存储卡。

SD存储卡包含符合SDMI标准安全性版权保护机制,速度更快并且存储容量更大。

SD存储卡的安全系统使用的是双方认证和“新的密码算法”技术,防止卡的内容被非法使用。

它还提供了一种无安全性访问方法来访问用户自己的内容。

SD存储卡的物理外形、引脚分配和数据传输协议都向前兼容多媒体卡但是也增加了一些新有的内容。

SD存储卡的通信是基于一个高级的9引脚接口(时钟、命令、4条数据线和3条电源线),可以在最高为25MHz频率和低电压范围内进行操作。

同时通信协议也是本规范的一部分。

SD存储卡的主机接口也会支持常规的多媒体卡操作。

也就是说向前兼容多媒体卡。

实际上,SD存储卡和多媒体卡的主要区别在于初始化过程。

第二节SD存储卡的系统概念

SD存储卡为应用设计人员提供低成本的大容量存储设备(如可移动的卡),支持更高安全等级的版权保护以及相对简单、易于实现的接口。

按提供的功能差异化,可将SD存储卡分成几种类型:

读/写(R/W)卡(Flash、OPT、MTP(可多次编程))。

这些卡可作为空的介

质售卖,能用于大容量数据存储、终端用户视频、音频或数字影像等的记录。

只读存储卡(ROM)。

这些卡本身就有固定数据内容。

它们典型用于软件、音

频、视频等媒体的销售。

按工作电压可以将SD存储卡分为两种:

支持的初始化/识别过程的SD存储卡,这个工作电压范围可在CS寄存器内定义。

SDLV存储卡——低电压的SD存储卡,它能在的电压范围内工作。

SDLV存储卡与SD存储卡的标识不一样。

第三节SD存储卡系统包括SD存储卡的总线及其主机/应用

一、SD总线拓扑结构

SD存储卡绻统定义了两种通信协议:

SD和SPI两种。

应用可以选择其中一种模式。

模式选择相对于主机来说是透明的。

卡自动检测复位命令的模式,而且要以后的通信都按相同的通信模式进行。

因此,只使用一种通信模式的应用则不需要明白另一种模式,这里主要介绍SD总线。

SD总线包含以下信号:

CLK:

主机向卡发送时钟信号;

CMD:

双向的命令/响应的信号;

DAT0~DAT3:

4个双向数据的信号;

VDD、VSS1、VSS2:

电源和地信号。

SD卡总线共有一个主机(应用)、多个从机(卡)和同步的星形拓扑结构。

所有卡共用的是时钟、电源和地信号。

而命令(CMD)和数据(DAT0~DAT3)是卡的专用信号,为所有卡提供连续的点对点的连接。

在初始化进程中,命令被分别发送到各张卡上,允许应用程序能检测到卡并向物理卡槽分配逻辑的地址。

各张卡数据通常独立地发送(接收)。

但为了简化卡的成批的处理,在初始化进程以后,所有命令可能会同时发送到所有卡。

命令包中提供地址的信息。

SD总线允许动态配置数据线数量。

在上电以后,SD卡默认只使用DAT0进行数据的传输。

初始化后,主机可修改总线的宽度(有效数据线数量)。

这个特性允许简单交替选择HW成本和系统性能。

注意:

SD主机在不使DAT1~DAT3时可以使用自己的DAT1~DAT3线处于三态(输入模式)。

二、SD总线协议

SD总线上的通信是基于以起始位开始、以停止位结束命令和数据位流。

命令:

命令就是启动一项操作的令牌。

命令可从主机发送到一张卡上(寻址命令)或发送到连接的所有卡上(广播命令),命令在CMD线上串行传输。

响应:

响应则是从被寻址的卡或(同时)从所有连接的卡上发送到主机,可作为对接收到的命令回答的令牌,响应在CMD线上串行传输。

数据:

数据可从卡上发送到主机或者相反,数据通过数据线传输。

卡的寻址可由会话地址来实现,并在初始化的阶段分配给卡。

SD总线基本处理是命令/响应处理。

这类型总线处理直接在命令或者响应结构中来传输它们的信息。

此外,某些操作还有数据令牌。

SD卡的数据传输是通过块的形式进行。

数据块的后面通常有CRC位。

它定义了单块和多块的操作。

注意:

在快速写操作中使用多块操作模式为最理想。

当CMD线出现了停止命令时,多块传输结束。

主机可配置数据传输是使用一条还是用多条数据线。

如图4.1所示。

图4.1(多)块读操作

图4.2(多)块写操作

 

命令令牌的编码策略如下图4.3所示:

图4.3命令令牌的格式

每个命令的令牌都以起始位(0)开始,以结束位

(1)为结束。

令牌的总长度共是48位。

每个令牌都有对应的CRC位,这样可以检测传输错误并重复的操作。

响应令牌根据其内容4种编码策略。

令牌长度是48位或是136位。

命令和响应。

块的CRC保护算法则是一个16位的CCITT多项式。

如图4.4所示:

图4.4响应的令牌格式

在CMD线上最先传输的是MSB,最后才是LSB。

当用宽总线选项时候,数据一次传输4位。

起始位、结束位以及CRC位在每条DAT线各发送一次。

每条数据线分别计算并检查CRC位。

CRC位状态响应和忙指示信号是由卡通过DAT0发送到主机上的(DAT1~DAT3在此期间无关)。

如图4.5所示:

图4.5数据包的格式

 

第五章SD命令及参数及数据格式

第一节SD卡命令描述

1.广播命令:

给所有的卡都发送,某些命令需要响应;

2.点对点的命令:

给指定地址卡发送,需要响应.

一、SD卡系统有两种工作模式:

(一)卡识别模式

主机上电复位后就会处于此模式,它会在总线上等待卡.卡复位后也会处于此模式,直到SEND_RCA(CMD3)命令到来.

此模式下主机复位总线所有卡,验证工作的电压,询问卡地址.这个模式下所有数据的传输都是只通过CMD线来完成.

卡的复位.

当卡上电或收到GO_IDLE_STATE(CMD0)命令之后,卡就进入IdleState状态.此时卡将其RCA设为0,相关寄存器设为传输稳定最优的模式.

工作电压验证

每个卡的最高和最低工作的电压存储在OCR.只有适当电的压比配时,CID和CSD数据才能正常传输给主机.

SD_SEND_OP_COND(ACMD41)命令可用来判断卡的工作电压是否符合,如不符合的话,卡应放弃总线操作,而进入InactiveState状态.在发送了SD_SEND_OP_COND(ACMD41)命令前记得要先发送APP_CMD(CMD55)。

如图5.1所示:

图5.1卡的状态变换图.

ACMD41命令

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1