历史上的今天
返回首页

历史上的今天

今天是:2025年04月07日(星期一)

正在发生

2018年04月07日 | MCF51QE128在SD卡接口设计中的应用

2018-04-07 来源:eefocus

    1 SD卡标准

    SD卡标准是SD卡协会针对可移动存储设备设计专利并授权的一种标准,主要用于制定卡的外形尺寸、电气接口和通信协议。

    1.1 SD卡引脚功能

    SD卡的外形如图1所示,引脚功能如表1所列。SD卡的引脚具有双重功能,既可工作在SD模式,也可工作在SPI模式。不同的模式下,引脚的功能不同。

 

t1.jpg?imageView2/2/w/550

b1.jpg?imageView2/2/w/550

    SD模式多用于对SD卡读写速度要求较高的场合,SPI模式则是以牺牲读写速度换取更好的硬件接口兼容性。由于SPI协议是目前广泛流行的通信协议,大多数高性能单片机都配备了SPI硬件接口,硬件连接相对简单,因此,在对SD卡读写速度要求不高的情况下,采用SPI模式无疑是一个不错的选择。

    1.2 SPI模式

    SPI模式是一种简单的命令响应协议,主控制器发出命令后,SD卡针对不S同的命令返回对应的响应。

    SD卡的命令列表都是以CMD和ACMD开头,分别指通用命令和专用命令,后面接命令的编号。例如,CMD17就是一个通用命令,用来读单块数据。

    在SPI模式中,命令都是以如下的6字节形式发送的:

1262704847.jpg?imageView2/2/w/550

    每帧命令都以“01”开头,然后是6位命令号和4字节的参数(高位在前,低位在后),最后是7位CRC校验和1位停止位“1”。

    SD卡的每条命令都会返回对应的响应类型。在SPI模式下,共有3种响应类型:R1、R2和R3,分别占1、2和3个字节。这里仅列出了R1响应的格式,如表2所列。当出现表中所描述的状态时,相应的位置1。R2和R3的第1个字节格式与R1完全一样,详细内容请参考SD卡标准。

1262704857.jpg?imageView2/2/w/550

    2 硬件设计

    本设计选用Freescale公司的32位低功耗微控制器MCF51QE128,采用SPI模式实现与SD卡的接口。

    由于MCF51QE128是一款低功耗的微控制器,工作电压的典型值为3.6 V,与SD卡的工作电压兼容,因而可以直接与SD卡连接,无需电平转换电路。这里选用的是MCF51 QE128的第2个SPI口,硬件连接如图2所示。

1262704940.jpg?imageView2/2/w/550

   

    3 软件实现

    软件部分主要实现MCF51QE128的初始化、底层SPI通信,以及SD卡的通用写命令、初始化和单块数据的读写等功能。

    3.1 MCF51QE128的初始化

    在与SD卡通信之前,首先需要配置MCF51QE128,并初始化SPI端口。代码如下:

    1262704962.jpg?imageView2/2/w/550

    3.2 底层SPI通信

    底层的SPI通信是实现最终读写的关键。由于MCF51QE128自带SPI硬件接口,因此只需要读写SPI数据寄存器的值。这里自定了byte、word和dword三种数据类型,分别对应于8位、16位和32位数据。代码如下:

    1262704974.jpg?imageView2/2/w/550

    1262704981.jpg?imageView2/2/w/550

    3.3 SD卡的通用写命令

    由于SD卡的命令具有统一的格式,因此可以用一个通用的写命令函数来实现所有命令的发送。另外,考虑到多数命令的响应类型都是R1,这里的通用写命令函数所接收的响应类型默认为R1。函数代码如下:

    1262705023.jpg?imageView2/2/w/550

    3.4 SD卡的初始化

    SD卡的初始化要遵循一定的步骤。首先将SPI时钟降低到400 kHz,等待至少74个时钟周期。接着拉低片选信号,并发送CMD0命令,对SD卡进行复位并使其进入SPI模式,这里需要正确的CRC校验,校验字节为 0x95。若SD卡进入空闲状态(即接收响应为0x01时),则发送CMD1命令,激活卡的初始化过程,此时响应为0x00。然后设置块的长度,一般为 512字节。最后将片选拉高并将SPI时钟设为最大值,以保证最大的读写速度。SD卡初始化过程如图3所示。

1262705033.jpg?imageView2/2/w/550

    SD卡初始化代码如下:

    1262705161.jpg?imageView2/2/w/550

    3.5 SD卡单块数据读写

    SPI模式支持单块和多块数据的读写操作,可通过发送相应的命令来实现。读单块数据的操作过程如图4所示。拉低片选后,首先由主控制器 MCF51QE128发送读单块数据命令CMD17,然后等待SD卡的响应。当收到数据块开始标志0xfe后,开始从SD卡读取512字节的数据,最后读取2字节的CRC校验位。

1262705178.jpg?imageView2/2/w/550

    读单块数据的函数代码如下:

    1262705183.jpg?imageView2/2/w/550

    写单块数据的操作过程与读操作类似,如图5所示。拉低片选后同样由主控制器MCF51QE128发送写单块数据命令CMD24,SD卡正确响应后发送数据块开始标志0xfe,接着发送512字节数据块和2字节CRC校验。

 

    写入数据后,SD卡会发送1字节的数据响应来反馈数据写入的情况,其格式如图6所示。当数据正确写入SD卡后,数据响应为0x05。最后读数据总线,写数据忙时等待,直到总线为高电平。

