552.基于51处理器的文件系统设计【单片机 毕业设计】.doc

上传人:仙人指路1688 文档编号:2392404 上传时间:2023-02-17 格式:DOC 页数:53 大小:3.56MB
返回 下载 相关 举报
552.基于51处理器的文件系统设计【单片机 毕业设计】.doc_第1页
第1页 / 共53页
552.基于51处理器的文件系统设计【单片机 毕业设计】.doc_第2页
第2页 / 共53页
552.基于51处理器的文件系统设计【单片机 毕业设计】.doc_第3页
第3页 / 共53页
552.基于51处理器的文件系统设计【单片机 毕业设计】.doc_第4页
第4页 / 共53页
552.基于51处理器的文件系统设计【单片机 毕业设计】.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《552.基于51处理器的文件系统设计【单片机 毕业设计】.doc》由会员分享,可在线阅读,更多相关《552.基于51处理器的文件系统设计【单片机 毕业设计】.doc(53页珍藏版)》请在三一办公上搜索。

1、毕 业 设 计基于51处理器的文件系统设计 指导教师 XX 副教授学院名称工程学院 专业名称电子信息工程论文提交日期2010年05月 论文答辩日期年 月答辩委员会主席 _评 阅 人 _摘 要消费类的电子产品已经越来越普及,同时人们对于不同设备的存储容量的要求也逐渐提高,而SD内存卡是创新、不断改进的桥接媒体,推动未来的数码世界。高性能产品若有SD内存卡,消费者就能以可靠、使用轻松的方式,快速拍摄视频、相片、及声音SD内存卡有标准格式与大容量格式,而且有各种速度等级。SD内存卡具备必要的广泛可交互性与兼容性,确保其应用会延续到未来。本文分析了基于STC89C51系列单片机对SD卡的读写操作并分析

2、了FAT16文件系统的原理,给出了一种基于高速、低功耗、超强抗干扰的新一代STC89C51系列单片机的SD卡读写方法,该方法利用I/O口模拟SPI总线与SD卡相连,从而实现了对SD卡的数据读写,并在SD卡上实现了FAT16文件系统的部分功能,通过串口连接到电脑,在超级终端中对SD卡进行操作。本系统最终实现了文件的创建、删除、显示,由于51单片机的处理能力不足,在实际应用中可采用处理能力更强的ARM核心的32为处理器以提高数据的处理能力。关键词: 电子产品 SD卡 FAT16 串口目 录1 前言11.1 选题背景11.1.1 SD卡现状11.1.2 研究意义21.2 论文主要工作22 FAT16

3、文件系统分析22.1 FAT16组织形式22.1.1 MBR扇区32.1.2 DBR区42.1.3 FAT表62.1.4 FDT区72.1.5 DATA区92.1.6 剩余扇区92.2 FAT16存储原理93 电路设计113.1 系统的整体组成113.1.1 STC89C516的最小系统113.1.2 供电电路133.1.3 拓展静态存储器133.1.4 单片机与SD卡的连接143.1.5 人机交互接口154 软件设计164.1 SD卡工作模式164.2 命令与数据传输174.3 SD卡的初始化184.4 数据块的读写204.5 读取FAT16文件系统参数234.6 FAT16文件系统的实现2

4、34.6.1 文件的显示234.6.2 文件的创建和删除245 系统测试255.1 系统调试的大致步骤255.2 调试问题分析255.3 测试结果255.3.1 文件的显示255.3.2 创建文件及文件夹275.3.3 删除文件296 结束语31致谢32参考文献33英文摘要34附录35华南农业大学本科专业毕业设计成绩评定表1 前言1.1 选题背景1.1.1 SD卡现状随着手机、数码相机、数码摄像机、电子辞典等众多数码产品的不断普及,与它们息息相关的信息存储设备也受到了消费者越来越多地关注,而SD卡以其体积小、功耗低、高可靠性、可擦写、非易失性等优点成为其中最为闪亮的主流存储媒介之一,同时,伴随

