首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
消费电子
» 基于MCF51QE128的SD卡接口设计
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
基于MCF51QE128的SD卡接口设计
发短消息
加为好友
forsuccess
当前离线
UID
871057
帖子
6281
精华
0
积分
3141
阅读权限
90
在线时间
282 小时
注册时间
2012-2-21
最后登录
2015-6-23
论坛元老
UID
871057
性别
男
1
#
打印
字体大小:
t
T
forsuccess
发表于 2012-6-2 23:24
|
只看该作者
基于MCF51QE128的SD卡接口设计
设计
,
接口
1 SD卡标准
SD卡标准是SD卡协会针对可移动存储设备设计专利并授权的一种标准,主要用于制定卡的外形尺寸、电气接口和通信协议。
1.1 SD卡引脚功能
SD卡的外形如图1所示,引脚功能如表1所列。SD卡的引脚具有双重功能,既可工作在SD模式,也可工作在SPI模式。不同的模式下,引脚的功能不同。
SD模式多用于对SD卡读写速度要求较高的场合,
SPI模式
则是以牺牲读写速度换取更好的硬件接口兼容性。由于SPI协议是目前广泛流行的通信协议,大多数高性能单片机都配备了SPI硬件接口,硬件连接相对简单,因此,在对SD卡读写速度要求不高的情况下,采用SPI模式无疑是一个不错的选择。
1.2 SPI模式
SPI模式是一种简单的命令响应协议,主控制器发出命令后,SD卡针对不S同的命令返回对应的响应。
SD卡的命令列表都是以CMD和ACMD开头,分别指通用命令和专用命令,后面接命令的编号。例如,CMD17就是一个通用命令,用来读单块数据。
在SPI模式中,命令都是以如下的6字节形式发送的:
每帧命令都以“01”开头,然后是6位命令号和4字节的参数(高位在前,低位在后),最后是7位CRC校验和1位停止位“1”。
SD卡的每条命令都会返回对应的响应类型。在SPI模式下,共有3种响应类型:R1、R2和R3,分别占1、2和3个字节。这里仅列出了R1响应的格式,如表2所列。当出现表中所描述的状态时,相应的位置1。R2和R3的第1个字节格式与R1完全一样,详细内容请参考SD卡标准。
2 硬件设计
本设计选用Freescale公司的32位低功耗微控制器MCF51QE128,采用SPI模式实现与SD卡的接口。
由于MCF51QE128是一款低功耗的微控制器,工作电压的典型值为3.6 V,与SD卡的工作电压兼容,因而可以直接与SD卡连接,无需电平转换电路。这里选用的是MCF51 QE128的第2个SPI口,硬件连接如图2所示。
3 软件实现
软件部分主要实现MCF51QE128的初始化、底层SPI通信,以及
SD卡
的通用写命令、初始化和单块数据的读写等功能。
3.1 MCF51QE128的初始化
在与SD卡通信之前,首先需要配置MCF51QE128,并初始化SPI端口。代码如下:
3.2 底层SPI通信
底层的SPI通信是实现最终读写的关键。由于MCF51QE128自带SPI硬件接口,因此只需要读写SPI数据寄存器的值。这里自定了byte、word和dword三种数据类型,分别对应于8位、16位和32位数据。代码如下:
3.3 SD卡的通用写命令
由于SD卡的命令具有统一的格式,因此可以用一个通用的写命令函数来实现所有命令的发送。另外,考虑到多数命令的响应类型都是R1,这里的通用写命令函数所接收的响应类型默认为R1。函数代码如下:
3.4 SD卡的初始化
SD卡的初始化要遵循一定的步骤。首先将SPI时钟降低到400 kHz,等待至少74个时钟周期。接着拉低片选信号,并发送CMD0命令,对
SD卡
进行复位并使其进入SPI模式,这里需要正确的CRC校验,校验字节为 0x95。若SD卡进入空闲状态(即接收响应为0x01时),则发送CMD1命令,激活卡的初始化过程,此时响应为0x00。然后设置块的长度,一般为 512字节。最后将片选拉高并将SPI时钟设为最大值,以保证最大的读写速度。SD卡初始化过程如图3所示。
SD卡初始化代码如下:
3.5 SD卡单块数据读写
SPI模式支持单块和多块数据的读写操作,可通过发送相应的命令来实现。读单块数据的操作过程如图4所示。拉低片选后,首先由主控制器 MCF51QE128发送读单块数据命令CMD17,然后等待SD卡的响应。当收到数据块开始标志0xfe后,开始从SD卡读取512字节的数据,最后读取2字节的CRC校验位。
读单块数据的函数代码如下:
写单块数据的操作过程与读操作类似,如图5所示。拉低片选后同样由主控制器MCF51QE128发送写单块数据命令CMD24,SD卡正确响应后发送数据块开始标志0xfe,接着发送512字节数据块和2字节CRC校验。
写入数据后,SD卡会发送1字节的数据响应来反馈数据写入的情况,其格式如图6所示。当数据正确写入SD卡后,数据响应为0x05。最后读数据总线,写数据忙时等待,直到总线为高电平。
写单块数据的函数代码如下:
结 语
SD卡是目前广泛应用的可擦除的大容量存储设备,其接口设计可作为各类
嵌入式
系统中存储单元的一般解决方案。本文结合SD卡标准的相关技术,基于 MCF51QE128微控制器完成了硬件接口和底层通信软件的设计。在此基础上,可进一步构建文件系统,实现对存储数据更有效的管理。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议