当前位置:首页 期刊杂志

单片机控制高容量安全数字卡的应用设计

时间:2024-07-29

李文华,龚 宸

(1.湖北仙桃职业学院机械电子工程学院,湖北 仙桃 433000; 2. 华中师范大学计算机与科学系,湖北 武汉 430000)

0 引 言

高容量安全数字卡广泛应用在含有视频功能的嵌入式系统[1]、笔记本电脑中,对高容量安全数字卡的访问控制成为研究的热点.在含有视频拍摄功能的嵌入式系统中,常用SD卡 (Secure Digital Card——安全数字卡)保存系统拍摄的视频,以便用计算机进一步处理嵌入式系统中所拍摄到的数据.随着拍摄时间的增加和拍摄功能的增强,选用最高容量不超过2 GB的SDSC卡(Standard Capacity Secure Digital Card——标准容量安全数字卡)很难满足系统对存储卡的容量要求,客观上需要嵌入式系统选用容量为4GB~32GB的SDHC卡(High Capacity Secure Digital Card——高容量安全数字卡).SDHC卡是近来按Ver2.0规范生产的SD卡,与按Ver1.1规范生产的SDSC卡存在较大的差异,为了解决嵌入式系统中高容量SD卡的访问控制问题,本文从应用的角度出发,以MC9S12XS12单片机控制Apaccr(宇瞻)4GB的SD卡为例,详细地讨论SDHC卡的控制设计.

1 SDHC卡与SDSC卡在使用上的主要差异

SDHC卡的内部结构与SDSC卡不同,除了容量上的差异外,在使用控制上还存在着以下几方面的差别:

(1)SDHC卡只支持块访问,不支持字节访问,块的大小固定为一个扇区512字节;SDSC卡既支持块访问,又支持字节访问,块的大小由用户指定.

(2)SDHC卡所使用的文件系统是FAT32,不能在FAT12/16文件系统中使用;SDSC卡使用的文件系统是FAT12/16,在FAT32文件系统中也可以访问SDSC卡.

(3)SD卡除了拥有SDSC卡的全部命令集外,还增加了许多命令.其中,SPI模式中新增加了CMD8命令,用来识别SD卡的接口类型.CMD8命令的格式与其他SPI命令的格式相同,命令代码为0x48.

(4)块访问命令参数的含义不同.在SDSC卡中,6个块访问命令CMD17、CMD18、CMD24、CMD25、CMD32、CMD33的参数含义是SD卡的字节地址.在SDHC卡中块访问命令虽然也是这6个命令,但其参数的含义为SD卡的块地址(扇区地址).

(5)初始化过程不同.

2 硬件电路设计

SDHC卡是在SDSC卡的基础上发展起来的,它们的引脚数都是9脚,引脚分布相同,都具有SD和SPI两种工作模式,用单片机控制SDHC卡可以采用SPI模式[2]控制.

MC9S12XS128单片机是带有SPI口的CMOS单片机[3],其工作电压为3.135~5.5 V,SD卡的工作电压为2.7~3.6 V,它们都采用3.3 V电源供电时,可用MC9S12XS128的SPI口直接控制SD卡.MC9S12XS128控制宇瞻4 GB的SDHC卡的硬件电路[4]如图1所示.

图1 单片机控制SD卡的硬件电路 Fig.1 Circuit of controlling SD card based on MCU

图1中,R1为4.7 kΩ的电阻,R2为100 Ω的电阻,R3为1 MΩ的电阻,C1为0.01 μF的电容,S1为复位按钮,C2、C3为22PF的电容,Y为16 MHz的晶振.R1、R2、C1、S1构成了单片机的复位电路,C2、C3、Y、R3为单片机的振荡电路.

3 软件程序设计

3.1 SPI初始化程序

SDHC卡工作在SPI模式时,一次数据传输期内CS引脚必须保护为低电平,数据传输结束后需将CS置为高电平.一个字节的数据传输方向是,高字节在先,低字节在后.SDHC卡输出数发生在时钟的下降沿之后,SDHC卡接收数据时时钟的上升沿锁存数据.在SDHC卡的初化过程中,SPI的时钟频率为100~400 kHz,初始化结束后,SPI的时钟频率为0~6 MHz.为了实现单片机与SDHC卡通信,单片机的SPI口应按SDHC卡的时序要求工作[5].用MC9S12XS128单片机控制宇瞻4 GB的SDHC卡时,单片机的SPI口初始化程序如下:

