MCS51 MCU读写SD卡版(单片机论文)

上传人:1666****666 文档编号:38951589 上传时间:2021-11-09 格式:DOC 页数:91 大小:1.65MB
收藏 版权申诉 举报 下载
MCS51 MCU读写SD卡版(单片机论文)_第1页
第1页 / 共91页
MCS51 MCU读写SD卡版(单片机论文)_第2页
第2页 / 共91页
MCS51 MCU读写SD卡版(单片机论文)_第3页
第3页 / 共91页
资源描述:

《MCS51 MCU读写SD卡版(单片机论文)》由会员分享,可在线阅读,更多相关《MCS51 MCU读写SD卡版(单片机论文)(91页珍藏版)》请在装配图网上搜索。

1、摘 要摘 要近年来, SD存储卡在嵌入式产品中的应用越来越广泛, 但SD卡接口一般仅集成在32位高端处理器中, 一般51单片机则由于资源限制没有该接口。因此,如何解决51单片机应用系统存取SD卡大容量数据就显得很有实际意义。本系统使用MXT8051F04A作为单片机与SD卡的接口芯片, 采用SPI串行方式对SD卡的扇区进行读写,读写过程和结果通过串口调试助手在主机上显示。本论文的核心主要从硬件设计和软件编程两个大的方面介绍了系统的实现。硬件电路设计主要包括MXT8051F04A最小系统电路、电源电路、串口电路、SD卡接口电路。程序采用C语言在Keil软件下进行编写、调试,程序主要包括SD卡扇区

2、读写程序、串口程序等软件模块。系统实现了对SD卡扇区的读写,达到了设计的要求和目的。关键字:MXT8051F04A,SD卡,KeilIABSTRACTABSTRACTIn recent years, SD memory card applications in the embedded products more widely, but generally only the integrated SD card interface in 32-bit high-end processor, microcontroller 51 is generally not the interface du

3、e to resource constraints. Therefore, how to solve the 51 SCM applications to access data on large-capacity SD cards seem very practical. The system uses MXT8051F04A as SCM and SD card interface chip, using SPI mode on the SD card serial read and write sectors, reading and writing process and result

4、s through the serial port on the host display debugging assistant. The core of this thesis, the main hardware and software design introduces two major aspects of the system implementation. Hardware design includes MXT8051F04A minimum system circuit, power circuit, the serial port circuitry, SD card

5、interface circuit. Program using C language under the Keil software write, debug, the program includes reading and writing SD card sector program, serial procedures of software modules. System realizes the SD card read and write sectors, meets the design requirements and objectives. Keywords: MXT805

6、1F04A,SD Card,Keil11目录目 录第1章 引言11.1 选题背景11.2 研究目标和意义11.3 本文要完成的工作1第2章 单片机读写SD卡的硬件电路设计32.1 系统硬件平台组成32.2 电源模块32.3 MXT8051F04A单片机最小系统电路设计42.3.1 MXT8051F04A简介42.3.2 晶振复位电路82.4 SD卡电路设计82.4.1 通讯模式92.4.2 电平匹配92.4.3 硬件接口设计102.5 串口电路设计122.6 PCB绘制132.7 本章小结14第3章 单片机读写SD卡的软件设计143.1 SD卡的扇区读写143.1.1 模拟SPI协议143.1

7、.2 SD卡命令153.1.3 SD卡的初始化193.1.4 数据块的读写203.2 串口程序25第4章 调试264.1 系统硬件调试264.2 软件调试274.3 软硬件的联合调试274.4 本章小结29第5章 结束语305.1 总结305.2 展望30参考文献31致谢32附录33附录一:单片机读写SD卡的完整原理图33附录二:单片机读写SD卡的完整程序36外文资料原文63译文64III第1章 引言第1章 引言1.1 选题背景SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如个人数

8、码助理(PDA)、数码相机和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克左右,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色,特别是一些单片机系统需要长时间地采集、记录

9、海量数据时,选择SD卡作为存储媒质是开发者们一个很好的选择。这就要求对SD卡的硬件与读写时序进行研究。1.2 研究目标和意义研究51单片机对SD卡的读写,解决51单片机应用系统存取大容量数据。1.3 本文要完成的工作本课题是针对单片机读写SD卡进行研究,由研究目的决定了研究的内容涉及了单片机系统硬件设计和SD卡数据读取两方面。在系统硬件设计方面,包括硬件电路的设计;在软件设计方面,包括SD卡读写程序,串口程序。本文将完成以下的任务:1. 基于MXT8051F04A微控制器进行读写SD卡系统的设计,即完成本系统硬件器件的选择和电路的初步设计。2. 各子功能模块硬件电路设计、调试以及软硬件的联合调