5、着价格的不断下降和存储容量的不断增高,在生产与生活中得到了越来越广泛的应用。SD卡(Secure Digital Memory Card)是由日本松下、东芝和美国的SanDisk公司三家联合于1998年8月共同研制开发的。大小犹如一张邮票,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性等诸多优点。SD卡在24mm32mm2.1mm的体积内整合了SanDisk快闪记忆卡控制与MLC(MultilevelCell)技术和东芝0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。而且它是一体化固体介质,

6、没有任何移动部分,所以不用担心机械运动的损坏。SD卡发展至今主要分为三大类:标准版本(SD、miniSD、microSD)、大容量版本(SDHC、miniSDHC、microSDHC)、和SDIO卡。其中mini型和micro型是在原有的SD基础上加以改进而使体积逐渐减小。miniSD卡的开发是为了符合行业对小型移动电话的持续需求。miniSD卡的大小仅是SD卡的37%,但小小一张卡却具备所有的存储能力、速度、及其它优点,还有版权保护。把miniSD卡插入miniSD适配器后,就能在启用标准SD卡的产品之间共享各种数码数据。而2007年10月,一种可移动存储能力比以往更强大SDHC(SD Hi

7、gh-Capacity)卡技术出现了,它的容量范围从4GB至32GB,开发人员能选择指定有保证最低数据速率的三种数据写入速度,SD协会针对标准卡与大容量卡以及两种主机产品的最低数据传输,制定了新的规格分级。有了新的速度等级规格,主机产品就能检查卡中的零碎状态,并计算卡中每个部分的写入速度。因此,主机可根据速度需求,确定要在哪里写入数据。三种SDHC速度等级(等级2、等级4、等级6)每秒分别可传输至少2MB、4MB、6MB的数据,而其它具体特性与标准版本类似,但其容量明显增大,都在4.32G以上。少量此类产品在2008年上半年开始问市。另外,SD标准有很大的弹性,在具体应用中,SD卡可以通过整合

8、特定接口插槽以适应特定的应用,这就是第三种版本SDIO卡,SDIO卡是一种界面,借由使用标准SD卡插槽来扩展设备的功能,让设备拥有新的功能。例如:GPS、相机、Wi-Fi、调频广播、以太网、条形码读卡器、Bluetooth等。1.1.2 研究意义SD卡及后续的SDHC目前已经成了数码产品中实质上的通用标准。现在,其推广者希望扩展SD卡的使用范围。SD卡协会(SDA)于2008年9月11日在美国加里福尼亚圣拉蒙宣布了嵌入式SD标准,在同年11月正式进入嵌入式存储市场。应用该标准,手机、数码产品甚至各种输入输出外设在需要内置存储空间时,都可以直接使用标准的SDHC接口规范,嵌入最高32GB闪存。再

9、通过传统的外置SD卡接口,还可继续增加32GB的SDHC卡移动存储。嵌入式SD规范定义了新的嵌入式机械和电气结构框架,扩展了下一代移动手持设备和消费电子设备市场需求,为大容量的嵌入式数据存储和快速处理提供了新的解决方案。对于数码产品的设计者来说,这样的标准可以大大简化他们在设计存储系统时的工作,有助于降低开发成本,并缩短开发时间。据专家分析,miniSD和microSD为移动手持设备的可移动存储卡的主流接口,占据了主要的市场份额,“预计2010年在移动手持设备的中占所有存储卡类的90左右。”全球著名电子制造领域市场研究公司isuppli的资深分析员兼公司理事Nam Hyung Kim说。新的嵌

