《数码相框.docx》由会员分享,可在线阅读,更多相关《数码相框.docx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘 要数码相框数码相框是展示数码照片而非纸质照片的相框,它不再用放进相片的方式来展示,而是通过一个液晶的屏幕显示,它可以通过读卡器的接口从SD卡获取相片,并设置循环显示的方式,比普通的相框更灵活多变,也给现在日益使用的数码相片一个新的展示空间。市场上的数码相框一般是以带液晶驱动外设的 ARM 处理器为主实现功能,而本设计恰恰相反,所有的功能都使用 FPGA来完成。本设计使用Altera公司cyclone 系列的 EP1C3T144为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。从 SD卡中读取图片(SPI 模式),SD卡控制不涉及文件操作系统。使用电脑显示器(VGA)作为图片显示
2、屏幕,工作在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
3、 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.
4、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
5、read pictures from the SD card (SPI model). The SD card control does not need a 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
6、 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开发板
7、功能框图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显
8、示驱动模块的设计393.6.1 VGA显示原理与VGA时序实现393.6.2 功能单元设计413.6.3 显存数据更新与显示的同步实现423.6.4 BMP格式图片显示433.7 本章小结48总 结49参考文献50致 谢51第1章 绪论1.1 课题的研究目的和意义数码相框的普及,使得拍摄下来的数码相片呈现出了几何级数的增长,用各种存储器保存照片已成为大家习惯的做法。有资料显示,全世界拍摄的数码照片,只有不到35%的被打印出来,而超过65%的都被保存在硬盘、光盘、存储卡等存储介质中。浏览存储器中的照片最常用的方法是通过电脑、电视等产品,它们能够清晰地显示照片,但不方便携带。随着嵌入式技术、液晶显
9、示技术、数字存储技术的发展,出现了一种以数码相片的保存、回放和浏览为核心功能的产品数码相框,给数码相片提供了一个新的展示平台。数码相框主要由存储器、液晶显示器、解码器和微控制器组成,它利用解码芯片实现对图像的解码,并在液晶屏上显示图像。鉴于数码相框广泛的用途,开发数码相框具有重要的意义和市场价值。虽然当前数码相框并不普及,但随着数码成像后期应用市场的不断扩大,数码相框将成为必不可少的配套产品,它也许会成为继电视、电脑之后生活中必不可少的第三块屏幕。1.2 数码相框的动态发展趋势从长远来看,今后几年将为处在数码相框产品供应链的各企业带来巨大的商机。未来几年,数码相框的市场处在逐渐走向成熟的阶段,
10、其产销量和市场需求依然将保持大幅度的增长,在未来几内,市场无萎缩的可能。但数码相框拓展中国市场需克服两大难点:一是价格; 二是拓展应用空间。价格下降是必然趋势,中国消费者接受只是时间的问题,而根据中国消费者的需求和特点,开发出相应的应用产品,则是需要数码相框厂商亟待的问题。从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特效,已成为DC/DV的附属物;另一部分产品会添加一些新的功能,如Wi-Fi、DVB-T,还可以即时报告天气、股票等信息,从而有望成为“桌面信
11、息中心”。此外,触摸面板会成为一个应用的新亮点。1.3 设计的主要目标任务本设计使用Altera公司cyclone 系列的 EP1C3T144为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。从 SD卡中读取图片(SPI 模式),SD卡控制不涉及文件操作系统。使用电脑显示器(VGA)作为图片显示屏幕,工作在60Hz/800*600分辨率下,显示色彩为256色。FPGA 中实现bmp解码,使用SDR SDRAM作为显示图片缓存,循环显示SD卡中10幅图片。1.4 本章小结本章介绍了数码相框广泛的用途及其研究的目的和意义,也从未来发展方向和技术实现层面简述了数码相框的动态发展趋势,从而
12、说明了本人设计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
13、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,以
14、及最大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以及SS
15、TL-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)
16、1317205264RAM总量59,90478,33692,160239,616294,912PLLs12222用户可用IO数1043011852493012.5 本章小结本章介绍了SF-EP1C开发板的原理图、板子的功能框图、基本配置和Cyclone器件简介,与市面上其它板子对比,SF-EP1C开发板价格实惠,而且这块板子功能比较全面,虽然板子只有不到3000个LEs,但是如果写起代码来就会深有感触,这个规模的逻辑资源也是可以胜任很多应用的。如果想通过这样一块板子来掌握如何利用FPGA器件本身的各种资源来完成一个像模像样的工程,那么SF-EP1C开发板是个不错的选择。第3章 数码相框的设计方
17、案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 个大的功能模块包括:
18、系统时钟与复位模块、SD卡相关模块(包括 SD 卡控制模块和 SPI 时序产生模块)、数据流控制模块(包括写 SDRAM 缓存 FIFO 模块、读 SDRAM 缓存 FIFO 模块和 BMP 色彩表模块)、SDRAM控制器模块、VGA 显示驱动模块。图3-1 数码相框功能框图图3-2 数码相框系统功能框图系统时钟与复位模块主要完成 PLL例化和复位控制。PLL 输出三个时钟:内部 SDRAM 控制器工作的 100MHz 时钟、 外部 SDRAM使用的有一定相位偏移的 100MHz 时钟和其他模块使用的 50MHz 时钟。复位控制部分对复位信号做“异步复位,同步释放”处理,保证系统有一个可靠稳定
19、的复位信号。SD 卡相关模块有两个子模块,SD 卡控制模块完成 SD 卡的一些基本控制,如 SD 卡的上电初始化、命令发送、数据读取等。FPGA 和SD卡之间数据或命令的传输是通过 SPI 口,这部分由 SPI时序产生模块控制。 数据流控制模块用于衔接 SD 卡、SDRAM 以及VGA显示驱动模块。从 SD 卡中读取的 BMP图片的色彩表数据将被缓存到 BMP色彩表中,用于显示图片时译码使用。SD 卡的图片数据部分则被送入写 SDRAM缓存 FIFO 中。读和写 SDRAM 缓存 FIFO都直接和 SDRAM 控制器连接,他们一齐完成了高速数据的缓冲。由于 SD 卡本身速度较慢,无法满足 VG
20、A 实时的数据扫描需求,所以需要先将 SD卡中缓存的图片送入 SDRAM 中,VGA显示器实时的从 SDRAM中读取数据进行显示。 最后从读 SDRAM 缓存 FIFO里输出的图片数据经过 BMP 色彩表译码后送到 VGA 显示驱动模块。VGA 显示模块直接驱动显示器进行图片显示。DIY数码相框工程源码配合SF-EP1C开发板使用,FPGA管脚定义以及分配如表3-1所示。表3-1 DIY数码相框引脚定义及分配名称方向分配作用clkinputPIN16FPAG输入时钟信号25MHzrst_ninputPIN144FPAG输入复位信号,低电平有效sdram_clkoutputPIN26SDRAM时
21、钟信号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_a
22、ddr1outputPIN48SDRAM地址总线sdram_addr2outputPIN49SDRAM地址总线sdram_addr3outputPIN50SDRAM地址总线sdram_addr4outputPIN36SDRAM地址总线sdram_addr5outputPIN35SDRAM地址总线sdram_addr6outputPIN34SDRAM地址总线sdram_addr7outputPIN33SDRAM地址总线sdram_addr8outputPIN32SDRAM地址总线sdram_addr9outputPIN31SDRAM地址总线sdram_addr10outputPIN42SDRAM
23、地址总线sdram_addr11outputPIN28SDRAM地址总线sdram_data0inoutPIN132SDRAM数据总线sdram_data1inoutPIN133SDRAM数据总线sdram_data2inoutPIN134SDRAM数据总线sdram_data3inoutPIN139SDRAM数据总线sdram_data4inoutPIN140SDRAM数据总线sdram_data5inoutPIN141SDRAM数据总线sdram_data6inoutPIN142SDRAM数据总线sdram_data7inoutPIN143SDRAM数据总线sdram_data8inout
24、PIN11SDRAM数据总线sdram_data9inoutPIN10SDRAM数据总线sdram_data10inoutPIN7SDRAM数据总线sdram_data11inoutPIN6SDRAM数据总线sdram_data12inoutPIN5SDRAM数据总线sdram_data13inoutPIN4SDRAM数据总线sdram_data14inoutPIN3SDRAM数据总线sdram_data15inoutPIN2SDRAM数据总线spi_misoinputPIN51SPI主机输入从机输出数据信号spi_mosioutputPIN57SPI主机输出从机输入数据信号spi_clkou
25、tputPIN52SPI时钟信号,由主机产生spi_cs_noutputPIN58SPI从设备使能信号,由主机控制hsyncOutputPIN61VGA行同步信号vsyncOutputPIN62VGA场同步信号vga_r2OutputPIN74VGA色彩vga_r1OutputPIN73VGA色彩vga_r0OutputPIN72VGA色彩vga_g2outputPIN71VGA色彩vga_g1OutputPIN70VGA色彩vga_g0OutputPIN69VGA色彩vga_b1OutputPIN67VGA色彩vga_b0OutputPIN68VGA色彩数码相框在FPGA中实现的框图如图3-
26、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 meg
27、afunction variation”, 点击“Next”。图3-5 新建 megagunction3、如图3-6所示,进行以下配置: 在“Select a megafunction from the list below”窗口内打开“I/O”下拉框,选择“ALTPLL”。 在“Which type of output you wangt to create?”下选择“Verilog HDL”,这是配置的 PLL内核使用的语言,一般选择此项。 “What name do you want for the output file?”里默认会出现当前设计的工程路径,需要设计者在最后面手动输入例化
28、的 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 asy
29、nchronously 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 p
30、hase 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”后和前一步类似进行配置即可。
31、如图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 里是用户所配
32、置的 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 产生模块
33、 /产生一个系统输入时钟 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)即串行外围设备接口,是一种高速、全双工、同步的通信总线。只需要四条信号线即可,节约管脚,同时有利于 PC
34、B的布局。正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 该工程模块的 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 即主机的输出或者说是从机的输入
35、。 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 闲置时总是低电平, 发起通信后的
36、第一个时钟沿是上升沿。 而CPHA则用于控制数据与时钟的对齐模式,CPHA=1 时,时钟的第一个变化沿(上升沿或者下降沿)数据变化,那么也意味着时钟的第二个沿(与第一个沿相反)锁存数据;CPHA=0 时,时钟的第一个变化沿之前数据变化,那么也意味着时钟的第一个沿锁存数据。图3-15 CPOL 配置 SPI 时钟不同的 CPOL和 CPHA 可以配置成 4 种SPI 传输模式,其时序如图3-16所示。SD卡通信可以是 SD 模式或者 SPI 模式,该工程使用了 SD 卡的 SPI 模式进行通信。SD卡在总线模式中唤醒,在接收复位命令时如果 CS 信号有效(拉低),那么将进入 SPI模式。如果 S
37、D 卡认为 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,速率
38、为 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
39、数据接收完成标志位,高有效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 拉低后也会清零
40、内部的计数器,此时的 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 文件系统做一些简单的介绍,该设计代码
41、不涉及文件系统的操作,但是了解文件系统将有助于进一步明确 SD 卡的数据存储结构。 3.3.2.1 FAT16 存储原理 当把一部分磁盘空间格式化为FAT文件系统时, FAT文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储。下文将把FAT16部分提取出来,详细进行描述。 FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,FAT16简单来讲由图3-17所示的六部分组成。首先是引导扇区(DBR),紧随的便是FAT表,FAT表是FAT16用来记录磁盘数据区簇链结构的。FAT将磁盘空间按一定数目的扇区为单位进行划分,这样
42、的单位称为簇。通常情况下,每扇区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个字节(特殊情况
43、也要占用其它保留扇区)。在这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 5
44、3 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,内容
45、: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、根目录、数据区的次序,可以依次计算出它们