STCl2C5A60S2单片机的SD卡读写
扫描二维码
随时随地手机看文章
SD卡是一种微型、低功耗、可移动的Flash多功能存储卡,该卡向上兼容MMC卡,并增加了智能保护机制,以有效地防止盗版,同时具有更快的传输速率及更高的存储容量,可广泛用于便携式消费类电子产品中。本文首先介绍了STC12C5A60S2单片机在SPI协议下与SD卡的硬件接口电路,然后简要阐述了SPI总线模式以及软件模拟的SPI总线数据通讯,最后给出了实现SD卡的初始化和读写操作的软件流程。
1 STC单片机
STCl2C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(IT)的单片机,这是一种高速、低功耗、超强抗干扰的新一代805l单片机,它的指令代码完全兼容传统8051,但速度比8051快8~12倍.工作电压为5.5~3.3 V (5 V单片机),工作频率范围为O~35 MHz。该单片机内部集成有MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250 K/S),片上还集成有1280字节RAM,I/O口驱动能力均可达到20 mA,无需专用编程器和仿真器数秒内即可通过串口(P3.0/P3.1)下载用户程序,由于其带有通用全双工异步串行口(UART),因此,特别适合电机控制,而且干扰较强的场合。
2 硬件电路设计
本SD卡读写系统中的接口电路采用的STCl2C5A60S2单片机控制,并通过软件编程实现SPI模式的数据传输(包括串行时钟、数据的输入和输出)。在SPI模式下。单片机与SD卡的连接主要有四根线(包括时钟线,两根数据传输线和一根片选线),其接口硬件连接电路如图1所示。
图2所示是基于STCl2C5A60S2单片机的SD卡读写电路设计原理图,其中包括STC12C5A60S2单片机的晶振电路和复位电路SD卡连接电路、和SD卡套插座连接电路。
3 通讯模式的选择
通常,SD卡有两种总线模式,即SD总线模式和SPI总线模式。其中SD总线模式采用四条数据线并行传输数据,数据传输速率高,但是传输协议复杂,只有少数单片机才提供有此接口,而用软件方法模拟SD总线又比较繁琐,会降低SD卡的数据传输速率;而SPI总线模式只有一条数据传输线。传输协议简单,易于实现,虽然数据传输速率较低,但绝大多数中高档单片机都提供有SPI总线,同时由于其易于用软件方法来模拟。因此,本设计采用SPI总线模式。
SPI总线技术是MOTOROIA公司推出的一种同步串行总线接口,是目前单片机应用系统中最常用的几种串行扩展接口之一。 SPI总线主要通过三根线进行数据传输,包括同步时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输人数据线MOSI。另外,它还有一条低电平有效的从机片选线CS,片选信号以及同步时钟脉冲由主机提供。SPI总线模式的数据是以字节为单位进行传输的,主机与SD卡的各种通信都由主机控制。
4 软件设计
4.1 SD卡的初始化
SD卡从上电到对SD卡进行正确的读写操作,往往都需要一个上电初始化的过程。SD卡上电后,主机必须先向SD卡发送74个时钟周期,以完成SD卡的上电过程。通常SD卡上电后会自动进入SD总线模式,并在SD总线模式下向SD卡发送复位命令(CMD0)。因此,主机在对SD卡进行任何操作前,都必须先要拉低SD卡的片选信号CS(card select),以使SD卡进入SPI总线模式,然后再由主机向SD卡发送命令。SD卡可以响应主机发来的各种应答信号,同时向主机发送一个特殊的数据响应标志。若主机读到的应答信号为01,即表明SD卡已进人SPI模式,此时,主机即可不断地向SD卡发送命令字(CMDl)并读取SD卡的应答信号,直到应答信号为00,表明SD卡已完成初始化过程,并准备好接受下一命令。此后,系统便可读取SD卡的各寄存器,以进行读写等操作。SD卡初始化流程如图3所示。下面是SD卡初始化的程序代码:
4.2 SD卡的读写
SD卡的数据传输主要通过块读写来实现。块长度默认为512 KB。当RAM中已存放由模数转换模块传来的512 KB数据时,单片机便向SD卡写入此块数据。块读取时,可发送命令CMDl7,接收到的应答信号为0x00。这样就可以直接接收数据了,接收到的数据的第1个字节为数据令牌0xfe,后面的为接收到的数据,当输出口变为高电平时。表明读取操作完成。SD卡的读操作与写操作相同,故此不再赘述。图4所示是SD卡的读写软件流程图。其具体程序代码如下:
5 结束语
该SD卡与STCl2C5A60S2单片机的接口电路已在实际的试验板上验证成功,并已证明可以正确实现数据通讯,故可对SD卡上的文件进行各种操作。