1262705199.jpg?imageView2/2/w/550

    写单块数据的函数代码如下:

    1262705219.jpg?imageView2/2/w/550

    1262705229.jpg?imageView2/2/w/550

    结 语

    SD卡是目前广泛应用的可擦除的大容量存储设备,其接口设计可作为各类嵌入式系统中存储单元的一般解决方案。本文结合SD卡标准的相关技术,基于 MCF51QE128微控制器完成了硬件接口和底层通信软件的设计。在此基础上,可进一步构建文件系统,实现对存储数据更有效的管理。


推荐阅读

史海拾趣

Endicott Research Group Inc (ERG)公司的发展小趣事

随着医疗、工业和军事市场对电源设备的需求不断增长,ERG凭借其深厚的技术积累和创新能力,逐渐在这些领域获得了广泛的认可。他们的产品以其高性能和稳定性赢得了众多客户的信赖。特别是在医疗设备领域,ERG的电源产品为诊断和治疗设备提供了可靠的动力支持,为医疗行业的发展做出了重要贡献。

Fairchild (ON Semiconductor)公司的发展小趣事

1957年,被誉为“八叛逆”的八位年轻科学家在罗伯特·诺伊斯的带领下,离开了肖克利半导体实验室,创立了Fairchild Semiconductor公司。这八位科学家,包括诺伊斯、戈登·摩尔等人,后来都成为了硅谷科技产业的领军人物。Fairchild的成立不仅为硅谷的发展奠定了坚实的基础,更为电子行业培养了大量的人才,被誉为“人才摇篮”。

Calmos Systems Inc公司的发展小趣事

Calmos Systems Inc公司创立之初,面临着资金短缺、市场竞争激烈的挑战。公司创始人凭借对电子技术的深厚理解和对市场需求的敏锐洞察,带领团队研发出了一款具有创新性的电子产品。然而,由于品牌知名度低,市场推广困难,产品销量一度不佳。为了打开市场,创始人亲自拜访潜在客户,了解他们的需求,不断优化产品功能。经过不懈的努力,产品逐渐赢得了客户的认可,为公司的发展奠定了基础。

Dicon Fiberoptics Inc公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,DiCon积极开展国际合作与全球布局。公司与多家国际知名企业建立了战略合作关系,共同研发和推广光纤通信技术。同时,DiCon还在全球范围内设立了多个研发中心和销售分支机构,以便更好地服务当地客户和市场。

Easy Magnet Corp公司的发展小趣事

Easy Magnet Corp公司深知人才是企业发展的核心动力。因此,公司注重人才培养和引进,建立了一支高素质、专业化的研发团队。同时,公司还为员工提供了良好的工作环境和福利待遇,激发了员工的工作热情和创造力。这些举措为公司的发展提供了坚实的人才保障。

Hirschmann公司的发展小趣事
由于TC4066是模拟开关,其开关状态可以由外部数字信号控制。因此,可以通过编程改变输入到TC4066的数字信号(A、B、C、D等),从而改变电路中的电阻/电容值或信号路径,进而间接调整延时时间。这种方法更加灵活和精确,但需要一定的编程知识和电路调试经验。

问答坊 | AI 解惑

Protel DXP2004 简体中文破解版

Altium Protel DXP是第一套完整的板卡级设计系统,真正实现在单个应用程序中的集成。设计从一开始的目的就是为了支持整个设计过程,Protel DXP让你可以选择最适当的设计途径来按你想要的方式工作。Protel DXP PCB线路图设计系统完全利用了Windows X ...…

查看全部问答>

Cadence中的psm文件

我前几天下了个Cadence软件,主要是查看芯片封装信息的,其中主要有两个文件,一个是pad格式,可以打开,另一个是psm格式的文件 怎么也打不开。气死了,现在很急,希望哪位高手可以帮助我。。。:Q…

查看全部问答>

对51单片机中断 的一点疑问

程序如下 #include   unsigned int  count=0; unsigned int  count1=0; sbit  P15=P1^5 ;//蜂鸣器 main() { TMOD=0X01;//选择定时器0方式1 TH0=(65536-50000)/256;//定时器置初值,定时50ms ...…

查看全部问答>

嵌入式怎么学呀?

书有很多但讲的都是不同的模块芯片。 1应该先学哪个芯片呀? 2学这个还要一些硬件,应该买哪个合适?都多少钱? …

查看全部问答>

Rt_thread中如何用FinSH shell查看一个线程使用的栈最大深度

请教了:RT中定义堆栈是一个麻烦事,我们要怎样用FinSH shell来查看一个线程使用的栈的最大深度喃? 哪位说说看。。。。。…

查看全部问答>

急 求破解!困惑了几个星期了!

为啥用msp430驱动不了呢?用51就可以呢?msp430用的是默认的时钟!各位帮帮忙啊! /**************宏定义***************/ #define DataDir0     P4DIR      //LCD1602 #define DataPort0    ...…

查看全部问答>

LED的十大认证标准

在能源紧缺的背景下,可以说节约能源是我们面临的重要问题,LED一直被称为新一代绿色光源。它的节能、环保、寿命长等优点,使LED照明产业成为各国重点关注的绿色产业。鉴于LED照明技术的日益成熟以及飞速发展,为了规范LED照明这一新兴市场,全球一 ...…

查看全部问答>

求 《STM32库开发实战指南》(刘火良 版)光盘资料 ?

本帖最后由 yhye2world 于 2016-10-27 15:11 编辑 见附图,为 《STM32库开发实战指南》(刘火良 版)封面截图。 请教: 哪位 有这本书的 光盘资料 呀 ?给小弟 共享下 ! 先谢谢了 ! …

查看全部问答>