10、入式SD标准将定位于带有闪存管理、自启动功能的低功耗消费类移动手持存储设备。因此,针对带有SD功能的产品的研发成了其必不可少的步骤,而SD协议又提供了程序化的开发标准,所以对其功能的实现的研究也可以在以后诸多涉及到其功能的产品中起到一定的软件复用的作用。1.2 论文主要工作本文介绍了STC89C516单片机在SPI协议下与SD卡的硬件接口电路,然后简要阐述了SPI总线模式以及软件模拟的SPI总线数据通讯,给出了SD卡的初始化和读写操作的软件流程,实现了对SD卡的扇区读写。分析了FAT16文件系统的原理,编程实现了FAT16文件系统的基本功能。最后验证了其功能的正确性,并总结了本方案存在的缺陷和

11、需进一步解决的问题。2 FAT16文件系统分析2.1 FAT16组织形式FAT16是Microsoft较早推出的文档系统,具备高度兼容性,现在仍然广泛应用于个人电脑尤其是移动存储设备中,FAT16简单来讲由MBR、DBR、FAT1、FAT2、FDT、数据区、剩余扇区等部分组成,下面来分析各组成部分。2.1.1 MBR扇区MBR(master boot record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区)。在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字节(偏移0H偏移1BDH),随后的64个字节(偏移1BEH

12、偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH偏移1FFH)是分区有效结束标志。操作系统为了便于用户对磁盘的管理。加入了磁盘分区的概念。即将一块磁盘逻辑划分为几块。磁盘分区数目的多少只受限于CZ的英文字母的数目, DPT共64个字节中如何表示多个分区的属性呢?microsoft通过链接的方法解决了这个问题。在DPT共64个字节中,以16个字节为分区表项单位描述一个分区的属性。也就是说,第一个分区表项描述一个分区的属性,一般为基本分区。第二个分区表项描述除基本分区外的其余空间,一般而言,就是通常所说的扩展分区。这部分的大体

13、说明见表1。表1 分区字段的含义字节位移字段长度字段名和定义0x01BEBYTE引导指示符(Boot Indicator)指明该分区是否是活动分区。0x01BFBYTE开始磁头(Starting Head)0x01C06位开始扇区(Starting Sector) 只用了05位。后面的两位(第6位和第7位)被开始柱面字段所使用0x01C110位开始柱面(Starting Cylinder)除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。0x01C2BYTE系统ID(System ID) 定义了分区的类型0x01C3BYTE结束磁头(Ending Head)0x01C46位结束扇区(E

14、nding Sector)只使用了05位。最后两位(第6、7位)被结束柱面字段所使用0x01C510位结束柱面(Ending Cylinder) 除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值。0x01C6DWORD本分区之前已用扇区数0x01CADWORD总扇区数(Total Sectors) 该分区中的扇区总数对于格式化成FAT16文件系统的SD卡而言,一般只有一个分区,SD卡也不像硬盘那样利用磁头、柱面等来进行读写数据,故只需关心偏移地址为0x01c6处的四个字节,该处记录了本分区之前已用扇区数,也即MBR的起始地址,分析MBR扇区的内容即可知道DBR的起始地址。2.1.2

15、DBR区DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区(逻辑扇区)共512个字节(特殊情况也要占用其它保留扇区,我们先说第0扇)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,os引导程序,结束标志几部分组成。其字段含义见表2表4。表2 一个FAT16分区上的引导扇区段字节位移字段长度(字节)字段名称0x003跳转指令(Jump Instruction)0x038OEM ID0x0B25BPB0x2426扩展BPB0x3E448引导程序代码(Bootstrap Co

16、de)0x01FE4扇区结束标识符(0x55AA)表3 FAT16分区的BPB字段字节位移长度(字节)名称和定义0x0B2扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为5120x0D1每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。0x0e2保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为10x101FAT数(Number of FAT)该分区上FAT的副本数。续表3 FAT16分区的BPB字段字节位