10、试。进行模块软硬件调试和实验,验证系统的可靠性。3. 进行软件方面的研究,即SD卡协议和命令研究还有单片机串口程序,程序采用C语言在Keil环境下编写 。1第2章 单片机读写SD卡的硬件电路设计第2章 单片机读写SD卡的硬件电路设计2.1 系统硬件平台组成图2-1 系统硬件平台如图2-1所示系统硬件平台配置如下:控制器:时代民芯科技有限公司的MXT8051F04A单片机,运行频率可达80M。晶振复位电路:系统采用了RC上电复位。JTAG电路:用来完成程序的下载和调试。SD卡电路:SD卡使用的是存储容量为2G的金士顿SD卡。串口电路:采用了MAX232EP进行电平转换和主机进行通信。电源电路:系

11、统采用9V供电,使用两片ASM1117电源转换芯片分别获得5V 和3.3V为系统供电。2.2 电源模块电源是系统最关键的部分,决定着整个系统的成败。本系统单片机供电范围为3.6-5V电源,而SD卡的供电范围为2.7-3.6V,所以系统需要两种电源。本系统采用9V电源供电,通过低压差三端线性稳压器ASM1117芯片得到5V和3.3V电源。电路如图2-2所示。图2-2 电源模块系统输入的9V电源首先通过ASM1117-5.0电源转换芯片把输入的9V电压转换为5V,然后5V电压再通过ASM1117-3.3把5V电压转换为3.3V.。ASM1117前后并行接了多个滤波、退藕电容,以进一步稳定线性电源的

12、平滑度,减小电源的纹波,提高电源的带负载能力和瞬态响应。2.3 MXT8051F04A单片机最小系统电路设计单片机最小系统包括:晶振电路、复位电路。复位采用了简单可靠的上电复位。3第2章 单片机读写SD卡的硬件电路设计2.3.1 MXT8051F04A简介本系统采用了北京时代民芯科技有限公司自行研制的高性能8051单片机MXT8051F04A。MXT8051F04A是以高速单指令周期8051为核的MCU。电路拥有丰富的外设,包括PWM、UART、WDT,Timer等,大容量存储器,内嵌32Kx8可在线编程Flash,10位AD,8位DA,若干OP,36x4 LCD driver、POR以及可编

13、程增益放大器(PGA)等模拟电路。电路集成片上调试系统,通过标准JTAG接口,快速诊断复杂SOC,该调试系统具有不占用任何硬件资源,支持全速运行、单步运行、硬件断点、软件断点以及观察内部特殊功能寄存器、程序指针和内部RAM等功能。上位机通过标准JTAG接口以及用户定义指令执行在线编程和在线调试。同时提供调试和编程软件包。MXT8051F04A的系统框图如图2-3。图2-3 MXT8051F04A系统框图MXT8051F04A共有128个引脚,采用QFP128封装,其引脚排列如图2-4。图2-4 MXT8051F04A引脚排列管脚功能大致说明如下(详细介绍请看MXT8051F04A数据手册):系

14、统时钟:XTAL1、XTAL2为MXT8051F04A系统时钟晶振的输出、输入引脚。5第2章 单片机读写SD卡的硬件电路设计MXT8051F04A有三个时钟源,外部晶体振荡器,内部振荡器和32768Hz晶体振荡器。外部晶体振荡器和内部振荡器提供主时钟,通过内部寄存器PCON.1(CKSEL)来选择。32768Hz晶体振荡器为RTC提供时钟。RTC: RTCXTAL1和RTCXTAL2是RTC的32768Hz晶体振荡器的输入输出引脚。I/O口:MXT8051F04A共提供一个8位双向口P0、两个5位双向口P1,P2,每个口通过口控制寄存器控制输入输出,通过上拉控制寄存器控制内部上拉电阻,P2具有

15、第二功能,通过方式控制寄存器控制P2口的第二功能。P0、P1、P2分别对应内部数据寄存器P0、P1、P2,这些寄存器即可字节寻址也可位寻址,写入端口的值通过内部寄存器锁存以保证I/O引脚输出的值保持不变。当进行读操作时,当引脚配置为输入时,引脚的电平被读入,但通过读-修改-写指令或者当引脚被配置为输出时所读取的是内部锁存器的值,而非引脚的值。CPU通过MOV传送指令对I/O口进行读写操作。 UART :TXD、RXD分别为单片机串口的发送引脚和接受引脚。UART 是一个能进行异步传输的串行口。UART 可以工作在全双工方式。在所有方式下,接收数据放入数据缓冲器。这就允许在软件尚未读取前一个数据

16、字节的情况下开始接收第二个输入数据字节。 UART在特殊功能寄存器中有一个串行控制寄存器(SCON)和一个串行数据缓冲器(SBUF)。用同一个地址访问发送寄存器和接收寄存器。读操作访问接收寄存器,写操作访问发送寄存器。 如果被允许,UART能产生中断。UART有两个中断源:一个发送中断标志TI(SCON.1)(数据字节发送结束时置位)和一个接收中断标志RI(SCON.0)(接收完一个数据字节后置位)。当UART转向中断服务程序时硬件不清除UART中断标志,中断标志必须用软件清除。这就允许软件查询UART中断的原因。PWM口:PWM0、PWM1、PWM2为PWM输出口。MXT8051F04A内建

