第 28卷第 4期
2011年 4月
机 电 工 程
Journa l ofM echanica l& E lectr ica l Eng ineering
Vo.l 28 No. 4
Apr. 2011
收稿日期: 2010- 11- 01
基金项目:湖北省数字化纺织装备重点实验室开放课
资助 (DTL200905)
作者简介:张 弛 ( 1979- ),男,湖北武汉人,讲师,主要从事机电一体化,数字化制造方面的研究. E-m ai:l b etazhang13@ sina. com
单片机访问 SD卡精简
的设计与实现*
张 弛,张成俊,吴晓光
(武汉纺织大学 机电工程学院, 湖北 武汉 430074)
摘要:针对传统方法中 /单片机 (MCU )读写 SD卡数据时需要执行复杂的文件分区表数据操作 0的缺点 ,以 LED护栏管显示屏技术
要求为例,提出了一种单片机主从系统中快速、简单的 SD卡存储器的访问方法, 并给出了一种实用的 SD卡与单片机连接的接口电
路。采用该方法读取 SD卡控制数据与存储文件的分区表
无关, 因此支持 FAT32、NTFS、exFAT等文件格式下从 16MB ~ 32 GB
的 SD卡。该方法对需从 SD卡中连续读取控制数据的主、从控制系统均适用,有很强的实用性。该方法在 LED护栏管显示屏控制
器产品中得到应用,应用结果表明该系统读取数据稳定,控制效果良好。
关键词: SD卡; SP I方式;单片机; STC11L05
中图分类号: TH39; TP39 文献标志码: A 文章编号: 1001- 4551( 2011) 04- 0479- 03
Design and implementation of simple SD card drivenmethod inMCU system
ZHANG Ch,i ZHANG Cheng- jun, WU X iao-guang
( Schoo l ofM echan ica lEng ineering, Wuhan Text ile Un iversity, W uhan 430074, Ch ina)
Abstract: In o rder to reduce the d ifficu lty of secure dig italm emo ry card operation in m ic rocon tro ller un it(MCU ) system, a simp le SD card
driven me thod and interface circu itw as introduced. This me thod is independent o f partition tab le, so it susta ins all k inds of SD card and par-
tition fo rm ats, inc lud ing FAT32, NTFS, exFAT form at from 16MBy te to 32 GByte SD card. It can be appropr iate forM aster- slave control sys-
tem using SD card. Th is m ethod was used in LED d isplay controller system. The app lication results indicate that the system ach ieves good effec.t
Keyw ords: secure d ig ita lm em ory card; SP Im ode; m icro contro ller unit( MCU ); STC11L05
0 引 言
SD卡是基于 FLASH 存储介质的新一代记忆设
备, 由日本松下、东芝及美国 SanD isk公司于 1999年 8
月在 MMC卡 (M u lt iM ed ia Card)基础上共同开发研
制,具有体积小、容量大、数据传输快、移动灵活、安全
性能好以及兼容 MMC卡等特点 [ 1-2]。它的出现提供
了一个便宜的、结实的、卡片式的存储媒介, SD卡的容
量从 16MB到最高 32GB不等, 可为众多应用提供充
足的外部存储空间 [ 3-4 ]。
SD卡的数据读取以扇区为单位,一次读取512 By tes。
对于低成本 51核单片机,片内只有 256 By tes RAM空
间, 并且不能全部用来读取 SD卡数据。因此很多 SD
卡数据读取控制
, 使用 SD卡的单片机都要求能
一次存储 512 By tes数据, 必需选择性能较高的单片
机。而且为了便于同 PC机兼容, 传统方式下需对 SD
卡的文件分区格式进行处理。为了能适用于 FAT32、
NTFS、exFAT等各种分区格式, 单片机驱动程序中使
用了较多的资源来实现 SD卡的访问控制, 特别是针
对分区表的操作。
笔者针对一些主从控制系统的控制要求, 提出了
一种精简 SD卡读取方法, 使得一些低成本单片机也
能很方便地使用 SD卡这种大容量外部存储介质。
1 SD卡精简方法适用场合
在低成本单片机控制系统中, 单片机访问 SD卡
的方式一般是只读的,而且为了达到较好的实时性,数
据往往是连续读取的。例如: LED护栏管显示屏是由
首尾相连的护栏管排列组成, 多用于楼宇外立面的亮
化工程。相对户外 LED显示屏, LED护栏管显示屏控
制点数较少 ( 2万点以下 ) , 显示分辨率较低, 用 SD卡
或 CF卡将节目录制后通过控制器送出,而不采用 DV I
同步显示,成本低廉。对于成本敏感楼宇亮化与广告
显示屏应用有较广泛应用。低成本 LED护栏控制器
使用 SD卡的控制系统的工作过程如下 (如图 1所
示 ):
( 1) 由设计软件根据系统驱动点数或路数等参
数, 把所有要显示的动画效果数据经相关算法转换后
写入一个二进制文件,即由上位 PC机合成控制数据。
( 2) 将此文件拷贝至 SD卡。一般一张卡上只有
一个此文件。在拷贝前选择适合的分区形式对 SD卡
进行格式化, 即选择合适、大容量的外存储器 (如 SD
卡、CF卡或其他 FLASH存储器 )存放控制数据。
( 3) 系统上电后,由主控制器负责从 SD卡中将
数据读出。然后根据驱动类型将此数据通过串口或
SPI方式送至 N个下位机, 即单片机系统工作时由一
台主机快速、连续读取指定数据,并发送给下位机。
( 4) 下位机接收串口数据,将此数据送入自己的
RAM区,或根据地址选择其中的有效数据写入自己的
RAM区,即从机通过串行或并行方式接收主机数据,
并根据
得到本机数据。
( 5) 接收到上位机的同步命令后同时更新驱动数
据, 即最终驱动 I/O控制单元。
图 1 LED护栏控制器使用 SD卡工作过程
此类系统控制数据通常为主从系统, 系统控制数
据存放于一个数据文件中,主机工作时顺序读出数据。
一旦通过操作文件分区表找到相应文件名所在的起始
地址就不需要经常使用分区表。由于 SD卡中数据为
连续存储,只需依据此文件的首地址即可对文件进行访
问。由于驱动点数或路数一般固定,每帧长度固定。如
果该文件下控制的数据包括多个模式或帧数不同,计算
相应的文件地址偏移量即可找到需要的起始位置数据。
2 接口设计
SD卡有 SD和 SPI两种工作模式 [ 5] , 相对于 SD
模式, SPI模式可以简化主机设计, 降低成本。
STC11L05
[ 6]单片机与 SD卡在 SPI工作方式下的硬件
接线图如图 2所示。由于 SD卡控制器的核心电压在
3. 3 V左右, 在单片机选型时选择工作电压支持 3. 3 V
的型号, 如 STC11L系列, AVR系列的宽电压范围类
型 [ 7] , FO20系列 [ 8-9]。在编程时选择可以进行位操作
的引脚与 SD卡脚位连接。SD_CS为 SD卡使能控制,
SD _WR为 SD卡数据或命令写入位, SD _RD为 SD卡
数据读出位, SD_SCL为 SPI串行时钟输入位。 STC单
片机有内部上拉,固电路中数据引脚上拉均可以省略。
由于此应用中为只读方式, SD卡的写保护WP引脚未
使用。在电源两端增加 0. 1 LF滤波电容作为附助电路
在图中省略。此连接方法几乎可以使用单片机上任意
4位做位操作的引脚直接与 SD卡相连,简单实用。
图 2 STC11L05单片机与 SD硬件接线图
3 文件格式设计
为了让文件访问独立于分区表, 其核心就是要在
拷贝至 SD卡中数据有一个惟一的识别数据, 并设计
文件头数据格式, 使其便于后续的按帧、按控制模式
读取。
文件头尺寸应为 512 By tes的整数倍,即使用整数
个扇区,便于访问后续实际控制数据。文件头中第 1
个字节可用于确定文件序号, 这样就可以使 SD卡中
存入多个控制文件也不需要访问分区表。第 2~ 11字
节为文件识别数据,可存入 / XX公司 0或 / XX科技0等
识别数据,与后续控制数据相区别。单片机在定位文
件起始地址时, 连续读入扇区数据, 对此数据进行比
较,相同则找到文件头地址, 将文件起始地址存入全局
变量。此操作只在初始化时执行一次, 后续再不用执
行类似操作,节约文件定位时间。后续数据包括驱动
总点数,控制模式数及驱动路数,可用来确定每帧数据
所占扇区数。若上位机组织数据时能将驱动数据按
#480# 机 电 工 程 第 28卷
512 By tes填充满, 使得每帧数据占据整数个扇区, 则
后续寻址操作更简洁。文件头数据格式说明表如表 1
所示,以某 LED亮化工程控制系统中 SD卡的文件头
数据格式为例进行说明, 具体使用中用户可以进行相
应的修改,以制定自己的标准。
表 1 文件头数据格式说明表
序号 文件偏址 数据类型 说明
1 0000H byte / XX0文件头, 自定义
2 0001H) 000BH byte 文件识别数据, 11Bytes,自定义
3 000CH ) 000FH long 驱动总点数, 长整型
4 0010H byte 控制模式数 ( 0- 255)
5 0011H byte 驱动路数 ( 0- 255)
6 0012H) 0015H long 模式 1的帧数,长整型
7 0016H) 0019H long 模式 2的帧数,长整型
, , , ,
8 01FDH byte 帧延时值设定, 0- 255 m s
9 01FEH ) 01FFH byte / EE EE0,文件尾, 自定义
4 软件设计
SD卡工作在 SPI方式下, 单片机系统可用硬件
SPI功能脚与 SD卡相连, 并按 SPI模式进行读 /写操
作。对于无 SPI接口的单片机可用 I /O脚模拟 SPI协
议对 SD卡进行读 /写操作。笔者给出的接口与程序
利用能直接进行位操作的单片机引脚进行, 可以适用
于工作电压为 3. 3 V的 51核、AVR核、PIC等各种单
片机系统。下面具体说明单片机软件如何实现对 SD
卡的读 /写与定位文件初始物理地址等操作。
4. 1 SP I方式下的读 /写操作
写操作通过 PIN _CLK与 PIN _WR两个引脚将数
据或命令写入 SD卡,其中 PIN _WR为数据输入端口,
且数据传送为高位先写入, P IN _CLK上升沿锁存数
据。具体代码如下:
vo id SP I_WBYTE ( uchar va l) / /往 SD卡写入 1 Byte
{ uchar i= 0;
for( i= 8; ;i i- - ) {
P IN_CLK= 0;
P IN_WR= ( va&l 0x80);
va l< < = 1;
P IN_CLK= 1; }
P IN_WR= 1;
}
读操作通过 PIN _CLK与 PIN _RD两个引脚将 SD
卡数据或状态读出,其中 PIN _RD为数据输出端口,且
数据传送为高位先送出, P IN _CLK上升沿锁存数据。
具体代码如下:
uchar SP I_RBYTE( void) / /从 SD卡读出 1 Byte
{ uchar n= 0;
uchar i= 0;
PIN _RD= 1;
for( i= 8; ;i i- - ) {
PIN _CLK= 0;
PIN _CLK= 1;
n< < = 1;
if( P IN _RD ) n |= 1;
}
return n;
}
4. 2 SD卡命令格式
SPI模式是一种简单的命令响应协议, 主控制器
发出命令后, SD卡针对不同的命令返回对应的响应。
SD卡的命令列表都是以 CMD和 ACMD开头, 分别指
通用命令和专用命令, 后面接命令的编号 [ 10]。例如,
CMD17就是一个通用命令, 用来读单块数据。在 SPI
模式中,命令都是以如下的 6 By tes形式发送的。具体
代码如下:
vo id SdCommand( uchar command, ulong argum en,t uchar CRC)
/ /写入命令
{
SPI_WBYTE( command| 0x40);
SPI_WBYTE( ( ( unsigned char* )& argum ent) [ 0] );
SPI_WBYTE( ( ( unsigned char* )& argum ent) [ 1] );
SPI_WBYTE( ( ( unsigned char* )& argum ent) [ 2] );
SPI_WBYTE( ( ( unsigned char* )& argum ent) [ 3] );
SPI_WBYTE( CRC);
}
常用的 3条命令如下:
SdCommand( 0x00, 0, 0x95 ); 设置 SD卡工作于
SPI方式
SdCommand( 0x01, 0x00FFC000, 0xFF) ;打开 SD卡
SdCommand( 0x11, cntA ddress, 0xFF) ; 连续读取
SD卡数据, cntAddress为 32位任意地址,一般低 9位
为零,即扇区物理地址。其它命令与控制方式见数据
手册。
4. 3 确定文件物理地址
而在实际控制中, 系统初始化后应对 SD卡物理
地址中数据进行遍历,确定数据起始地址,找到后存放
于一公用变量中,为从任意模式、任意帧定位驱动数据
给出参考物理地址。具体程序流程如图 3所示。
利用遍历定位文件初始物理地址后, 可反复读取
文件头数据,从而定位出每一模式、每一帧数据存放在
SD卡上的物理地址。为了方便寻址, 存放在 SD卡的
数据组织上最好将数据对齐至扇区, 这样可以大大减
少空读数据的时间。
(下转第 499页 )
#481#第 4期 张 弛,等: 单片机访问 SD卡精简方法的设计与实现
使用,也可以组网使用。由于精确测量湿度是一个难
题, 该仪器也只是在现有基础上通过大量实验,得到了
一个比较可行的测湿方法, 但还有改进的余地。相信
随着湿度传感器技术的发展, 对湿度测量的精度也会
逐步提高,这种电子产品的使用也会越来越多。近年
来无线传感器网络技术发展很快,该仪器也可以加以
改进,配合无线收发模块,实现无线通信功能。
参考文献 (References):
[ 1] 窦振中.基于单片机的嵌入式系统工程设计 [M ]. 北京:
中国电力出版社, 2008.
[ 2] Texas Instruments Inc. . MSP430x13x, M SP430x14x,
MSP430x14x1 M ixed Signa l M icrocontrolle r Data M anual
( Rev. F ) [ EB /OL ]. [ 2004-06-03]. http: / / focus. t.i com /
lit /ds / sls272f /slas272 .f pd.f
[ 3] 何立明.单片机应用技术选编 [ M ]. 北京: 北京航空航天
大学出版社, 1997.
[ 4] 谢瑞和. 串行技术大全 [ M ] . 北京: 清华大学出版社,
2003.
[ 5] Texas Instrum ents Inc. . Choosing an U ltra Low Pow erMCU
( Rev. F ) [ EB /OL ]. [ 2003-06-16]. http: / / focus. t.i com.
cn/ cn / lit/ an / slaa207 /slaa207. pd.f
[ 6] 曹 磊. M SP430单片机 C程序设计与实践 [ M ].北京 :北
京航空航天大学出版社, 2003.
[ 7] Texas Instrum ents Inc. . M SP430x1xx Fam ily U ser. s Gu ide
( Rev. F ) [ EB /OL ]. [ 2006-02-28]. http: / / focus. t.i com /
lit /ug / slau049 f/s lau049.f pd.f
[ 8] 胡大可. M SP430系列 FLASH 型超低功耗 16位单片机
[M ] .北京: 北京航空航天大学出版社, 2001.
[ 9] 秦 龙. MSP430单片机 C语言应用程序设计实例精讲
[M ] .北京: 电子工业出版社, 2006.
[ 10] Texas Instrum ents Inc. . M SP430x13x, M SP430F14x,
M SP430F15x, MSP430F16x Code Examp les ( Rev. F )
[ EB /OL ]. [ 2005-06-11 ]. http: / / fo cus. t.i com / sw /
slac015n /s lac015n. z ip.
[编辑:张 翔 ]
(上接第 481页 )
图 3 SD卡数据文件定位流程图
5 结束语
笔者通过设计带有特殊识别数据的文件及文件相
关格式,实现访问文件不依赖分区表的功能,但又能兼
容上位机在各种文件分区格式下写入的数据。此方法
为一种精简控制方案,可以使用一些低成本单片机,方
便地读取 SD卡数据,并实现对操作对象的快速控制。
该方案特别适合一些成本敏感或以单片机为核心的
主、从控制系统,要求主机读取大量数据并连续向从机
或驱动部分发送的小型控制系统。
通过该方法能够实现 LED护栏管显示屏的控制
要求,生成的文件通过 PC机存入 SD卡后,读取操作
时只需在初始化时通过遍历所有扇区方式找到有效数
据的起始地址,后续数据读取操作只与此起始地址有
关。该方法节约了读取文件所需的程序资源, 简化了
控制过程。硬件结构上接线简单,调试方便,便于移植。
经实际调试应用, 系统工作稳定可靠, 大大缩小了代码
的规模与复杂度。并对有类似控制要求的系统有一定
的通用性,可供开发有相同控制要求的系统参考。
参考文献 (References):
[ 1] SD G roup ( M EI, SanD isk, Toshiba ) . SD M em ory C ard
Specifications Part 1: Physical Layer Specification Version1.
01[ Z]. SD G roup(ME I, SanD isk, Tosh iba), 2002.
[ 2] 周立功. SD卡读写模块设计 [ M ]. 北京:北京航空航天大
学出版社, 2004.
[ 3] 孙 方, 颜国正, 王文兴. Mu ltim ed ia Ca rd及其与单片机
接口 [ J]. 单片机与嵌入式系统应用, 2004( 6): 44-46.
[ 4] 张 凯,姜熙君,陈 磊,等 . MM C卡的文件系统及其实
现方法 [ J]. 单片机与嵌入式系统应用, 2006( 5): 30-32.
[ 5] SanD isk Co rpo ra tion. SanD isk secure d ig ita l ca rd product
manua l[ K ]. SanD isk Corporation, 2004.
[ 6] STC Co rporation. STC11-10Fxx product m anua l[ K ] . STC
Co rpo ra tion, 2008.
[ 7] AVR Corpo ration. AVR-MEGA48 /88 product m anua l[ K ].
AVR Corporation, 2004.
[ 8] Silabs Co rpo ra tion. F020-10Fxx produc tm anual[ K ]. Silabs
Co rpo ra tion, 2005.
[ 9] 李长有,武学东,孙步胜, 等.基于 C8051F020的 SD卡主
控制器设计 [ J]. 微计算机信息, 2007, 23( 9-2): 120-122.
[ 10] 张洪涛, 莫文承, 李兵兵.基于 SP I协议的 SD卡读写机
制与实现方法 [ J]. 电子元器件应用, 2008, 10( 3): 42-
43, 47.
[编辑:李 辉 ]
#499#第 4期 付华圆,等: 基于 M SP430F149的温湿度测控仪设计