APP下载

基于51单片机的SD卡读写系统

2020-12-27赵华峰

通信电源技术 2020年16期
关键词:扇区电平字节

赵华峰

(渭南师范学院 物理与电气工程学院,陕西 渭南 714099)

0 引 言

随着电子技术的不断发展,相应的电子设备也在不断小型化,有着优良的便携性。以闪存为存储体的非易失SD卡(Secure Digital Memory Card)因具有体积小、造价低、功耗较低、可擦写以及良好的可靠性等特点而被广泛应用于日常生活与工作中。近年来,随着SD卡价格的不断下降和存储容量的不断提高,使得其应用范围更加广泛。实现读写物理扇区,记录大容量数据时,SD卡作为存储媒介是一个很好的选择。其是一种基于半导体快闪记忆器的新一代记忆器件,由日本松下、东芝以及美国SanDisk公司在1999年8月共同开发研制[1]。它作为设计存储介质进行读写,大小犹如一张邮票,具备高容量、快速数据传输率、便于携带以及较好的数据安全性等特点,已成为较为通用的数据存储卡。

1 系统总体结构概述

基于51单片机的SD卡读写系统整体结构包括电源电路、控制电路、中央处理器以及数据存储模块等。通过各部分的协调工作,完成SD卡的读写,以实现对数据读写的实时处理。为满足正常的工作需求,单片机应具有辅助电路。其包括复位电路(可手动)、时钟电路和串口通信电路等基本电路。

2 基于51单片机的SD卡读写系统硬件电路设计

2.1 系统硬件原理图

该系统硬件原理图在Altium Designer软件下绘制,具体如图1所示。系统在开机后即可通过上位机(数据发送终端)接收并保存数据,完成对SD卡的读写。系统硬件的构成包括主控制器、通信端口、存储媒介以及电源设计4个部分。

主控制器使用STC89C52单片机最小系统实现软件部分的功能。通信端口中串口通信是较为通用的设备通信协议。很多计算机可以利用自带的RS-232串口实现上位机数据的发送与接收。存储媒介为SD 1G闪存卡。目前,部分SD卡容量可达128 GB,且便携性强,成为小型系统中存储介质的首要之选。电源设计中单片机需要的电压为5 V直流电源,在此采用USB取电。存储介质模块SD卡需要的工作电压为3.3 V,接口需要一个电平转换,如果不进行转换则会烧毁SD卡。

2.2 控制处理模块

图1 系统硬件电路原理图

控制模块采用的STC89C52单片机是一种CMOS型的低功耗单片机,具有高速和强抗干扰的特点,有8 KB的可编程Flash,为5 V单片机。它的指令代码完全兼容经典的8051,同时也做了较多的改进,在功能上超越了8051,可以使用ISP下载功能直接下载程序。因此许多微型嵌入式应用系统都可以用STC89C52有效解决[2]。此外, 该单片机的标准功能还包括512字节RAM和32位I/O口线等,最高运作频率为35 MHz,6T/12T可选[3]。此款单片机能够保证满足设计中的要求,能够稳定可靠的工作,并且是目前市场上最便宜的芯片,能够控制开发成本。

2.3 通信端口模块

SD卡读写系统需要串行通信接口输入数据,串口均按位发送和接收字节。串口的一端可以使用一条线发送数据,另一端用一条线接收数据。与并行传输相比,它只使用两条传输数据线,能够实现较远距离的通信,并且造价相对较低。目前,最为常用的串行通信总线接口标准为RS-232,由美国电子工业联盟与bell公司一同开发,其原本编号为EIA-RS-232,通常简称为RS232。RS232接口任何一条信号线的电压均为负逻辑关系,即“-3~-15 V”是逻辑“1”,“+3~+15 V”是逻辑“0”。要求接收器同时能够区分高于+3 V的信号作为逻辑“0”,也能区分低于-3 V的信号作为逻辑“1”。单片机TTL的电平为5 V作为逻辑正,0 V为逻辑负,与要求的TTL逻辑电平不相匹配,因此要设计一个转换电路与TTL电路相连接,进行正常工作。MAX232是现在最为常用的转换芯片。

2.4 存储器模块

SD记忆卡支持的数据传输总线方式有SPI模式和SD模式。其中,SPI模式使用4线制,进行数据通信时要用CLK、CS、DataOut以及DataIn;SD模式使用6线制,进行数据通信时要用CMD、CLK以及DAT0-DAT3。