17、3个10位PWM, 每个PWM由两个8位寄存器构成,它们分别是PWM0H,PWM0L,PWM1H,PWM1L,PWM2H,PWM2L。由PWMXL和PWMXH的低两位构成一个10位的寄存器。写入到PWMXH和PWMXL的值代表一个PWM周期中的高电平宽度。当PWM计数器等于PWM寄存器时PWM输出低电平,当PWM计数器溢出时输出高电平,从而改变PWM输出的占空比,实现脉宽调制。 JTAG接口:MXT8051F04A包含一个片内JTAG接口和逻辑,提供在线编程和在调试所需要的边界扫描功能,支持FLASH的读和写操作以及非侵入式在系统调试。JTAG接口有四个专用引脚,它们是:TCK、TMS、TDI

18、和TDO。运放:MXT8051F04A内部集成有5个运放器,分别是OP1-OP5。其中OP1、OP2与电阻网络一起组成一个带256级增益控制的差分输入可编程增益控制器PGA,PGA的输出送到一个起调零作用的运算放大器OP3,经调零电路调整后输出到ADC的模拟通道3(AIN3)。另外三个运算放大器可与外部电阻一起组成恒流源和放大电路。 LCD驱动:MXT8051F04A内部集成段式LCD驱动,LCD 驱动由主要偏压产生电路、COM驱动器、SEG驱动器几部分组成。COM1-COM4为位选,SEGMENT0-SEGMENT36为段选。数模转换器 (DAC):MXT8051F04A片内的数模转换器(D

19、AC)采用电阻串分压结构,主要由8-256译码器、模拟开关、电阻串和输出缓冲器等几部分组成。电阻串将参考电源分成256等份,输入数据经译码器译码后,控制模拟开关选择合适的电压经输出缓冲器输出。2.3.2 晶振复位电路单片机最小系统包括:晶振电路、复位电路。复位采用了简单可靠的上电复位电路。电路如图2-5所示:图2-5 晶振复位电路2.4 SD卡电路设计应用单片机读写SD卡有两点需要注意。首先,需要寻找一个单片机与SD卡通讯的解决方案;其次,SD卡所能接受的逻辑电平为3.3V,如果是5V单片机则需要解决电平匹配问题。7第2章 单片机读写SD卡的硬件电路设计2.4.1 通讯模式SD卡有两个可选的通

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

21、口模块,但是可以用软件模拟出SPI总线时序。本文用SPI总线模式读写SD卡。2.4.2 电平匹配SD卡的逻辑电平相当于3.3V TTL电平标准,而控制芯片的逻辑电平为5V电平标准。因此,它们之间不能直接相连,否则会有烧毁SD卡的可能。出于安全的考虑,有必要解决电平匹配问题。要解决这一问题,最根本的就是解决逻辑器件接口的电平兼容问题,原则主要有两条:一为输出电平器件输出高电平的最小电压值,应该大于接收电平器件识别为高电平的最低电压值;另一条为输出电平器件输出低电平的最大电压值,应该小于接收电平器件识别为低电平的最高电压值。一般来说,通用的电平转换方案是采用类似SN74ALVC4245的专用电平转

22、换芯片,这类芯片不仅可以用作升压和降压,而且允许两边电源不同步。但是,这个方案代价相对昂贵,而且一般的专用电平转换芯片都是同时转换8路、16路或者更多路数的电平,相对本系统仅仅需要转换3路来说是一种资源的浪费。考虑到SD卡在SPI协议的工作模式下,通讯都是单向的,于是在单片机向SD卡传输数据时采用晶体管加上拉电阻法的方案,基本电路如图2-6所示。而在SD卡向单片机传输数据时可以直接连接,因为它们之间的电平刚好满足上述的电平兼容原则,既经济又实用。这个方案需要双电源供电(一个5V电源、一个3.3V电源供电),3.3V电源直接用AMS1117三端线性稳压器从5V电源稳压获取。图2-6 SD卡电平转

23、换2.4.3 硬件接口设计SD卡提供9Pin的引脚接口便于外围电路对其进行操作,9Pin的引脚随工作模式的不同有所差异。在SPI模式下,引脚1(DAT3)作为SPI片选线CS用,引脚2(CMD)用作SPI总线的数据输出线MOSI,而引脚7(DAT0)为数据输入线MISO,引脚5用作时钟线(CLK)。除电源和地,保留引脚可悬空,详细的引脚定义见表2-1。引脚排列如图2-7。 图2-7 SD卡引脚定义9第2章 单片机读写SD卡的硬件电路设计表2-1 SD卡引脚功能定义引脚SD模式 SPI模式名称类型描述名称类型描述1CD/DAT3IO或PP数据线3CSI片选2CMDPP命令DII数据输入3VSS1