17、移长度(字节)名称和定义0x112根目录项数(Root Entries) 能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。其中一个项常常被用作卷标号(Volume Label),长名称的文件和文件夹每个文件使用多个项。文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数0x132小扇区数(Small Sector) 该分区上的扇区数,表示为16位(65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来取代它0x151媒体描述符( Media Descriptor)提供有关媒体被

18、使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用0x162每FAT扇区数(Sectors Per FAT) 该分区上每个FAT所占用的扇区数。计算机利用这个数和FAT数以及隐藏扇区数来决定根目录在哪里开始。计算机还可以根据根目录中的项数(512)决定该 分区的用户数据区从哪里开始0x182每道扇区数(Sectors Per Trark) 0x1A2磁头数(Number of head) 0x1C4隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录和数据

19、区的绝对位移的过程中使用了该值0x204大扇区数(Large Sector) 如果小扇区数字段的值为0,本字段就包含该FAT16分区中的总扇区数。如果小扇区数字段的值不为0,那么本字段的值为0表4 FAT16分区的扩展BPB字段字节位移长度(字节)字段名称和定义0x241物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。一般地,在发出一个INT13h BIOS调用之前设置该值,具体指定所访问的设备。只有当该设备是一个引导设备时,这个值才有意义0x251保留(Reserved)

20、FAT16分区一般将本字段的值设置为00x261扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x290x272卷序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘0x2B11卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中0x368文件系统类型(File System Type) 根据该磁盘格式,该字段的值可以为FAT、FAT12或FAT16对于该扇区,只需关注偏移0x0b处两个字节(每扇区字节

21、数),偏移0x0d处一个字节(每簇扇区数),偏移0x0e处两个字节(保留扇区数)和偏移0x16处两个字节(每fat表所占扇区数)的内容即可,这些地方的数据与FAT的起始位置、FDT的起始位置有关。在上述FAT文件系统DBR的偏移0x0E处,用2个字节存储保留扇区的数目。所谓保留扇区(有时候会叫系统扇区,隐藏扇区),是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。在FAT16文件系统中,保留扇区的数据通常设置为1,即仅仅DBR扇区。2.1.3 FAT表文件分配表FAT(File Allocation Table),是fat文件管理系统用来记录每个文件的存储位置的表格,它以链的方式存

22、放簇号。FAT紧接着dbr引导扇区存放。磁盘上有两个fat,一个是基本表,另一个是备份。两个表的长度和内容相同。每个fat所占用的扇区数取决于操作系统、分区大小、每簇的扇区数等因素。磁盘格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。当一个文件占用多个簇时,这些簇的簇号不一定是连续的,但这些簇号在存储该文件时就确定了顺序,即每个文件都有其特定的“簇号链”。磁盘上的每一个可用的簇在fat中有且只有一个登记项,通过在对应簇号的登记项内填入“表项值”来表明数据区中的该簇是已占用、空闲或是坏簇三种状态之一。在fat表中,簇编号也是登记项编号。每一个登记项作为一个簇的标志信息占用一定

23、的字节,该标志信息可取的表项值及其含义如表5所示。表5 FAT16记录项的取值含义(16进制)FAT16记录项的取值对应簇的表现情况0000未分配的簇0002FFEF已分配的簇FFF0FFF6系统保留FFF7坏簇FFF8FFFF文件结束簇在fat的簇登记项中,0号登记项和1号登记项是表头,簇的登记项从2号开始,即磁盘上的第一个文件从第2簇开始分配。表项值0002HFFFFH中的任一值表明文件的下一簇号。文件的起始簇号由文件目录表(FDT)中每个目录登记项的第26,27字节决定。FAT表项中的值既表示一个簇号,又用其值乘以2作为下一个表项的位置,构成一个FAT链。磁盘上未用但可用的“空簇”的表项

24、值为0000H,当需要存放新文件时,操作系统按一定顺序将它们分配给新文件。虽然fat记录了文件所用的磁盘空间信息,但是dbr引导区、两个fat表和文件目录区FDT等磁盘空间并不由fat中的簇表示,fat只与DATA区的空间相对应。2.1.4 FDT区FAT之后的是根目录中的FDT(File Directorty Table),即文件目录表,根目录下的所有文件及其子目录在根目录的文件目录表中都有一个“目录登记项”。每个目录登记项占用32个字节,分为8个区域,提供有关文件或子目录的信息。表6是FDT中一个文件目录登记项32个字节中各字节的内容及含义。表6 FAT16目录项32个字节的表示定义字节偏

25、移(16进制)字节数定义0x00x78文件名0x80xA3扩展名0xB1属性字节00000000(读写)00000001(只读)00000010(隐藏)00000100(系统)00001000(卷标) 00010000(子目录)00100000(归档)0xC0x1510系统保留0x160x172文件的最近修改时间0x180x192文件的最近修改日期0x1A0x1B2表示文件的首簇号0x1C0x1F4表示文件的长度FAT对每个文件来说其数据结构是一个单向的链表,而每个文件在文件目录表FDT中占一个文件目录项,每个文件的首簇号就存放在该文件的目录项的第26、27字节中,系统根据这两个字节中的值乘以

26、2得到它在FAT中该文件的单向链表的首表项,通过FAT即可找到文件的全部内容。FDT的文件目录项中,第07字节为文件名(若有剩余字节则用空白符20H填充)。其中,第1字节又表明了该文件的状态,它有如下三种取值方式。 00H目录项的空表项(未使用的目录项)。 E5H表示该目录项曾经使用过,但文件已被删除。 其他任何合法字符表示一个文件名(或子目录)的第一个字符的ASCII码值,如果是子目录下的两个特殊文件“.”或“.”目录项,其ASCII码为2EH和2EH 2EH。一个目录也占用一个文件目录项,只不过他的属性字节为10H,文件长度字节为0。一个子目录的内容是若干个文件目录项或下级子目录项。只有当

27、文件需要时,系统才给文件分配数据空间。存放数据的空间。存放数据的空间按每次一个簇的方式分配,分配时系统跳过已分配的簇,第一个遇到的空簇就是下一个将要分配的簇,此时系统并不考虑簇在磁盘上的物理位置。同时,文件删除后空出来的簇也可以分配给新的文件。2.1.5 DATA区DATA区域用于实际存储文件数据,其组织与管理由系统根据前面4个区域的内容来完成。2.1.6 剩余扇区对于整个FAT分区而言,簇的分配并不完全总是分配干净的。如一个数据区为99个扇区的FAT系统,假如簇的大小设定为2扇区,就会有1个扇区无法分配给任何一个簇。这就是分区的剩余扇区,位于分区的末尾。2.2 FAT16存储原理 格式化FA

28、T16分区时,格式化程式根据分区的大小确定簇的大小,然后根据保留扇区的数目、根目录的扇区数目、数据区可分的簇数和FAT表本身所占空间 来确定FAT表所需的扇区数目,然后将计算后的结果写入DBR的相关位置。 FAT16 DBR参数的偏移0x11处记录了根目录所占扇区的数目。偏移0x16记录了FAT表所占扇区的数据。偏移0x10记录了FAT表的副本数目。系统在得到这几项参数以后,就能够确定数据区的开始扇区偏移了。 FAT16文档系统从根目录所占的32个扇区之后的第一个扇区开始以簇为单位进行数据的处理,这之前仍以扇区为单位。对于根目录之后的第一个簇,系统并不编号为第0簇或第1簇 (可能是留作关键字的

29、原因吧),而是编号为第2簇,也就是说数据区顺序上的第1个簇也是编号上的第2簇。 FAT表实际上是个数据表,以2个字节为单位,这个单位称为FAT记录项,通常情况其第1、2个记录项(前4个字节)用作介质描述。从第三个记录项开始记录除根目录外的其他文档及文档夹的簇链情况。根据簇的表现情况FAT用相应的取值来描述,见表5 FAT表记录了磁盘数据文档的存储链表,对于数据的读取而言是极其重要的,以至于Microsoft为其研发的FAT文档系统中的FAT表创建了一份备份,就是我们看到的FAT2。FAT2和FAT1的内容通常是实时同步的,也就是说假如通过正常的系统读写对FAT1做了更改,那么FAT2也同样被更

30、新。 FAT文档系统的目录结构其实是一颗有向的从根到叶的树,这里提到的有向是指对于FAT分区内的任一文档(包括文档夹),均需从根目录寻址来找到。能够这样认为:目录存储结构的入口就是根目录。 FAT文档系统根据根目录来寻址其他文档(包括文档夹),故而根目录的位置必须在磁盘存取数据之前得以确定。FAT文档系统就是根据分区的相关DBR参数和DBR中存放的已计算好的FAT表(2份)的大小来确定的。格式化以后,跟目录的大小和位置其实都已确定下来了:位置紧随FAT2之后,大小通常为 32个扇区。根目录之后便是数据区第2簇。 FAT文档系统的一个重要思想是把目录(文档夹)当作一个特别的文档来处理,在FAT1

31、6中,虽然根目录地位并不等同于普通的文档或说是目录,但其组织形式和普通的目录(文档夹)并没有不同。FAT分区中任何的文档夹(目录)文档,实际上能够看作是个存放其他文档(文档夹)入口参数的数据表。所以目录的占用空间的大小并不等同于其下任何数据的大小,但也不等同于0。通常是占很小的空间的,能够看作目录文档是个简单的二维表文档。其具体存储原理是: 不管目录文档所占空间为多少簇,一簇为多少字节。系统都会以32个字节为单位进行目录文档所占簇的分配。这32个字节以确定的偏移来定义本目录下的一个文档(或文档夹)的属性,实际上是个简单的二维表,见表6。 (1)、对于短文档名,系统将文档名分成两部分进行存储,即

32、主文档名+扩展名。0x00x7字节记录文档的主文档名,0x80xA记录文档的扩展名,取文档名中的ASCII码值。不记录主文档名和扩展名之间的. 主文档名不足8个字符以空白符(20H)填充,扩展名不足3个字符同样以空白符(20H)填充。0x0偏移处的取值若为00H,表明目录项为空;若为 E5H,表明目录项曾被使用,但对应的文档或文档夹已被删除。(这也是误删除后恢复的理论依据)。文档名中的第一个字符若为“.”或“.”表示这个簇记录的是个子目录的目录项。“.”代表当前目录;“.”代表上级目录(和我们在dos或windows中的使用意思是相同的,假如磁盘数据被破坏,就能够通过这两个目录项的具体参数推算

33、磁盘的数据区的起始位置,猜测簇的大小等等,故而是比较重要的) (2)、0xB的属性字段:能够看作系统将0xB的一个字节分成8位,用其中的一位代表某种属性的有或无。这样,一个字节中的8位每位取不同的值就能反映各个属性的不同取值了。如00000101就表示这是个文档,属性是只读、系统。 (3)、0xC0x15在原FAT16的定义中是保留未用的。在高版本的WINDOWS系统中有时也用他来记录修改时间和最近访问时间。 (4)、0x160x17中的时间=小时*2048+分钟*32+秒/2。得出的结果换算成16进制填入即可。也就是:0x16字节的04位是以2秒为单位的量值;0x16字节的57位和0x17字

34、节的02位是分钟;0x17字节的37位是小时。 (5)、0x180x19中的日期=(年份-1980)*512+月份*32+日。得出的结果换算成16进制填入即可。也就是:0x18字节04位是日期数;0x18字节57位和0x19字节0位是月份;0x19字节的17位为年号,原定义中0119分别代表19802099,现在高版本的Windows允许取0127,即年号最大能够到2107年。 (6)、0x1A0x1B存放文档或目录的表示文档的首簇号,系统根据掌控的首簇号在FAT表中找到入口,然后再跟踪簇链直至簇尾,同时用0x1C0x1F处字节判定有效性。就能够完全无误的读取文档(目录)了。 (7)、普通子目

35、录的寻址过程也是通过其父目录中的目录项来指定的,和数据文档(指非目录文档)不同的是目录项偏移0xB的第4位置1,而数据文档为0。3 电路设计3.1 系统的整体组成本系统主要由电源、微处理器、存储器、SD卡和人机交互接口五部分组成,系统框图如图1所示。微处理器采用MCS-51架构的STC89C516单片机,其为整个系统的核心,主要负责SD卡中的数据解释并进行相应的控制。STC89C516是一种低成本、低功耗、高性能的CMOS 8位微控制器,具有64 KB在系统可编程Flash存储器。应用STC89C516读写SD卡有两点需要注意。首先,需要寻找一个实现STC89C516单片机与SD卡通讯的解决方

36、案;其次,SD卡所能接受的逻辑电平与STC89C516提供的逻辑电平不匹配,需要解决电平匹配问题。系统整体电路见附录中的图33电源系统人机交互拓展RAM微处理器STC89C516SD卡图1 系统组成框图3.1.1 STC89C516的最小系统STC89C51RC/RD+系列单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,最新的D版本内部集成MAX810专用复位电路。选用STC单片机可降低成本,提升性能,原有程序直接使用,硬件无需改动。用STC提供的STC-ISP.exe工具将2进制代码或16进制代

37、码下载进STC相关的单片机即可,ST89C51系列单片机内部结构如图2所示。为了使STC89C516能正常工作,必须外接晶振并且复位电路要正确,EA引脚也要置为高电平。本系统使用的晶振为22.1184MHz,能提高STC89C516执行指令的速度。复位电路由阻容电路组成。复位电路和晶振与STC89C516的连接如图3所示,其中STC89C51由USB接口供电。图2 ST89C51系列单片机内部结构图3 晶振及复位电路3.1.2供电电路本系统需要使用2种电源供电,其中STC89C516和拓展RAM使用5V电源,SD卡使用3.3V的电源。5V电源通过USB接口由MP3充电器或者电脑提供,3.3V的

38、电源由稳压芯片AMS1117-3.3提供。电路连接如图4所示。图4 电源供给电路3.1.3拓展静态存储器由于STC89C516只有256字节的数据存储器,而SD卡的数据写入是以块为单位,每块为512字节,所以需要在单片机最小系统上增加一片RAM。本系统中RAM选用存储器芯片HM62256,容量为32KB。对RAM进行读写时,锁存器74LS373把低8位地址锁存,与P2口的8位地址数据构成16位地址空间,从而可使SD卡一次读写512字节的块操作,HM62256的WE引脚连接单片机的WR引脚,OE引脚连接单片机的RD引脚,CE引脚接地。其连接如图5所示。图5 STC89C516拓展RAM3.1.4

39、单片机与SD卡的连接SD卡有两个可选的通讯协议:SD模式和SPI模式。SD模式是SD卡标准的读写方式,但是在选用SD模式时,往往需要选择带有SD卡控制器接口的MCU,或者必须加入额外的SD卡控制单元以支持SD卡的读写。然而,STC89C516单片机没有集成SD卡控制器接口,若选用SD模式通讯就无形中增加了产品的硬件成本。在SD卡数据读写时间要求不是很严格的情况下,选用SPI模式可以说是一种最佳的解决方案。因为在SPI模式下,通过四条线就可以完成所有的数据交换,并且目前市场上很多MCU都集成有现成的SPI接口电路,采用SPI模式对SD卡进行读写操作可大大简化硬件电路的设计。虽然STC89C516

40、不带SD卡硬件控制器,也没有现成的SPI接口模块,但是可以用软件模拟出SPI总线时序。SD卡提供9Pin(SD卡座为11Pin)的引脚接口便于外围电路对其进行操作,9Pin的引脚随工作模式的不同有所差异。在SPI模式下,引脚1(DAT3)作为SPI片选线CS用,引脚2(CMD)用作SPI总线的数据输出线SDO,而引脚7(DAT0)为数据输入线SDI,引脚5用作时钟线(CLK)。除电源和地,保留引脚可悬空。SD卡的逻辑电平相当于3.3V TTL电平标准,而控制芯片STC89C516的逻辑电平为5V CMOS电平标准。因此,它们之间不能直接相连,否则会有烧毁SD卡的可能。出于对安全工作的考虑,有必

41、要解决电平匹配问题。要解决这一问题,最根本的就是解决逻辑器件接口的电平兼容问题,原则主要有两条:一为输出电平器件输出高电平的最小电压值,应该大于接收电平器件识别为高电平的最低电压值;另一条为输出电平器件输出低电平的最大电压值,应该小于接收电平器件识别为低电平的最高电压值。一般来说,通用的电平转换方案是采用类似SN74ALVC4245的专用电平转换芯片,这类芯片不仅可以用作升压和降压,而且允许两边电源不同步。但是,这个方案代价相对昂贵,而且一般的专用电平转换芯片都是同时转换8路、16路或者更多路数的电平,相对本系统仅仅需要转换3路来说是一种资源的浪费。考虑到SD卡在SPI协议的工作模式下,通讯都

42、是单向的,于是在单片机向SD卡传输数据时采用晶体管加上拉电阻法的方案。而在SD卡向单片机传输数据时可以直接连接,因为它们之间的电平刚好满足上述的电平兼容原则,既经济又实用。如图6所示。图6 STC89C516与SD卡的连接3.1.5人机交互接口由于51系列的处理器能力有限,想要通过液晶屏来进行文件显示的话,效果不好,成本也高。STC89C516自带串行接口,可通过串行接口与电脑连接,利用windows xp的超级终端来进行输出和接收用户的命令。由于RS-232采用的电平与TTL电平不一样,所以要进行电平的转换,电平转换由MAX232担任,连接图如图7所示。图7 串行接口电路4 软件设计4.1

43、SD卡工作模式SD卡可以支持两种操作模式:SD和SPI模式。可以选择以上其中任一模式,SD卡模式允许4线的高速数据传输。SPI模式允许简单通用的SPI通道接口, 这种模式相对于SD模式的不足之处是丧失了速度,SD卡的引脚定义见表7。表7 SD卡引脚定义针脚名称类型描述123456789CD DAT3CMDVssVccCLKCss2DAT0DAT1DAT2I/O/PPPPSSISI/O/PPI/O/PPI/O/PP卡监测数据位3命令/回复地供电电压时钟地数据位0数据位1数据位2SD卡在上电初期自动进入SD总线模式,在此模式下向SD卡发送复位命令CMD0。如果SD卡在接收复位命令过程中CS低电平有

44、效,则进入SPI模式,否则工作在SD总线模式。对于不带SPI串行总线接口的STC89C516单片机来说,用软件来模拟SPI总线操作的具体做法是:在CLK(P1.0)的上升沿从SDO(P1.2)输出一位数据到 SD卡,在CLK(P1.0)的下降沿从SDI(P1.1)输入一位数据到STC89C516单片机,循环8次即可完成一次数据的传输。本文的实现程序把SPI总线读写功能集成在一起。具体程序见函数SPI_SEND:(程序是在Keil uVision2的编译环境下编写)sbit CLK = P10; sbit SDI = P11;sbit SDO = P12;sbit CS = P13;unsign

45、ed char SPI_SEND(unsigned char data0)unsigned char tem=8;while(tem-)CLK=0; /设置CLK引脚位低电平SDO=0; / SDO输出低电平,即输出数据0if(data0&0x80) /若要输出的数据位为1SDO=1; /输出高电平,即输出数据1data0=1; /数据左移一位CLK=1; /上升沿输出一位数据if(SDI) /若SDI为高电平,即收到数据1data0|=1; /置相应的数据位为1CLK=0; /设置CLK引脚位低电平return data0; /返回接收到的数据4.2 命令与数据传输SD卡自身有完备的命令系统,以实现各项操作。命令格式如图8:图8 SD卡的命令格式命令的传输过程采用发送应答机制,过程如下图9:command 主机到SD卡 DataIn - - 从SD卡到主机DataOut -

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号