下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 1MCF51QE128的SD卡接口设计技术

1MCF51QE128的SD卡接口设计技术.doc

1MCF51QE128的SD卡接口设计技术

平凡的程序员小强
2018-09-04 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《1MCF51QE128的SD卡接口设计技术doc》,可适用于工程科技领域

资料来源电子下载网下载时间::本文地址http:ujjcomshejiqianrushihtmlMCFQE的SD卡接口设计技术摘要SD(SecureDigital)卡是一种基于闪存技术的可移动存储设备由于其体积小、功耗低、容量大且成本低广泛应用于各类小型便携式电子设备中。本文实现了SD卡与Freescale公司的位低功耗微控制器MCFQE之间的软硬件接口设计可作为数据记录仪、媒体播放器和录音设备等的设计参考。关键词 SD卡 MCFQE SPI模式 SD卡标准  SD卡标准是SD卡协会针对可移动存储设备设计专利并授权的一种标准主要用于制定卡的外形尺寸、电气接口和通信协议。 SD卡引脚功能图 SD卡外形  SD卡的外形如图所示引脚功能如表所列。SD卡的引脚具有双重功能既可工作在SD模式也可工作在SPI模式。不同的模式下引脚的功能不同。表 SD卡引脚功能  SD模式多用于对SD卡读写速度要求较高的场合SPI模式则是以牺牲读写速度换取更好的硬件接口兼容性。由于SPI协议是目前广泛流行的通信协议大多数高性能单片机都配备了SPI硬件接口硬件连接相对简单因此在对SD卡读写速度要求不高的情况下采用SPI模式无疑是一个不错的选择。 SPI模式  SPI模式是一种简单的命令响应协议主控制器发出命令后SD卡针对不同的命令返回对应的响应。  SD卡的命令列表都是以CMD和ACMD开头分别指通用命令和专用命令后面接命令的编号。例如CMD就是一个通用命令用来读单块数据。  在SPI模式中命令都是以如下的字节形式发送的:  每帧命令都以“”开头然后是位命令号和字节的参数(高位在前低位在后)最后是位CRC校验和位停止位“”。表 R响应格式  SD卡的每条命令都会返回对应的响应类型。在SPI模式下共有种响应类型:R、R和R分别占、和个字节。这里仅列出了R响应的格式如表所列。当出现表中所描述的状态时相应的位置。R和R的第个字节格式与R完全一样详细内容请参考SD卡标准。 硬件设计  本设计选用Freescale公司的位低功耗微控制器MCFQE采用SPI模式实现与SD卡的接口。  由于MCFQE是一款低功耗的微控制器工作电压的典型值为V与SD卡的工作电压兼容因而可以直接与SD卡连接无需电平转换电路。这里选用的是MCFQE的第个SPI口硬件连接如图所示。图  SD卡与MCFQE的硬件连接 软件实现  软件部分主要实现MCFQE的初始化、底层SPI通信以及SD卡的通用写命令、初始化和单块数据的读写等功能。 MCFQE的初始化  在与SD卡通信之前首先需要配置MCFQE并初始化SPI端口。代码如下:定义片选信号#defineselectcard()PTDDPTDD=#defineunselectcard() PTDDPTDD=voidMCUInit(void){  SOPT=x关看门狗  SCGC=x禁用其他外设的总线时钟  SCGC=x开SPI模块的总线时钟  PTDDD=xSPI片选信号由软件设置}voidSPIInit(void){  SPIBR=x设初始SPI时钟为kHz  SPIC=xDSPI中断允许系统中断允许主模式选择  SPIC=x} 底层SPI通信  底层的SPI通信是实现最终读写的关键。由于MCFQE自带SPI硬件接口因此只需要读写SPI数据寄存器的值。这里自定了byte、word和dword三种数据类型分别对应于位、位和位数据。代码如下:byteSPIReadByte(void){SPI读字节函数  while(!SPISSPTEF)等待直到发送寄存器为空  SPID=xff接收字节数据  while(!SPISSPRF)  returnSPID}byteSPIWriteByte(byteval){SPI写字节函数  while((!SPISSPTEF)(!PTDDPTDD))等待直到发送寄存器为空  SPID=val发送数据} SD卡的通用写命令  由于SD卡的命令具有统一的格式因此可以用一个通用的写命令函数来实现所有命令的发送。另外考虑到多数命令的响应类型都是R这里的通用写命令函数所接收的响应类型默认为R。函数代码如下:byteSDSendCommandR(bytecmd,dwordarg){  bytei,r  SPIWriteByte(xff)等待几个时钟周期  SPIWriteByte((byte)(cmd|x))写入命令号  SPIWriteByte((byte)(arg>>))字节命令参数  SPIWriteByte((byte)(arg>>))  SPIWriteByte((byte)(arg>>))  SPIWriteByte((byte)(arg))  SPIWriteByte((byte)(cmd==xx:xff))CRC校验和  for(i=i<i){接收响应    r=SPIReadByte()    if(r!=xff)break  }  returnr} SD卡的初始化  SD卡的初始化要遵循一定的步骤。首先将SPI时钟降低到kHz等待至少个时钟周期。接着拉低片选信号并发送CMD命令对SD卡进行复位并使其进入SPI模式这里需要正确的CRC校验校验字节为x。若SD卡进入空闲状态(即接收响应为x时)则发送CMD命令激活卡的初始化过程此时响应为x。然后设置块的长度一般为字节。最后将片选拉高并将SPI时钟设为最大值以保证最大的读写速度。SD卡初始化过程如图所示。图 SD卡初始化过程  SD卡初始化代码如下:byteSDInit(void){  wordi  byteresponse  for(i=i  selectcard()片选拉低  for(i=i){    response=SDSendCommandR(x,)发送CMD    if(response==x)break进入空闲状态    if(i==xff){      unselectcard()      return    }  }  for(i=i){    response=SDSendCommandR(x,)发送CMD激活卡的初始化    if(response==x)break    if(i==xff){      unselectcard()      return    }  }  if(SDSendCommandR(x,)){设置块长度为字节    unselectcard()    return  }  unselectcard()片选拉高SPIBR=x选择最高SPI时钟  return} SD卡单块数据读写  SPI模式支持单块和多块数据的读写操作可通过发送相应的命令来实现。读单块数据的操作过程如图所示。拉低片选后首先由主控制器MCFQE发送读单块数据命令CMD然后等待SD卡的响应。当收到数据块开始标志xfe后开始从SD卡读取字节的数据最后读取字节的CRC校验位。图 读单块数据操作  读单块数据的函数代码如下:byteSDReadSingleBlock(bytedata,dwordsector){  wordi  selectcard()  if(SDSendCommandR(x,sector)){发送读单块数据命令CMD    unselectcard()    return  }  while(SPIReadByte()!=xfe)等待直到收到数据块开始标志xfe  for(i=i<i) datai=SPIReadByte()读字节数据块  SPIReadByte()读位CRC校验  SPIReadByte()  unselectcard()  SPIReadByte()  return}  写单块数据的操作过程与读操作类似如图所示。拉低片选后同样由主控制器MCFQE发送写单块数据命令CMDSD卡正确响应后发送数据块开始标志xfe接着发送字节数据块和字节CRC校验。图 写单块数据操作  写入数据后SD卡会发送字节的数据响应来反馈数据写入的情况其格式如图所示。当数据正确写入SD卡后数据响应为x。最后读数据总线写数据忙时等待直到总线为高电平。图 数据响应格式  写单块数据的函数代码如下:byteSDWriteSingleBlock(bytedata,dwordsector){  wordi  byteresponse  selectcard()  if(SDSendCommandR(x,sector)){发送写单块数据命令CMD    unselectcard()    return  }  SPIWriteByte(xfe)发送数据块开始标志xfe  for(i=i<i)SPIWriteByte(datai)写字节数据块  SPIWriteByte(xff)写位CRC校验  SPIWriteByte(xff)  for(i=i){读数据响应判断数据是否正确写入    response=SPIReadByte()    if((responsexf)==x)break    if(i==xff){      unselectcard()      return    }  }  while(SPIReadByte()!=xff)写数据忙时等待  SPIReadByte()  unselectcard()  return}结语  SD卡是目前广泛应用的可擦除的大容量存储设备其接口设计可作为各类嵌入式系统中存储单元的一般解决方案。本文结合SD卡标准的相关技术基于MCFQE微控制器完成了硬件接口和底层通信软件的设计。在此基础上可进一步构建文件系统实现对存储数据更有效的管理。参考文献FoustFApplicationNote,SecureDigitalCardInterfacefortheMSP,SDGroupSDSpecificationsPartPhysicalLayerSimplifiedSpecificationVersion,FreescaleSemiconductor,IncQEQuickReferenceUserGuide,童静(讲师)主要研究方向为单片机与嵌入式系统开发。推荐阅读:(按住Ctrl鼠标左键点击标题可以打开详细内容)、IC检测方法、什么是遥感技术、什么是无线网址、制冷设备维修技巧、什么是色温、手机RF设计问答、微波简史、微波小知识、卫星导航知识、卫星与遥感技术

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/7

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利