24、S电源地VSSS电源地4VDDS电源VDDS电源5CLKI时钟SCLKI时钟6VSS2S电源地VSS2S电源地7DAT0IO或PP数据线0DOO或PP数据输出8DAT1IO或PP数据线1RSV 保留 9DAT2IO或PP数据线2RSV 保留 单片机与SD卡的接口电如图2-8所示。图2-8 单片机与SD卡接口电11电子科技大学成都学院本科毕业设计论文2.5 串口电路设计本系统设计串口电路主要用于通过串口调试助手调试程序和主机显示读写过程以及结果。单片机与PC机之间采用RS232方式的串行通信。RS232是美国电子工业协会EIA和Bell公司一起开发的于1969年颁布的通信协议。它适合传输速率在0

25、-20KB/S范围内的通信,现已成为微机串行通信接口中广泛应用的一种标准。RS232规定,当数据传输速度小于0-20KB/S且电缆的电容负荷小于2500pF时,传输距离小于15m。本系统采用RS232异步通信方式。为增加信号在线路上的传输距离和提高抗干扰能力,RS232提高了信号的传输电平。该接口采用双极性信号,公共地线和负逻辑。对于发送端:-5V15V表示逻辑1,+5V+15V表示逻辑O。对于接收端:电压低于-3V表示1,高于+3V表示O。它与单片机的逻辑电平不一致,因此在实际应用时,必须把TTL电平转换为RS232或者对两者进行逆转换。为方便设计,提高系统稳定性,保护器件,根据产品资料,选

26、用MAXIM公司生产的MAX232CPE芯片。MAX232CPE内部有2个线路驱动器(Tx)和2个接收器(Rx)。内部具有两个充电泵,把+3.3VDC转换成士10vDC。具有+15KVESD保护,RS232收发器体积小,应用方便,外围电路简单。串行接口电路如图2-9所示。图2-9 串口电路12第2章 单片机读写SD卡的硬件电路设计2.6 PCB绘制PCB设计是硬件工作中的难点,前面所有工作都集中体现在电路板上,因而PCB的设计直接影响整个系统的性能。在PCB布线之前先对原理图进行了电气规则检查,在检查正确无误的情况下开始布线,布线采用手工布线完成,其中元器件的封装参考了标准封装库,对于一些Pr

27、otel中没有自带封装的元器件按照数据手册上的规范进行制作,并对二极管、三极管等极性元件,以及一些非对称性元件的引脚定义做了仔细的检查。在布局上将模拟电路和数字电路分开,整体上采用模块化布局,去藕电容放置在靠近器件的电源/地的地方,并将跳线放置在板子的边缘。为了系统能够稳定的运行,电路板子采用双层设计,上层为元件层,为了过滤高频干扰,我们在5V电源与地之间及3.3V电源与地之间分别加入了采用0.luF的滤波电容,以滤除高频干扰。不同层采用相互垂直走线的方式以避免串扰。布线时应注意以下规则:(1)各部件之间引线尽量短。(2)发热量大的元件不能放在底层,底层不方便放置散热片。(3)晶振,电解电容等

28、怕热元件应该远离发热量大的元件,晶振用地线包围。(4)接插件应该放在板子边缘。(5)开关,滑动电阻器等手工调整元件应该放在合适手工调整的地方,尽量放 在板子边缘,可调旋钮应朝外。(6)每个IC都应该放置0.1uF和10uF旁路电容,滤除高频杂波和电源去耦。2.7 本章小结本章属于系统的硬件电路设计部分,其中简要的介绍了系统的组成,参考了相关的技术文档,其中包括MXT8051F04A芯片的DataSheet,以及MAX232的DataSheet和SD官方资料,根据系统的需要并结合他人的开发经验设计了每部分的电路,文中给出了各部分的主要信号电路连接图,详细的电路原理图可在附录A中得到,这一章将作为

29、后续的基础,可靠的硬件平台是本系统得以有效运行最有力的保障。13电子科技大学成都学院本科毕业设计论文第3章 单片机读写SD卡的软件设计软件设计主要包括二部分: 对SD扇区读写, 单片机跟上位机(HOST)依据RS232传输协议的通信程序设计。3.1 SD卡的扇区读写SD卡扇区读写主要包含:单片机普通I/O口模拟SPI协议,SD卡初始化,SD卡扇区数据的读写。3.1.1 模拟SPI协议SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。对于不带SPI串行总线接口的MXT