void SPI_Init(void)

{ MODRR =0;

MODRR_MODRR4=1; //使用PM口

DDRM|=0x38; //SCK0=1,MOSI=1,

SS0=1

DDRM &=(~0X04); //MISO=0 输入

SPI0CR1 = 0x5E; //CPOL=1,CPHA=1

SPI0CR2 = 0x00;

SPI0BR = 0x07; //SPI速率:312.5 kHz}

3.2 SD卡的初始化程序

上电后,SD卡处于SD模式,采用SPI模式访问SD卡时必须先将SD卡的工作模式转换成SPI模式,然后用SPI模式命令访问SD卡中的存储器.初始化SD卡的的主要任务是,判断卡槽中的SD卡是何种SD卡,并将SD卡的工作模式设置成SPI模式,如果是SDSC卡还需要设置访问块的大小.

初始化SD卡的方法是,上电后先用CMD0命令复位SD卡,使SD卡能接收后续的SPI模式命令,然后用CMD8命令[6]判断SD卡的接口类型和工作条件.

在读得CMD8命令的响应有效后再用ACMD41命令启动SD卡的SPI模式初始化,并检查初始化是否结束,此处发送ACMD41命令时,应将参数的HCS位设置成1.

在SD卡完成了SPI模式初始化后,再用CMD58命令读OCR寄存器的内容,并根据OCR的CCS位判断SD卡是SDHC卡还是Ver2.0版本的SDSC卡.SDSC卡、SDHC卡通用的初始化流程图如图2所示.

图2 SD卡初始化流程Fig.2 Flow chart of the SD card initialized

3.3 读写扇区程序

在SPI模式下,SDHC卡的读扇区的命令是CMD17,写扇区命令是CMD24,这2个命令也是SDSC卡在SPI模式下的读写扇区命令.读扇区程序必须按照CMD17命令的时序图编写,写扇区程序必须按照CMD24的时序图编写.考虑到SDHC卡和SDSC卡的读写扇区命令相同,仅仅只是参数的含义不同,可以将读写扇区程序编写成SDHC卡和SDSC卡通用的程序.通用的读扇区流程图如图3所示,通用的写扇区的流程图如图4所示.

图3 读扇区流程图Fig.3 Flow chart of reading sector

图4 写扇区流程图Fig.4 Flow chart of writing sector

4 测试结果

测试主要包括2个方面,一是测试向SDHC卡写数的功能,二是测试从SDHC卡中读数的功能.应用本设计中的电路和程序向宇瞻SDHC卡的第50 000扇区写入512个0x17数据,写数后的结果如图5所示.

将SDHC卡的50 000扇区中的数据读至数据组buff[512]中的结果如图6所示.

图6 从SDHC卡读数的结果Fig.6 Result of reading data from SDHC card

5 结 语

本设计通过采用MC9S12XS128单片机控制宇瞻4 GB的SDHC卡,提出了嵌入式系统中使用高容量SD卡的设计思路和方法,并成功地实现了单片机对SDHC的访问控制,本设计中的电路和程序已在第五届“飞思卡尔”杯智能汽车的调试过程得到了很好的应用.实践表明,本设计解决了高容量SD卡的访问控制问题,可应用于含有视频拍摄功能的嵌入系统中和基于SD卡的嵌入式系统的存储器升级.

参考文献:

[1] 罗肖,刘军,杨辉.嵌入式安全存储系统的研究[J].武汉工程大学学报,2012,34(2):67-70.

[2] 盛李立,王忠,王春丽,等.基于SPI接口的无线网卡设备驱动设计[J].武汉工程大学学报, 2011,33(6):89-97.

[3] 孙同景.Freescale 9S12十六位单片机原理及嵌入式开发技术[M].北京:机械工业出版社,2008.

[4] 王效华,牛思先.基于单片机PWM控制技术的实现[J].武汉理工大学学报,2010,32(1):94-98.

[5] 李文华.单片机应用技术(C语言版)[M].北京:人民邮电出版社,2011.

[6] SD卡委员会.SD specifications part1(physicial layer smplified specification version 3.01)[R]. Technical Committee SD Card Assiociation,2010(5):113-116.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!