在单片机对SD卡进行读写时通常应用SPI模式[4]。设计中使用STC89C52的工作电压为5 V,而SD卡的供电电压为3.3 V。为了系统运行的正常稳定,必须解决单片机与SD卡之间的电平匹配问题。因此,在设计中采用整体模块化的SD卡部分,电压转化模块的AMS1117-3.3 V电压转化装置便于SD卡的正常工作。

SD卡具有完备的整体模块,在设计中使用弹出式SD卡座,可大大减少设计工作量。引脚用双排针引出,方便与主机接线,并且同时兼容5 V与3.3 V两种电平的主控器,适用性相对较广,可以非常方便地被系统中的51单片机读写。

3 SD卡读写软件设计

在设计SD卡读写系统的软件程序时,采用模块化结构,包括主程序、串口通信子程序、SPI读写子程序、SD卡复位初始化以及SD卡读写子程序等模块。使用Keil 5软件在C51语言环境下进行。

主程序需要完成系统的初始化,调用各个功能函数,处理中断标志位,以保证数据的正常传输。系统需要先设置串口,进入SPI模式。SD卡在进行复位初始化后开始传输数据,能够实时存储上位机发送的数据。主程序流程如图2所示。

图2 主程序流程图

只有在进行正常的初始化后才能对SD卡进行读写操作。SD卡上电后,要求控制机对SD卡发送延时,持续至少达到74个时钟周期才能完成上电,随后写入复位命令CMD0和初始化CMD1。拉低片选信号为低电平状态,才能使得SD卡进入SPI模式[4]。不然SD卡会自动工作在SD总线模式,单片机不能读写SD卡。SD卡在进入SPI总线模式后做出应答,应答信号为01,表明SD卡进入到了SPI模式,此时主机能向SD卡发CMD1命令,然后读应答信号。当收到应答信号为00,则表明SD卡完成复位初始化,准备接收下一条指令。需要说明的是,当主机向SD卡发CMD0命令的时候,SD卡还处于SD模式,每条命令必须带有正确的CRC校验位,当发CMD1命令字时,SD处在SPI模式,而SPI模式默认不要CRC校验位,因此CRC校验位写入0即可[5]。

SPI总线支持单块的读操作,先向SD卡发CMD17命令,在当SD接收到相应的响应信号后,接收512个字节的数据并传输2个字节的CRC校验码,等待SD卡接收响应,当SD卡回应响应的标志时,说明SD卡能够正确读取数据。当SD卡的输入接口变成为低电平,标志着正在读SD卡,当SD卡的输入接口变成为高电平,标志着读取数据的操作已经完成。

SD卡复位初始化成功后,单片机向SD卡发送写入命令CMD24,然后接收SD卡响应。收到响应后,向SD卡发送一个数据启动标志0xfe,然后发送512字节的数据并传输2个字节CRC校验码[6]。此时,SD卡数据模块确认要使用1个应答命令,即为1个字节。当字节的低五位是00101时,说明SD卡扇区写入的数据块是完整正确的。若CMD24写入命令在操作时被发送到SD卡,则接收SD卡超时,需继续将该写入命令发送至SD卡。

4 系统调试与测试

使用串口调试助手输入上位机数据时,经过单片机预先读到数据缓冲区,等达到一个扇区的数据后经单片机将其写入SD卡的指定扇区。数据的写入顺序应严格遵循上位机发送数据顺序。通过使用WINHEX软件查验SD卡80扇区,其数据与发送的数据保持一致说明读写系统成功,具体如图3所示。实际通过指定的扇区就可以写入数据。

图3 使用WINHEX软件对SD卡80扇区的数据查看

5 结 论

SD卡读写系统以STC89C52单片机为控制核心,能够读取SD卡中的数据并在SD卡扇区写入数据,还能够传输大容量数据。为使SD卡电子系统的应用更加方便,可以针对实际的应用情况添加新的功能,使得整个系统更加完善。

猜你喜欢

扇区电平字节
分阶段调整增加扇区通行能力策略
No.8 字节跳动将推出独立出口电商APP
二电平和三电平网侧变流器控制及谐波比较*
三电平PWM整流器下的地铁牵引供电系统探讨
No.10 “字节跳动手机”要来了?
空中交通管制扇区复杂网络建模与特性分析
空域扇区网络级联失效抗毁性及优化策略
轻量级分组密码Midori64的积分攻击
U盘故障排除经验谈
三电平H桥逆变器差模干扰源研究