30、8051F04A单片机,需要用软件来模拟SPI总线操作。软件模拟SPI协议读写字节如图3-1和3-2。图3-1 读取一个字节图3-2 发送一个字节3.1.2 SD卡命令SD卡自身具有完备的命令系统,以实现各项操作。SD卡命令共分为12类,分别为Class0-Class12。不同的SD卡支持的指令集不尽相同,SP1模式下支持的命令和SD总线模式下支持的命令也不一致。SD卡所有的命令都由6个字节组成,发送的时候首先发送最高位。其命令格式如表3-1。表3-1 SD卡命令的格式Byte1Byte2-Byte5Byte6765 0 31 07 001命令号命令参数CRC校验码1Byte1:命令的开始位为

31、始终为0;1表明是主机发送给SD卡的命令,后面是命令号(命令号,由指令标志定义,如CMD39为100111即十六进制为0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)。Byte2-5:命令参数,有些命令没有参数。例如CMD0命令参数就为0。CMD24为写单块命令就有命令参数,命令参数就是要写扇区的地址。Byte6:前7位为CRC校验位,最后一位为停止位0。14电子科技大学成都学院本科毕业设计论文命令传输过程采用发送应答机制过程如图3-3所示。 图3-3 命令应答表3-2列取了SPI模式下常用的命令。表3-2 SPI模式下常用命令命令号功能CMD0复位SD卡CMD

32、1读OCR寄存器CMD9读CSD寄存器CMD10读CID寄存器CMD12停止读多块时的数据传输CMD16设置块的长度CMD17写单块CMD18读多块,直到主机发送CMD12为止CMD24写单块CMD25写多块CMD32设置擦出块的起始地址CMD33设置擦出块的终止地址CMD38擦出所选的块CMD55状态每一个命令都有自己命令应答格式。在SPI模式中定义了三种应答格式,如表3-3、表3-4、表3-5所示。表3-3 二字节应答模式字节位含义 17开始位,始终为06参数错误5地址错误4擦除序列错误3CRC错误2非法命令1擦除复位0闲置状态 27溢出,CSD覆盖6擦除参数5写保护非法4卡ECC失败3卡

33、控制器错误2未知错误1写保护擦除跳过,锁解锁失败0锁卡16电子科技大学成都学院本科毕业设计论文表3-5 六字节应答模式字节位含义17开始位,始终为06参数错误5地址错误4擦除序列错误3CRC错误2非法命令1擦除复位0闲置状态25全部操作条件寄存器,高位在前表3-3 一字节应答模式字节位含义 17开始位,始终为06参数错误5地址错误4擦除序列错误3CRC错误2非法命令1擦除复位0闲置状态18第3章 单片机读写SD卡的软件设计3.1.3 SD卡的初始化SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行扇区读写等操作。根据SD卡的手册说明,在初始化过程中,SPI的时钟不能太快,否则会造初始

34、化失败。在初始化成功后,应尽量提高SPI的速率。在刚开始要先发送至少74个时钟信号,这是必须的,因为在上电初期,电压的上升过程据SD卡组织的计算约合64个CLK周期才能到达SD卡的正常工作电压,其后的10个CLK是为了与SD卡同步,如果疏忽了这一点,可能使初始化不成功。随后就是写入命令CMD0,为了实现兼容性,发送CMD0后,再发送CMD55和ACMD41(使用ACMD类的指令前应先发CMD55,CMD55起到一个切换到ACMD类命令的作用)确认是否有回应,如果有回应则为SD卡,如果等回应超时,则可能是MMC卡,再发CMD1确认。完成上面操作后SD卡进入SPI模式。主机还可以继续通过CMD10

35、读取SD卡的CID寄存器,通过CMD16设置数据Block长度,通过CMD9读取卡的CSD寄存器。从CSD寄存器中,主机可获知卡容量,支持的命令集等重要参数。SD卡初始化的C语言程序见附录。其流程图如图3-4所示。图3-4 SD卡初始化19电子科技大学成都学院本科毕业设计论文3.1.4 数据块的读写完成SD卡的初始化之后即可进行它的读写操作。SD卡的读写操作都是通过发送SD卡命令完成的。SPI总线模式支持单块(CMD24)和多块(CMD25)写操作,多块操作是指从指定位置开始写下去,直到SD卡收到一个停止命令CMD12才停止。单块写操作的数据块长度只能是512 字节。单块写入时,命令为CMD2

36、4,当应答为0时说明可以写入数据,大小为512 字节。SD卡对每个发送给自己的数据块都通过一个应答命令确认,它为1个字节长,当低5位为00101 时,表明数据块被正确写入SD 卡。写SD卡程序流程图如图3-5。具体C程序实现如下:unsigned char SD_WriteSector(unsigned char *buffer, unsigned long address)unsigned int count = 0;unsigned char response = 0xff; unsigned int timeout = 0; /写命令超时address = 9; /address=add

