已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
五邑大学本科毕业设计摘 要数码相框数码相框是展示数码照片而非纸质照片的相框,它不再用放进相片的方式来展示,而是通过一个液晶的屏幕显示,它可以通过读卡器的接口从SD卡获取相片,并设置循环显示的方式,比普通的相框更灵活多变,也给现在日益使用的数码相片一个新的展示空间。市场上的数码相框一般是以带液晶驱动外设的 ARM 处理器为主实现功能,而本设计恰恰相反,所有的功能都使用 FPGA来完成。本设计使用Altera公司cyclone 系列的 EP1C3T144为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。从 SD卡中读取图片(SPI 模式),SD卡控制不涉及文件操作系统。使用电脑显示器(VGA)作为图片显示屏幕,工作在60Hz/800*600分辨率下,显示色彩为256色。FPGA 中实现bmp解码,使用SDR SDRAM作为显示图片缓存,循环显示SD卡中10幅图片。关键词 数码相框;EP1C3T144;SF-EP1C开发板;SPI模式;bmp解码;SDR SDRAMAbstractThe digital photo frame displays digital photos rather than paper photos. It no longer uses paper photos but uses a LCD screen to display photos instead. It get photos from SD card through SD card interface, displaying photos in a cyclical way. Its more flexible than traditional frame, also gives a new display space as digital photos is increasingly used. In the market, digital photo frames are mainly based on ARM processor with LCD and other peripherals. On the contrary, this design employs FPGA to complete all functions of digital photo frame. This design uses EP1C3T144, which is in the cyclone series of Altera company, as the core unit for realizing all the functionality. And the design uses SF - EP1C development board as the target board. It can read pictures from the SD card (SPI model). The SD card control does not need a file system operation. Then the design use a computer display(VGA) as a picture screen, working in 60Hz, 800 * 600 resolution and 256 colors. At last BMP decoding using FPGA is realized, in which SDR SDRAM is used as image cache. As a result, it cyclically displays10 pictures from the SD card successfully. Key words digital photo frame EP1C3T144 SF-EP1C Development Board SPI mode bmp decoding SDR SDRAM目 录摘 要IAbstractII第1章 绪论11.1 课题的研究目的和意义11.2 数码相框的动态发展趋势11.3 设计的主要目标任务21.4 本章小结2第2章 SF-EP1C开发板介绍32.1 SF-EP1C开发板原理图32.2 SF-EP1C开发板功能框图52.3 SF-EP1C开发板基本配置62.4 Cyclone器件简介62.5 本章小结7第3章 数码相框的设计方案83.1 功能需求及模块划分83.2 系统时钟与复位模块的设计113.2.1 PLL的配置需求113.2.2 PLL的配置步骤123.2.3 PLL的例化183.3 SD卡模块的设计193.3.1 SPI接口控制193.3.2 SD卡数据存储结构与 FAT16 文件系统213.3.3 SD卡初始化及读操作293.4 数据流模块的设计313.5 SDRAM控制器模块的设计343.5.1 接口控制模块353.5.2 命令生成模块363.5.3 数据路径模块373.6 VGA显示驱动模块的设计393.6.1 VGA显示原理与VGA时序实现393.6.2 功能单元设计413.6.3 显存数据更新与显示的同步实现423.6.4 BMP格式图片显示433.7 本章小结48总 结49参考文献50致 谢5151第1章 绪论1.1 课题的研究目的和意义数码相框的普及,使得拍摄下来的数码相片呈现出了几何级数的增长,用各种存储器保存照片已成为大家习惯的做法。有资料显示,全世界拍摄的数码照片,只有不到35%的被打印出来,而超过65%的都被保存在硬盘、光盘、存储卡等存储介质中。浏览存储器中的照片最常用的方法是通过电脑、电视等产品,它们能够清晰地显示照片,但不方便携带。随着嵌入式技术、液晶显示技术、数字存储技术的发展,出现了一种以数码相片的保存、回放和浏览为核心功能的产品数码相框,给数码相片提供了一个新的展示平台。数码相框主要由存储器、液晶显示器、解码器和微控制器组成,它利用解码芯片实现对图像的解码,并在液晶屏上显示图像。鉴于数码相框广泛的用途,开发数码相框具有重要的意义和市场价值。虽然当前数码相框并不普及,但随着数码成像后期应用市场的不断扩大,数码相框将成为必不可少的配套产品,它也许会成为继电视、电脑之后生活中必不可少的第三块屏幕。1.2 数码相框的动态发展趋势从长远来看,今后几年将为处在数码相框产品供应链的各企业带来巨大的商机。未来几年,数码相框的市场处在逐渐走向成熟的阶段,其产销量和市场需求依然将保持大幅度的增长,在未来几内,市场无萎缩的可能。但数码相框拓展中国市场需克服两大难点:一是价格; 二是拓展应用空间。价格下降是必然趋势,中国消费者接受只是时间的问题,而根据中国消费者的需求和特点,开发出相应的应用产品,则是需要数码相框厂商亟待的问题。从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特效,已成为DC/DV的附属物;另一部分产品会添加一些新的功能,如Wi-Fi、DVB-T,还可以即时报告天气、股票等信息,从而有望成为“桌面信息中心”。此外,触摸面板会成为一个应用的新亮点。1.3 设计的主要目标任务本设计使用Altera公司cyclone 系列的 EP1C3T144为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。从 SD卡中读取图片(SPI 模式),SD卡控制不涉及文件操作系统。使用电脑显示器(VGA)作为图片显示屏幕,工作在60Hz/800*600分辨率下,显示色彩为256色。FPGA 中实现bmp解码,使用SDR SDRAM作为显示图片缓存,循环显示SD卡中10幅图片。1.4 本章小结本章介绍了数码相框广泛的用途及其研究的目的和意义,也从未来发展方向和技术实现层面简述了数码相框的动态发展趋势,从而说明了本人设计DIY数码相框的原因,最后介绍了设计数码相框的主要目标任务。第2章 SF-EP1C开发板介绍2.1 SF-EP1C开发板原理图2.2 SF-EP1C开发板功能框图如图2-1和图2-2所示,SF-EP1C开发板有着比较丰富的外设,也给用户预留了一些可扩展的接口。图2-1 SF-EP1C开发板正面资源分布及功能框图图2-2 SF-EP1C开发板背面资源分布及功能框图2.3 SF-EP1C开发板基本配置FPGA使用EP1C3T144C8,硬件电路充分考虑了可升级性,该板子同样适用于EP1C6T144;板载1Mbit串行配置芯片EPCS1,支持AS和JTAG两种配置方式;5V/1.5A DC电源供电,内部产生核压1.5V、I/O电压3.3V;PLL电源电路进行滤波处理,更加稳定可靠;板载25MHz有源晶振,预留1个未焊接晶振接口;4个独立按键、2个复用LED;1个串口;1个SD卡接口;1个256色VGA接口;1个64MBit(4*1M*256Bit) SDRAM;8位拨码开关;1个复位按键和1个FPGA重配置按键;4位数码管,仅使用3个I/O口控制,由两个74HC595芯片实现;2个20PIN的扩展接口,供大家任意发挥;2.4 Cyclone器件简介Altera的Cyclone系列可编程门阵列是基于1.5V、0.13um的SRAM全铜工艺制造。能提供最大20060个LEs,以及最大288Kbit的内嵌RAM。FPGA内部集成的诸如时钟锁相环(PLLs)和专用DDR接口,达到了DDR SDRAM和快速RAM存储访问需求。Cyclone器件是数据存储的高性价比解决方案。Cyclone器件也支持多种I/O标准,包括数据率高达640Mbps的LVDS接口以及66-或33-MHz、64-或32-bit的PCI接口。Altera也提供低成本的串行配置器件配置cyclone器件。Cyclone器件具有以下特性:2910-20060个LEs;最大内嵌294912 RAM bits(36864 bytes);支持低成本串行配置器件;支持LVTTL,LVCOMS,SSTL-2以及SSTL-3 I/O标准;支持66-或33-MHz、64-或32-bit的PCI接口;支持数据率高达640Mbps的LVDS接口;支持数据率低至311Mbps的LVDS接口;支持数据率311Mbps的RSDS接口;每个器件最多两个PLLs,并且支持倍频和相位偏移;多达8个全局时钟网络;支持外部存储器,包括DDR SDRAM(133MHz)、FCRAM以及SDR SDRAM;支持altera提供的多种多样的IP核。表2-1 Cyclone器件资源器件EP1C3EP1C4EP1C6EP1C12EP1C20Les2,9104,0005,98012,06020,060M4K RAM块(128*36bit)1317205264RAM总量59,90478,33692,160239,616294,912PLLs12222用户可用IO数1043011852493012.5 本章小结本章介绍了SF-EP1C开发板的原理图、板子的功能框图、基本配置和Cyclone器件简介,与市面上其它板子对比,SF-EP1C开发板价格实惠,而且这块板子功能比较全面,虽然板子只有不到3000个LEs,但是如果写起代码来就会深有感触,这个规模的逻辑资源也是可以胜任很多应用的。如果想通过这样一块板子来掌握如何利用FPGA器件本身的各种资源来完成一个像模像样的工程,那么SF-EP1C开发板是个不错的选择。第3章 数码相框的设计方案3.1 功能需求及模块划分本设计所要实现的数码相框的主要功能点如下。 1、使用 cyclone 系列的 EP1C3T144 为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。 2、从 SD 卡中读取图片(SPI 模式),SD 卡控制不涉及文件操作系统。 3、使用电脑显示器(VGA)作为图片显示屏幕,工作在 60Hz/800*600 分辨率下,显示色彩为 256色。 4、FPGA 中实现 bmp 的解码。 5、使用 SDR SDRAM 作为显示图片缓存。 6、循环显示SD 卡中 10 幅图片。 如图3-1、图3-2所示,该设计的功能框图里明确了各个功能模块,5 个大的功能模块包括:系统时钟与复位模块、SD卡相关模块(包括 SD 卡控制模块和 SPI 时序产生模块)、数据流控制模块(包括写 SDRAM 缓存 FIFO 模块、读 SDRAM 缓存 FIFO 模块和 BMP 色彩表模块)、SDRAM控制器模块、VGA 显示驱动模块。图3-1 数码相框功能框图图3-2 数码相框系统功能框图系统时钟与复位模块主要完成 PLL例化和复位控制。PLL 输出三个时钟:内部 SDRAM 控制器工作的 100MHz 时钟、 外部 SDRAM使用的有一定相位偏移的 100MHz 时钟和其他模块使用的 50MHz 时钟。复位控制部分对复位信号做“异步复位,同步释放”处理,保证系统有一个可靠稳定的复位信号。SD 卡相关模块有两个子模块,SD 卡控制模块完成 SD 卡的一些基本控制,如 SD 卡的上电初始化、命令发送、数据读取等。FPGA 和SD卡之间数据或命令的传输是通过 SPI 口,这部分由 SPI时序产生模块控制。 数据流控制模块用于衔接 SD 卡、SDRAM 以及VGA显示驱动模块。从 SD 卡中读取的 BMP图片的色彩表数据将被缓存到 BMP色彩表中,用于显示图片时译码使用。SD 卡的图片数据部分则被送入写 SDRAM缓存 FIFO 中。读和写 SDRAM 缓存 FIFO都直接和 SDRAM 控制器连接,他们一齐完成了高速数据的缓冲。由于 SD 卡本身速度较慢,无法满足 VGA 实时的数据扫描需求,所以需要先将 SD卡中缓存的图片送入 SDRAM 中,VGA显示器实时的从 SDRAM中读取数据进行显示。 最后从读 SDRAM 缓存 FIFO里输出的图片数据经过 BMP 色彩表译码后送到 VGA 显示驱动模块。VGA 显示模块直接驱动显示器进行图片显示。DIY数码相框工程源码配合SF-EP1C开发板使用,FPGA管脚定义以及分配如表3-1所示。表3-1 DIY数码相框引脚定义及分配名称方向分配作用clkinputPIN16FPAG输入时钟信号25MHzrst_ninputPIN144FPAG输入复位信号,低电平有效sdram_clkoutputPIN26SDRAM时钟信号sdram_ckeoutputPIN27SDRAM时钟有效信号,高电平有效sdram_cs_noutputPIN39SDRAM片选信号,低电平有效sdram_ras_noutputPIN38SDRAM行地址选通脉冲,低电平有效sdram_cas_noutputPIN37SDRAM列地址选通脉冲,低电平有效sdram_we_noutputPIN1SDRAM写选通信号,低电平有效sdram_ba0outputPIN40SDRAM的L-Bank地址线sdram_ba1outputPIN41SDRAM的L-Bank地址线sdram_addr0outputPIN47SDRAM地址总线sdram_addr1outputPIN48SDRAM地址总线sdram_addr2outputPIN49SDRAM地址总线sdram_addr3outputPIN50SDRAM地址总线sdram_addr4outputPIN36SDRAM地址总线sdram_addr5outputPIN35SDRAM地址总线sdram_addr6outputPIN34SDRAM地址总线sdram_addr7outputPIN33SDRAM地址总线sdram_addr8outputPIN32SDRAM地址总线sdram_addr9outputPIN31SDRAM地址总线sdram_addr10outputPIN42SDRAM地址总线sdram_addr11outputPIN28SDRAM地址总线sdram_data0inoutPIN132SDRAM数据总线sdram_data1inoutPIN133SDRAM数据总线sdram_data2inoutPIN134SDRAM数据总线sdram_data3inoutPIN139SDRAM数据总线sdram_data4inoutPIN140SDRAM数据总线sdram_data5inoutPIN141SDRAM数据总线sdram_data6inoutPIN142SDRAM数据总线sdram_data7inoutPIN143SDRAM数据总线sdram_data8inoutPIN11SDRAM数据总线sdram_data9inoutPIN10SDRAM数据总线sdram_data10inoutPIN7SDRAM数据总线sdram_data11inoutPIN6SDRAM数据总线sdram_data12inoutPIN5SDRAM数据总线sdram_data13inoutPIN4SDRAM数据总线sdram_data14inoutPIN3SDRAM数据总线sdram_data15inoutPIN2SDRAM数据总线spi_misoinputPIN51SPI主机输入从机输出数据信号spi_mosioutputPIN57SPI主机输出从机输入数据信号spi_clkoutputPIN52SPI时钟信号,由主机产生spi_cs_noutputPIN58SPI从设备使能信号,由主机控制hsyncOutputPIN61VGA行同步信号vsyncOutputPIN62VGA场同步信号vga_r2OutputPIN74VGA色彩vga_r1OutputPIN73VGA色彩vga_r0OutputPIN72VGA色彩vga_g2outputPIN71VGA色彩vga_g1OutputPIN70VGA色彩vga_g0OutputPIN69VGA色彩vga_b1OutputPIN67VGA色彩vga_b0OutputPIN68VGA色彩数码相框在FPGA中实现的框图如图3-3所示。图3-3 数码相框的RTL视图3.2 系统时钟与复位模块的设计3.2.1 PLL的配置需求 已经新建了一个工程,然后需要配置一个 PLL。该PLL的输入时钟为FPGA外部25MHz晶振,希望得到一个50MHz(输入时钟的2倍频)的系统时钟供FPGA内部使用。该PLL的输入输出接口如表3-2所示。表3-2 PLL的接口定义3.2.2 PLL的配置步骤 1、如图3-4所示,在 Quartus II的菜单栏选择“ToolsMegaWizard Plug-In Manager”。图3-4 选择 MegaWizard2、如图3-5所示,使用默认选项“Create a new custom megafunction variation”, 点击“Next”。图3-5 新建 megagunction3、如图3-6所示,进行以下配置: 在“Select a megafunction from the list below”窗口内打开“I/O”下拉框,选择“ALTPLL”。 在“Which type of output file do you wangt to create?”下选择“Verilog HDL”,这是配置的 PLL内核使用的语言,一般选择此项。 “What name do you want for the output file?”里默认会出现当前设计的工程路径,需要设计者在最后面手动输入例化的 PLL 的名字,这里输入了“PLL_ctrl”。 完成以上配置,点击“Next”。图3-6 新建 PLL4、如图3-7所示,进行以下配置: 在“General”一栏内的“Which device speed grade will you be using?”选则该工程所使用器件的速度等级。 在“What is frequency of the inclock0 input?”内选择 PLL输入时钟的频率。其他选项使用默认即可。点击“Next”。图3-7 输入时钟配置5、如图3-8所示,配置如下: 在“Option input”一栏内勾选“Creat anaresetinput to asynchronously reset the PLL”。 在“Lock output”中勾选“Creat lockedoutput”。 其他选项使用默认即可。点击“Next”。图3-8 配置控制信号在“Enter output clock frequency?”后面输入希望得到的 PLL 输出时钟的频率。 也可以在“Enter output clock parameter?”后面设置相应的输出时钟和输入时钟的频率关系。“Clock Multiplication factor”后输入倍频系数,“Clock division factor”后输入分频系数,二者决定了输出时钟频率。 在“Clock phase shift”中可以设置相位偏移。 在“Clock ducy cycle”中可以设置输出时钟占空比。 按照图3-9设置后,点击“Next”。图3-9 配置输出时钟 c06、“clk c1”选项是可选的,用户需要第二个输出时钟时可以开启该输出时钟,相应勾选“Use the clock”后和上一步类似进行配置即可。如图3-10所示,点击“Next”。图3-10 配置输出时钟 c17、“extclk e0”也是可选的,该时钟主要是输出给 FPGA 外部器件作为时钟,不能作为内部时钟使用。用户需要该输出时钟时可以开启该输出时钟,相应勾选“Use the clock”后和前一步类似进行配置即可。如图3-11所示,点击“Next”。图3-11 配置输出时钟 e08、如图3-12所示,“EDA”中列了用户在对例化了 PLL 模块的工程仿真时,需要添加的仿真库文件,用户可以到 Quartus II 安装文件夹下可以找到。点击“Next”。图3-12 仿真库文件9、如图3-13所示,“Summary”中罗列了该 PLL 核最终的输出文件。对主要的一些输出文件说明如下: PLL_ctrl.v,字面翻译是“变异文件” ,是 PLL内部的控制 IP 核。 PLL_ctrl_inst.v 是一个模板的例化文件, 用户可以直接复制这个文件里的例化来用。 PLL_ctrl_wave.jpg 里是用户所配置的 PLL 的波形示例,勾选后可以在工程目录下找到,看看波形是否符合预定的要求。或者用它和仿真后的波形对比一下,它们应该是一致的。图3-13 输出文件3.2.3 PLL的例化 PLL 配置完成后,需要将 PLL 例化到工程中。找到“PLL_ctrl_inst.v”文件并打开,将其内容拷贝到工程代码中,然后更改“()”里的内容,使用代码外的接口对应即可。如: input clk; /25MHz 系统外部输入时钟 input rst_n; /系统复位信号,低电平有效 output clkdiv; /PLL 输出时钟 output locked; /稳定PLL输出标志位,高有效 /PLL 产生模块 /产生一个系统输入时钟 2 倍频,相移 0 度的时钟 PLL_ctrl PLL_ctrl_inst (.areset(rst_n), /PLL异步复位信号,高有效 .inclk0(clk), /PLL输入时钟 .c0(clkdiv), /PLL 输出时钟 .locked(locked) /稳定PLL输出标志位,高有效 );PLL仿真波形如图3-14所示。图3-14 PLL仿真波形3.3 SD卡模块的设计3.3.1 SPI接口控制 SPI(Serial Peripheral Interface)即串行外围设备接口,是一种高速、全双工、同步的通信总线。只需要四条信号线即可,节约管脚,同时有利于 PCB的布局。正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 该工程模块的 SPI 接口四条信号线分别定义为 spi_cs_n、spi_clk、spi_miso 和spi_mosi。其中 spi_cs_n 是控制芯片是否被选中的,只有片选信号有效时(一般为低电平有效),对此芯片的操作才有效。这就使得在同一总线上连接多个 SPI 设备成为可能。spi_clk是SPI 同步时钟信号,数据信号在该时钟的控制下逐位进行传输。spi_miso 和spi_mosi 是主从机进行通信的数据信号,spi_miso 即主机的输入或者说是从机的输出,spi_mosi 即主机的输出或者说是从机的输入。 SPI 的工作模式有两种:主模式和从模式。SPI 总线可以配置成单主单从、单主多从和互为主从。该工程的 FPGA 是SPI 主机,SD 卡是从机,处于单主单从模式。因此,FPGA 将控制产生 spi_cs_n 和spi_clk 的时序。 一般而言,SPI 通信可以配置成四种不同的传输模式。一些内嵌有 SPI 接口外设的处理器的 datasheet 都会提到CPOL和 CPHA这两个参数。如图3-15所示,CP0L=1 时,SPI 时钟信号 spi_clk 闲置时总是高电平,发起通信后的第一个时钟沿是下降沿;CPOL=0时, SPI 时钟信号 spi_clk 闲置时总是低电平, 发起通信后的第一个时钟沿是上升沿。 而CPHA则用于控制数据与时钟的对齐模式,CPHA=1 时,时钟的第一个变化沿(上升沿或者下降沿)数据变化,那么也意味着时钟的第二个沿(与第一个沿相反)锁存数据;CPHA=0 时,时钟的第一个变化沿之前数据变化,那么也意味着时钟的第一个沿锁存数据。图3-15 CPOL 配置 SPI 时钟不同的 CPOL和 CPHA 可以配置成 4 种SPI 传输模式,其时序如图3-16所示。SD卡通信可以是 SD 模式或者 SPI 模式,该工程使用了 SD 卡的 SPI 模式进行通信。SD卡在总线模式中唤醒,在接收复位命令时如果 CS 信号有效(拉低),那么将进入 SPI模式。如果 SD 卡认为 SD 总线模式是必须的, 那么它不会对命令做出响应并继续保持 SD 总线模式。如果需要 SPI 模式,SD卡将切换到 SPI 模式并发出 SPI 模式下的 R1 响应。 返回 SD 总线模式唯一的方法是重新给 SD 卡上电。在 SPI 模式下,SD 卡协议状态机不被检测。所有在 SD 总线模式支持的命令在 SPI模式也是可用的。 SPI 模式下缺省的命令结构/协议是 CRC 检测关闭。随着 SD 卡在 SD 总线模式下上电,CMD0 必须紧跟着一个有效的 CRC 字节。一旦在 SPI 模式下,默认将关闭 CRC。 对于该设计中,SPI 的时序模式为 CPOL=1,CPHA=1,速率为 25Mbit。图3-16 SPI 时序SPI 模块的接口定义如表3-3所示。表3-3 SPI模块接口定义名称方向描述clkinputPLL产生时钟信号,频率为50MHzrst_ninput系统复位信号,低电平有效spi_misoinputSPI主机输入从机输出数据信号spi_mosioutputSPI主机输出从机输入数据信号spi_clkoutputSPI时钟信号,由主机产生spi_tx_eninputSPI数据发送使能信号,高有效spi_tx_rdyoutputSPI数据发送完成标志位,高有效spi_rx_eninputSPI数据接收使能信号,高有效spi_rx_rdyoutputSPI数据接收完成标志位,高有效spi_tx_db7:0inputSPI数据发送寄存器spi_rx_db7:0outputSPI数据接收寄存器spi_cs_n 信号由 SD 卡命令驱动模块控制。当需要启动 SPI模式进行数据传输时,先把待传输的数据放置到 SPI 数据发送寄存器 spi_tx_db7:0中,然后将 SPI发送使能标志位spi_tx_en 拉高,SPI 发送功能模块被启动。若干个时钟周期后,数据发送完毕,则 SPI 发送完成标志位 spi_tx_rdy 被拉高。此时外部模块检测到 spi_tx_rdy 为高电平,则拉低spi_tx_en,SPI 模块在spi_tx_en 拉低后也会清零内部的计数器,此时的 spi_tx_rdy 也会复位,从而完成一次数据传输。接收功能和发送功能类似,只要在 SPI 接口完成标志位spi_rx_rdy拉高后读取 spi_rx_db7:0的数据即可。 3.3.2 SD卡数据存储结构与 FAT16 文件系统 首先,需要说明的一点是,SD卡和SDHC卡其实还是有点区别的,不仅在容量上,对于实际的底层驱动上也是稍有区别的。SD卡一般容量在 2GB以下,使用 FAT16 的文件系统;而 SDHC 容量为 4GB 或更大,一般使用 FAT32 的文件系统。该设计针对SD卡进行初始化和通信。下面对SD卡以及 FAT16 文件系统做一些简单的介绍,该设计代码不涉及文件系统的操作,但是了解文件系统将有助于进一步明确 SD 卡的数据存储结构。 3.3.2.1 FAT16 存储原理 当把一部分磁盘空间格式化为FAT文件系统时, FAT文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储。下文将把FAT16部分提取出来,详细进行描述。 FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,FAT16简单来讲由图3-17所示的六部分组成。首先是引导扇区(DBR),紧随的便是FAT表,FAT表是FAT16用来记录磁盘数据区簇链结构的。FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。通常情况下,每扇区512字节的原则是不变的。簇的大小一般是2n (n为整数)个扇区的大小,如512B,1K,2K,4K,8K,16K,32K,64K,通常不超过32K。以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512B的扇区管理会增加FAT表的项数,对大文件存取会增加消耗,使文件系统效率不高。分区的大小和簇的取值是有关系的,如表3-4。图3-17 FAT16的组织形式表3-4 FAT16分区大小与对应簇大小3.3.2.2 引导扇区的信息 DBR区(DOS BOOT RECORD)即操作系统引导记录区,通常占用分区的第0扇区共512个字节(特殊情况也要占用其它保留扇区)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,OS引导程序,结束标志几部分组成。表3-5表3-6和表3-7分别为FAT16分区上的引导扇区段、BPB字段、BPB扩展字段的重要信息列表。表3-5 FAT16分区上的引导扇区段表3-6 FAT16分区的BPB字段表3-7 FAT16分区的扩展BPB字段所使用的 SD 卡使用 Winhex查看到的 DBR 区数据如图3-18所示。 1、偏移地址 00H,长度 3,内容:EB 3C 90 跳转指令。 2、偏移地址 03H,长度 8,内容:4D 53 44 4F 53 35 2E 30 为厂商标志和 OS版本号,这里是 MSDOS5.0。3、偏移地址 0BH,长度 2,内容:00 02。注意这里数据的布局,高地址放高字节,低地址放低字节(数据为小端格式组织),所以数据应该是 0200,即 512。表示的意思是,该磁盘每个扇区有 512 个字节。有的可能是 1024、2048、4096。 4、偏移地址 0DH,长度 1,内容:01。表示的意思是每个簇有 1 个扇区。这个值不能为 0,而且必须是 2 的整数次方,比如 1、2、4、8、16、32、64、128。但是这个值不能使每个簇超过 32KB 字节。 5、偏移地址 0EH,长度 2,内容:08 00。转换一下,就是 00 08,意思是保留区域中的保留扇区数为 8 个。那么就可以知道下面的 FAT1 区的开始的地址就是:0x08*0x200(每个扇区的字节数)=0x1000。 6、偏移地址 10H,长度 1,内容:02。表示此卷中的 FAT 结构的份数为 2,另外一个是备份的。 7、偏移地址 11H,长度 2,内容:00 02。转换一下,就是 0200H,表示根目录项数(Root Entries),能够保存在该分区的根目录文件夹中的 32 个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为 512。通过该数据也可以算出根目录后的用户数据区的偏移量地址,即用户数据区首地址=根目录地址+512*32(十进制)。 8、偏移量地址 13H,长度 2,内容:4D ED。转换一下就是 ED4DH,即大约 32MB的SD卡存储量。表示小扇区数(Small Sector) 。该分区上的扇区数,表示为 16位(65536)。对大于 65536 个扇区的分区来说,本字段的值为 0,而使用大扇区数来取代它。 9、偏移地址 16H,长度 2,内容:EC 00。转换一下为 00EC,表示每个FAT占用的扇区数。那么每个扇区占用的字节数就是 0x00EC*0x200=0x1D800。根据启动区、FAT1、FAT2、根目录、数据区的次序,可以依次计算出它们的地址了。 10、偏移量地址 20H,长度 2,内容:00 00。表示大扇区数(Large Sector) 。如果小扇区数字段的值为 0,本字段就包含该 FAT16 分区中的总扇区数。如果小扇区数字段的值不为 0,那么本字段的值为 0。 图3-18 DBR区数据根据上面得到的信息可以进行以下的地址推导: 1、启动区地址理所当然是 0x00。 2、FAT1 地址是0x1000。 3、FAT2 地址是0x1000 + 0x1D800 = 0x1E800。 4、根目录区地址是 0x1E800 + 0x1D800 = 0x3C000。 根据上面的计算,可以看看是不是和实际的一致。如图3-19图3-20和图3-21所示。图3-19 FAT1 地址图3-20 FAT2 地址图3-21 根目录地址和前面计算的结果是一致的。SD 卡数据每次读取都是以一整个扇区 512 字节为单位。找出这些地址后,可以很方便的找到数据。 3.3.2.3 分析根目录区的内容 FAT16 文件系统从根目录所占的 32 个扇区之后的第一个扇区开始以簇为单位进行数据的处理,这之前仍以扇区为单位。对于根目录之后的第一个簇,系统并不编号为第 0 簇或第1 簇 (可能是留作关键字),而是编号为第 2 簇,也就是说数据区顺序上的第 1 个簇也是编号上的第 2簇。 FAT 文件系统之所以有 12,16,32 不同的版本之分,其根本在于 FAT 表用来记录任意一簇链接的二进制位数。以 FAT16 为例,每一簇在 FAT 表中占据 2 字节(二进制 16 位)。所以,FAT16 最大可以表示的簇号为 0xFFFF(十进制的 65535),以 32K 为簇的大小的话,FAT32可以管理的最大磁盘空间为:32KB65535=2048MB,这就是为什么 FAT16 不支持超过 2GB分区的原因。 FAT 表实际上是一个数据表,以 2 个字节为单位,我们暂将这个单位称为 FAT 记录项,通常情况其第 1、2 个记录项(前 4 个字节)用作介质描述。从第三个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。根据簇的表现情况 FAT 用相应的取值来描述,如表3-8所示。表3-8 FAT163记录项的取值含义这里使用的是FAT16短文件目录项,每32个字节表示一个文件(文件夹也是),3 2个字节的表示定义分别如表3-9所示。 表3-9 FAT16目录项32个字节的表示定义对上表中的一些取值进行说明: 对于短文件名,系统将文件名分成两部分进行存储, 即主文件名+扩展名。0x00x7字节记录文件的主文件名,0x80xA记录文件的扩展名,取文件名中的 ASCII 码值。不记录主文件名与扩展名之间的“.” 。 主文件名不足 8 个字符就以空白符(20H)填充,扩展名不足 3 个字符也同样以空白符(20H)填充。0x0 偏移处的取值若为00H,表明目录项为空;若为 E5H,表明目录项曾被使用,但对应的文件或文件夹已被删除。(这也是误删除后恢复的理论依据)。文件名中的第一个字符若为“.”或“.”表示这个簇记录的是一个子目录的目录项。“.”代表当前目录;“.”代表上级目录(和我们在 dos或 windows 中的使用意思是一样的,如果磁盘数据被破坏,就可以通过这两个目录项的具体参数推算磁盘的数据区的起始位置,猜测簇的大小等等,故而是比较重要的)。 0xB 的属性字段:可以看作系统将 0xB 的一个字节分成 8 位,用其中的一位代表某种属性的有或无。这样,一个字节中的 8 位每位取不同的值就能反映各个属性的不同取值了。如 00000101 就表示这是个文件,属性是只读系统。 0xC0x15 在原 FAT16 的定义中是保留未用的。在高版本的 WINDOWS 系统中有时也用它来记录修改时间和最近访问时间。那样其字段的意义和FAT32的定义是相同的。 0x160x17 中的时间=小时*2048+分钟*32+秒/2。得出的结果换算成 16 进制填入即可。也就是:0x16 字节的 04 位是以 2 秒为单位的量值;0x16 字节的 57 位和 0x17 字节的 02 位是分钟;0x17字节的 37位是小时。 0x180x19 中的日期=(年份-1980)*512+月份*32+日。得出的结果换算成 16 进制填入即可。也就是:0x18 字节 04 位是日期数;0x18 字节 57 位和 0x19 字节 0位是月份;0x19 字节的17 位为年号,原定义中 0119 分别代表 19802099,目前高版本的 Windows 允许取 0127,即年号最大可以到 2107年。 0x1A0x1B存放文件或目录的表示文件的首簇号,系统根据掌握的首簇号在 FAT表中找到入口, 然后再跟踪簇链直至簇尾, 同时用 0x1C0x1F处字节判定有效性就可以完全无误的读取文件(目录)了。 普通子目录的寻址过程也是通过其父目录中的目录项来指定的, 与数据文件(指非目录文件)不同的是目录项偏移 0xB的第 4 位置1,而数据文件为 0。 对于整个 FAT 分区而言,簇的分配并不完全总是分配干净的。如一个数据区为 99个扇区的 FAT 系统,如果簇的大小设定为 2 扇区,就会有 1个扇区无法分配给任何一个簇。这就是分区的剩余扇区,位于分区的末尾。有的系统用最后一个剩余扇区备份本分区的 DBR,这也是一种好的备份方法。 早的 FAT16系统并没有长文件名一说,Windows操作系统已经完全支持在 FAT16上的长文件名了。FAT16 的长文件名与 FAT32 长文件名的定义是相同的。3.3.2.4 计算出该文件放置空间 从文件的大小可以计算出,需要占用多少个簇。根据前面的数据,每个簇放1个扇区,每个扇区512个字节,那么一个簇的空间就是512字节了。那么48729字节需要96个簇,这96个簇的开始的地址就可以计算出来了。 如图3-22所示,TEST.txt占用了48KB的空间,NEXT占用了512B的空间。文件是按照整簇来存放的,不够一个簇的大小(由上面算得,一个簇为一个扇区即512B),也要给一个簇的空间。图3-22 文件存储空间占用上面已经知道TEST.txt开始簇地址存放在FAT1中的偏移量了:02H,由此可以先计算出TEST.txt的第一簇数据存放地址为: 3C000H(根目录地址)+20H*200H(前面提到的用户数据偏移量)+(02H-02H)*01H(1个簇有1个扇区)*200H=40000H。把偏移量-02H意思是簇号在FAT1中存储都是从02H开始的。 而第一个簇地址存放在FAT1中的:1000H(F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年老年综合征患者的护理查房模板课件
- ISO10012-2026《质量管理-测量管理体系要求》之17:“7.2能力”专业指导问答材料(雷泽佳编制-2026A0)
- 高中地理教学中的环境教育渗透理念分析
- 谈如何以探究活动为载体帮助学生建构科学概念
- 脱贫攻坚精准脱贫承诺书(3篇)
- 梦想启航:追逐未来的小学主题班会课件
- 艺术生活:感受美育魅力小学主题班会课件
- 重大工程质安保障承诺书8篇
- 房地产中介房源展示规范与技巧指南
- 【 道法 】第四单元 单元思考与行动课件-2025-2026学年统编版道德与法治七年级下册
- 《电路与电子技术》课件 5 基本放大电路
- 道路、公路施工组织与安全管理
- 上海市12校2022-2023学年物理高一第二学期期末学业水平测试试题含解析
- 刘园子副井井筒施工组织设计4.24(定稿)(2)剖析
- 中医医疗技术相关性感染预防与控制培训
- FCE考试必备词汇
- 安徽哈船新材料科技有限公司新增四套粉末涂料生产线项目环境影响报告表
- 委托技术开发协议全套文本、技术开发合同、技术开发合同
- IATF16949:2016体系推行计划
- 手机拍照技巧大全课件
- 严虎绘画课程对应课件1
评论
0/150
提交评论