37、ress*512将块地址转为字节地址 SD_Enable(); doresponse = SD_WriteCommand(0x18, address, 0xff);/发送读数据命令timeout+;while(0x0 != response) & (timeout TRY_TIME); if(0x0 = response) SD_WriteByte(0xff);SD_WriteByte(0xff);/command was a success - now send data SD_WriteByte(0xfe); /写入开始字节 0xfe for(count = 0; count 512; c

38、ount+)/将缓冲区中的512个字节写入SD卡 SD_WriteByte(*buffer+); SD_WriteByte(0xff); SD_WriteByte(0xff); /两个字节的CRC校验码,不用关心 response = SD_ReadByte();/读数据响应response = response & 0x1f;if(0x05 != response)SD_Disable();/如果返回值是XXX00101说明数据已经被SD卡接受Uart_Send_String(写扇区失败rn);return SD_WRITE_ERROR;/*等到SD卡不忙数据被接受以后,SD卡要将这些数据写

39、入到自身的FLASH中,需要一个时间忙时,读回来的值为0x00,不忙时,为0xff*/ while(0 = SD_ReadByte(); /等到SD卡不忙 SD_Disable(); SD_WriteByte(0xff);/按照SD卡的操作时序在这里补8个时钟return SD_SUCCESS; /写扇区操作成功return SD_WRITE_ERROR;/写扇区操作失败20电子科技大学成都学院本科毕业设计论文图3-5 写扇区在需要读取SD卡中数据的时候,先发送读SD卡的命令字CMD17,接收正确的第一个响应命令字节为0xFE,随后是512个字节的用户数据块,最后为2个字节的CRC 验证码。可

40、见,读写SD卡的操作都是在初始化后基于SD卡命令和响应完成操作的,读SD卡的程序流程图如图3-6。具体C程序实现如下:/* 函数: SD_ReadSector.* 描述: 写扇区.* 输入: buffer:存放读出数据的缓冲* 输出: address:要读取数据的地址.* 返回: 如果操作成功返回SD_SUCCESS.失败返回SD_READ_ERROR*/unsigned char SD_ReadSector(unsigned char *buffer, unsigned long address)unsigned int count = 0; unsigned char response =

41、 0xff;unsigned int timeout = 0; /写命令超时address = 9; /address=address*512将块地址转为字节地址 SD_Enable(); doresponse = SD_WriteCommand(0x11,address,0xff);/写入CMD17timeout+;while(0x0 != response) & (timeout TRY_TIME); if(response = = 0) while(SD_ReadByte()!=0xfe);/start with DATA TOKEN = 0xFESD_ReadByte();22电子科技

42、大学成都学院本科毕业设计论文for(count = 0; count 512; count+) *buffer+ = SD_ReadByte(); SD_ReadByte();/读校验和 SD_ReadByte(); SD_Disable(); SD_WriteByte(0xff);/按照SD卡的操作时序在这里补8个时钟 return SD_SUCCESS; /读扇区操作成功 Uart_Send_String(读扇区失败rn);return SD_READ_ERROR; /读扇区操作失败图3-6 读扇区24第3章 单片机读写SD卡的软件设计3.2 串口程序串口程序主要是串口初始化程序和串口发送

43、接收程序。串口初始化程序主要完成串口的中断设置,波特率设置,接收使能等。流程图如图3-7。图3-7 串口初始化串口的发送接收程序比较简单,串口发送程序只需把要发送的数据赋给串口数据缓冲寄存器,当数据发送完成后,发送中断标志有硬件置1,申请中断,CPU响应后发送下一帧数据,该中断发送标志位必须有软件清0。串口接收程序和发送程序相似,在接收到第8位数据时,硬件置位接收中断标志位,进入中断服务程序,在中断服务程序中把数据缓冲寄存器的值赋给存放接收数据的临时内存。该中断接收标志位也必须有软件清0。25电子科技大学成都学院本科毕业设计论文第4章 调试系统调试由三部分组成:硬件调试、软件调试、软硬件的联合

44、调试。4.1 系统硬件调试在板子拿到手后,我们完成电路的焊接工作,在电路的焊接过程中,我们应该一个一个模块的焊接,焊接完一个模块,检查一个模块。首先焊接电源相关的部分,把电源部分焊接完后,检查下是否存在虚焊、漏焊等情况。如果确认无误后加上直流电源,查看电源的电流情况,如果电流过大可能存在短路的情况,应立即关闭电源检查线路。如果正常,则用万用表检查各个输入输出点的电压是否正确。首先,测试9V电压是否加到ASMlll7-5.0的输入端上,测试中发现已经正确加在了ASMlll7-5.0上,之后检测ASMlll7-5.0输出引脚是否为5V左右,然后测试5V电压是否加到ASMlll7-3.3的输入端上,

45、测试中发现已经正确加在了ASMlll7-3.3上,之后检测ASMlll7-3.3输出引脚是否为3.3V左右,如果结果都正确,则表明电源模块部分正确。在确认电源模块没有问题的情况下焊接主要芯片,如MXT8051F04A、MAX232等。焊接完这些芯片后,测量各个芯片的供电电压是否正确。虽然电压加上了,但是不知道单片机是否真的工作起来了,于是用示波器观察MTX8051晶振的输出波形是否是11.0592M的正弦波。如果观察到了,说明单片机正常工作。主芯片正常工作后,下面就是测试串口是否正常工作。下载先前编写好的串口发送接收程序,通过烧程器把程序下载到单片机里运行,打开串口调试助手,观察串口调试助手是

46、否接收到了发送的字符。如果接收到了,表明串口电路正常工作。如果不正常工作,首先检查硬件原理图是否正确,TXD和RXD是否接反,波特率是否设置正确,串口调试助手的打开的端口是否和实际端口不一致。通过上面的调试,硬件电路正常工作,硬件调试工作完成。26第4章 调试4.2 软件调试在硬件还没有准备好的情况下,在Keil下进行了软件的单步跟踪。通过在keil下单步跟踪调试发现一个问题:在SD卡的发送命令函数中,定义了一个无符号型变量,初始值赋值3对其进行自减操作,判断是否大于等于0,如果为假则循环结束。结果导致程序进入死循环,运行不正常。后来跟踪到这里才发现变量为无符号变量,而我却用来进行自减,当变量

47、自减到0时,因为是无符号变量,所以再自减就变为了128,所以进入了死循环,把变量改为符号型变量,问题解决。4.3 软硬件的联合调试硬件制作好后,就开始软硬件的联合调试。其中遇到的问题主要有以下几个:1. 程序里向串口发送中文字符,结果串口调试助手显示为乱码。首先检查程序的波特率是否和串口调试助手的波特率是否一致,检查是一致的,后面我把中文改为英文,正常显示,猜想可能是串口调试助手版本太低,下载高版本串口调试助手问题解决。2. I/O端口的输入输出设置错误,导致程序一直不运行。MXT8051F04A单片机和普通的51单片机在I/O端口上有点不一致,普通51单片机自动识别输入输出。但MXT8051

48、F04A必须设置其I/O引脚为输入引脚,还是输出引脚。开始程序全部设置为输出引脚了,这样对SD卡的读取全部无效,导致应答命令始终不对,程序始终不工作。通过以上的调试,程序运行正常。程序流程如下:首先初始化MXT8051F04A单片机串口,然后执行SD卡初始化操作,SD卡初始化完成后,开始往SD卡的7632扇区写入数据(peng yuan zhi),通过串口调试助手显示刚才写入扇区的数据,然后再读取刚才写的扇区的数据,显示结果见图4-1。我们把SD卡从电路板上取下,插入到电脑的5合1读卡器中,通过WinHex软件在电脑上查看数据是否真的写入到了SD卡中的7632扇区,结果如图4-2所示。通过Wi

49、nHex的观察,数据确实写入了SD卡的7632扇区。图4-1 程序运行结果图4-2 写入SD卡的数据27第4章 调试图4-3和图4-4为制作的实物照片。图4-3为单片机系统和SD卡模块,图4-4为SD卡模块的背面。图4-3 实物图4-4 SD卡模块背面4.4 本章小结以上简要的叙述了在系统调试过程中遇到的一些问题和使用的一些调试手段,其中包括硬件调试和软件调试的问题,并给出了问题的解决方法,还有许多常见的问题,这些问题大都是由于本人粗心大意造成的,这里不再加以说明。29电子科技大学成都学院本科毕业设计论文第5章 结束语5.1 总结论文的基本目标:实现51单片机对SD卡的读写并把读写过程进行显示

50、。根据基本目标,首先进行了相关资料的收集和整理,其中包括关于SPI总线协议和SD卡通信命令以及RS232协议,单片机的系统结构,通过对以上英文资料的翻译和相关中文资料的查阅,对系统实现的原理和其理论基础以有了初步的认识。再通过制作硬件的制作对系统的功能和接口有了深刻的理解。最后通过软、硬件调试实现了以下功能:(l)通过硬件测试工具,完成了对硬件电路的测试,为实现整个系统的功能奠定了基础。(2)SD扇区读写的实现。通过对SD卡协议的理解,使用相应的控制命令完成了对SD卡扇区的读写。(3)对读写过程进行显示。通过向串口调试助手显示扇区的读写过程和数据。通过以上的各个实验进一步加深了对原理和协议的理

51、解,增加了实际动手能力,对所学的知识进一步巩固。5.2 展望由于时间有限,本系统还存在一些需要改进和进一步完善的地方,包括:(l)本系统没有实现FAT32文件系统,如果实现了FAT32文件系统将提高SD卡的存储效率,系统的可用性和兼容性。(2) 读写速度有限,如果采用4线并行方式对扇区进行读写,速度将得到明显的提高。30参考文献参考文献1Microsoft Extens ible Firmware Initiative FAT32 File System Specification.Vers ion 1.03,December 6,2000.Microsoft Corporation2W86L

52、388D Winbond Hos t Interface SD/MMC Memory Card Bridge.Vers ion 1.0,May 17,20053SD卡官方资料4周立功,等.ARM嵌入式系统软件开发实例( 一) M .北京:北京航空航天大学出版社, 20055宋群生, 宋亚琼.硬盘扇区读写技术- 修复硬盘与恢复文件M .北京:机械工业出版社, 20046李华等.51系列单片机实用接口技术.北京航空航大大学出版社,2002第9版7赖文麟.8051单片机嵌入式系统应用,科学出版社,20028何立民.单片机应用技术选编()l一(7).北京航空航天大学出版社,20009何立民.单片机高级

53、教程一应用与设计.北京航空航天大学出版社,2000.10南建辉,熊鸣,王军.MCS一51单片机原理与应用实例M 北京:清华大学出版社,200311李玉峰,倪虹霞.MCS一51系列单片机原理与接口技术术M 北京:人民邮电出版社,200.412维提,郭强.液晶显示应用技术.北京:电子土业出版社,200013邓龙军.单片机控制系统的理论与应用研究14段九州.电源电路实用设计手册.沈阳:辽宁科学技术出版社,2002.815何立民,万光毅,严义.单片机实验与实践教程M.北京:北京航空航天大学出版社,2003.16沈红卫.基于单片机的智能系统设计与实现M.北京:清华大学出版社,200217李朝青.单片机原

54、理及接口技术M.北京:北京航空航天大学出版社,199818王福瑞.单片机微机测控系统设计大全M.北京航天航空大学出版社,199931电子科技大学成都学院本科毕业设计论文致谢本文是在导师周银祥老师的精心指导下完成的。周老师对我的毕业设计倾注了大量的心血,使我在获取知识的同时,综合能力得到较大的提高。学位论文从选题到最后定稿,始终得到了周老师的精心指导和帮助。在学术上,周老师渊博精深的知识,务实严谨、精益求精的治学态度和一丝不苟的工作作风,使我受益匪浅。同时衷心地感谢创新实验室的师兄师姐、师弟师妹在我毕业设计期间给予的关心和帮助。还要感谢所有本科期间在学习、生活上给予我关心、支持、鼓励和热心帮助我

55、的老师、同学和朋友。同样感谢我的父母家人在生活上给我的关心和鼓励,学业的完成离不开他们背后的支持。最后对各位专家老师仔细审阅我的论文表示感谢,期盼给予批评指正。32附录附录附录一:单片机读写SD卡的完整原理图附图1-1 SD卡接口电路附图1-2 电平转换电路33附录附图1-3 单片机最小系统、电源和串口电路附录二:单片机读写SD卡的完整程序/* *File name : Common.h *Author : peng *MCLK : 11.0592MHz *Version : 1.00 *Last modified : 2010-4-23*/ #ifndef _COMMON_H#define

56、_COMMON_H#include Types.hvoid Delay_us(INT32U us);/延时微秒void Delay_ms(INT32U ms);/延时毫秒unsigned long Atoi(INT8S *string); /将字符串转换为整型void Itoa(INT8U vaule,char *string);/将数字转为字符串#endif35附录 /* *File name : Uart.h *Author : peng *Version : 1.00 *Last modified : 2010-4-26*/#ifndef _UART_H_#define _UART_H_

57、#include REG8051.h #include Types.hextern INT8U Uart_Receive_Buf;#define MCLK11059200L /定义CPU主频(Hz)#define BAUD_RATE9600L/设置波特率#define Uart_Interrupt_Set(flag) (ES = flag)/设置串口中断void Uart_Send_Arrays(INT8S buffer, INT32U length); /发送数组void Uart_Send_String(INT8S *string); /串口发送字符串void Uart_Send_Char

58、(INT8S ch); /串口发送字符void Uart_Init(void); /串口初始化void Uart_Send_Enter(void); /发送回车#endif/* *File name: SD_Card.h *Author: peng *MCLK: 11.0592MHz *Version : 1.00 *Last modified: 2010-4-27 */ #ifndef _SD_CARD_H#define _SD_CARD_H#include REG8051.h#define SD_Disable() SD_CS = 1 /片选关#define SD_Enable() SD_CS = 0 /片选开#define SD_CMD_LENGTH 6/*向SD卡写入命令之后,读取SD卡的回应次数,即读TRY_TIME 次,如果在TRY_TIME次中读不到回应,产生超时错误,命令写入 失败*/#define TRY_TIME 300void SD_WriteByte(unsigned char byte);/向SD卡写一个字节unsigned char SD_ReadByte(void);/读取一个字节

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!