基于SPI的SD卡驱动软件设计_第1页
基于SPI的SD卡驱动软件设计_第2页
基于SPI的SD卡驱动软件设计_第3页
基于SPI的SD卡驱动软件设计_第4页
基于SPI的SD卡驱动软件设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、开发案例基于 SPI 的 SD 卡驱动软件设计杨怀德 1,朴希南 2(1. 东莞职业技术学院计算机工程系 , 东莞 523808; 2. 东莞理工学院城市学院 , 东莞 523106 关键词 :SPI ; SD 卡 ; 驱动软件收稿日期 :2011-12-27修稿日期 :2012-01-19作者简介 :杨怀德 (1983-, 男 , 湖北罗田人 , 硕士 , 研究方向为嵌入式通信系统SD 卡是一种基于半导体闪存的新的存储介质 , 广泛地应用在便携式设备上 。 按照 SD 卡规范的描述 , SD 卡提供了两种通信协议 :SD 模式和 SPI 模式 , 驱动可以选择任意一种模式来 实现 。 目前基

2、于 SPI 的 SD 卡驱动研究还比较少 , 研究基于 SPI 总线模式的 SD 卡驱动软件 设计并分析 SD 卡的初始化过程和读写过程 。摘要 :0引 言SD 卡 (Secure Digital Memory Card 是由日本松下 、东芝及美国 Sandisk 公司于 1999年 8月在 MMC(MultiMedia Card 基础上共同研制出来的一种多功能存储 卡 。 SD 卡体积很小 , 重量只有 2克左右 , 但是却拥有大 容量 、 数据传输快 、 极大的移动灵活性和很好的安全性 等优点 , 因此被广泛应用于便携式的设备上 。 SD 卡提 供了两种通信协议 :SD 模式和 SPI 模

3、式 , 可以选择任意 一种模式来实现 , 模式的选择在上电后的第一个复位 命令中进行 , 由主机到 SD 卡的片选信号 (CS 信号 决 定 , 本设计研究的是 SPI 模式的 SD 卡 。 SPI 接口 (SerialPeripheral Interface 是一种全双工的 、 基于字节传输的 同步通信协议 , 芯片管脚上只需要占用 4根线 , 既节约 了芯片管脚 , 又为 PCB 的布局节省了空间 , 简单易用 , 因此越来越多的芯片开始集成这种通信协议 。 SPI 总线 有一个缺陷 , 就是缺乏应答机制以确认是否接收到数 据 。 基于 SPI 模式的 SD 卡驱动 , 每个命令和数据的发

4、 送都包含一个应答 , 用于指示命令或数据传输是否成 功 , 有效地弥补了 SPI 总线传输的缺陷 。1驱动设计1.1SPI 设备驱动框架由于 SPI 总线工作于主从模式 , 因此 , 设备驱动框架中必须包含一个 Master 结构和一个 Slave 结构 。 由于 在一条 SPI 总线上 , 只能有一个 Master 设备 , 但是可以 包含多个 Slave 设备 , 因此 , 通常在使用 SPI 总线传输 的时候 , 我们往往将 Master 当作一个微控制器 , 控制一 到多个 Slave 的数据传输 。SPI 设备驱动框架 , 包含了所有 SPI 设备的注册机 制和设备管理机制 , 以

5、及 SPI 设备的数据传输接口 , 通 过函数指针回调的方式来执行具体硬件相关的处理细 节 。在系统初始化的时候 , 我们需要先在当前处理器 上注册一个 SPI 控制器 , 作为 SPI 总线的主设备 。 然后 当应用程序需要使用 SPI 总线进行数据传输 的时候 , 就可以将数据存储设备作为一个 SPI 从设备注册到主 设备上 , 由主设备控制从设备进行数据传输 。 一个主设 备可以支持多个从设备 , 因此多个 SPI 设备就可以直 接 通 过 该 框 架 注 册 到 SPI 系 统 中 进 行 串 行 数 据 传 输 了 。SPI 总线按照单字节串行传输的方式来传输数据 , 一次只传输一个

6、字节 , 不管是发送还是接收 。 字节传输 时默认按高位在前 , 低位在后的传输方式 , 当然也可以 通过配置相关寄存器以采用低位在前的传输方式 。 但 是有一点需要注意的是 , 在一次数据传输过程中 , 当传 到最后一个字节时 , 最后一个字节的传输必须按照低开发案例2012.02位在前的特殊传输方式 (LST , 以标示本次数据帧传输 的结束 。 由于 SPI 总线采用全双工的通信方式 , 由两条 单向数据线分别担负两个数据传输方向 , 因此数据的 发送和接收可以同时进行 。1.2SD 卡设备驱动(1 SPI 模式下的 SD 卡通信原理在 SPI 模式下 , SD 卡作为一个 SPI 设备

7、连接到 SPI 控制器上 。 在 SPI 模式下 , SD 卡同样拥有四根信号线 :CS (主机到卡的片选信号 、 CLK (主机到卡的时钟信号 、 DataIn (主机到卡的数据信号 、 DataOut (卡到主机的数 据信号 。 SPI 控制器作为该 SPI 系统的主机 , 通过 GPIO 连接 SD 卡的 CS 片选信号来对 SD 卡进行片选 , SD 卡的 时钟由 SPI 控制器提供 。 主机与 SD 卡之间通过 DataIn 和 DataOut 数据线进行数据交换 , 如图 1所示 。图 1SD 卡与 SPI 主机连接示意图在 SPI 模式下 , SD 卡采用 “ 命令 +应答 ”

8、的方式工 作 , 主机发起总线传输时 , 总是假设 CS 信号是低电平 有效的 。 对于每个命令 , SD 卡都会有一个相应的应答 返回 , 即使在传输出错时 , 也会发回一个错误应答 。 同 样的 , 对于每个数据块的传输 , SD 卡都会产生一个特 殊的数据应答 。SD 卡默认工作在 SD 模式下 。 为了使 SD 卡进入 SPI 模 式 , 需 要 在 发 送 第 一 个 RESET 命 令 (GO_I-DLE_STATE命令 , 即 CMD0 时使 CS 片选信号为低电 平有效 。 SD 卡正确响应 RESET 命令之后 , 即进入 IDLE 状态 。(2 SD 卡驱动实现SD 卡采用

9、命令驱动的工作方式 , 通过发送命令和 等待应答来与 SPI 主机进行通信 。 在开始数据传输之 前 , SD 卡也要先发送数据传输命令并等待正确应答之 后 , 才开始传输 。 每个 SD 卡命令都由 6个字节 (48位 组成 , 其中每个位域的含义如表 1所示 。在 SD 卡命令中 , 命令类型通过 command index 字 段来识别 。 在 SPI 模式下 , SD 卡可以不采用 CRC 校验 来保护数据 , 但是命令 、 应答 、 和数据的 CRC 位仍然需 要保留 , 只是传输过程中可以忽略它们 。 不过有两个例 外 :CMD0和 CMD8。 CMD0必须有 CRC 校验 , 因

10、为它是 负责从 SD 模式切换到 SPI 模式的 , 而在 SD 模式下 ,CRC 校验是必需的 。 CMD8用于识别 SD 卡的版本是 1.0还是 2.0, 该命令的 CRC 校验也是必需的 。在 SPI 模 式 下 , 可 以 通 过 CRC_ON_OFF命 令 (CMD59 来打开或关闭 CRC 校验 。 对于每个命令 , SD 卡都会产生一个相应的应答信号 。 SPI 模式下的应答 , 主要有如下几种 :R1、 Rb1、 R2、 R3、 R7、 Data Response 。SD 卡对物理层而言 , 它是一个 SPI 设备 , 与 SPI 总 线相连 , 而对应用程序而言 , 它是一个

11、块设备 , 通过文 件系统实现数据管理 。 因此 , 整个 SD 卡系统呈现一个 典型的分层管理 , 可以分为物理层 、 主机传输层和应用层 , 如图 2所示 :图 2SD 卡系统结构从图 2可以看出 , SD 卡提供给应用程序的读写接表 1SD 卡命令格式趪趹开发案例口 , 主要通过文件系统的相关操作来提供 。 当然 , 应用 程序也可以直接通过 SD 卡驱动程序直接进行卡上二 进制数据的读写 , 但是这毕竟是少数 , 因为这样做会破 坏卡上的文件系统 , 所以通常只有对 SD 卡的读写烤机 测试程序才可能这么做 。 一般的应用 , 还是通过文件系 统操作来读写 SD 卡数据的 。1.3系统

12、流在上层应用中 , 应用程序通过文件系统来对 SD 卡 进行读写操作 , SD 卡作为一个块设备与文件系统进行 交互 。 在底层的读写操作中 , SD 卡则作为一个 SPI 设 备与 SPI 主机进行交互 , 通过 SPI 总线实现主机到卡和 卡到主机之间的数据传输 。 整个流程如图 3所示 :图 3SD 卡读写过程数据流图2SD 卡初始化本设计的 SD 卡驱动 , 必须支持 SD 规范标准 2.0, 并且能够兼容 1.0标准 。 在规范 2.0上 , 定义了两种类 型的卡 :标准容量卡 (存储容量在 2GB 以内 和大容量 卡 (存储容量大于 2GB 并且在 32GB 以内 。 SD 卡的最

13、 大 块 长 度 为 512字 节 , 不 管 CSD 寄 存 器 中 的 READ_BL_LEN字段设置为多少 。 在标准容量卡中 , 如 果 数 据 块 的 partial access 属 性 (CSD 中 的 READ_BL_ PARTIAL 字段 打开的话 , 块长可以在 1个字节到 512字节之间 。 而在大容量卡中 , 一个数据块只能固定为 512字节长度 。 在 SD 卡的初始化过程中 , 就要识别出 卡的规范版本以及卡的类型了 。根据 SD 规范 2.0的描述 , SD 卡上电后的初始化流 程如图 4所示 。SD 卡 上 电 后 默 认 处 于 SD 模 式 , 因 此 在

14、发 送 CMD0进行复位之前 , 必须确保 CS 信号处于低电平有 效 , 这一点由硬件电路设计来保证 。 由于 1.x 版本的 SD 卡无法识别 CMD8, 因此可以通过该命令的应答来识 别出当前 SD 卡使用的规范是 1.x 版本还是 2.0版本 。 对于 2.0版本的 SD 卡 , 在初始化过程中 , OCR 寄存器 需要读两次 , 第一次用于检查支持电压 , 第二次用于判 断卡的类型为标准容量卡还是大容量卡 。 而 1.x 版本的 SD 卡由于不支持大容量卡 , 只需要检查电压即可 。 考虑到在 SD 卡上电初期 , 电压的上升过程大约需 要 64个时钟周期才能达到 SD 卡的正常工作

15、电压 , 这 个过程称为 Supply ramp up time 。 另外 , 还需要大概 10个时钟周期的时间来与 SD 卡进行同步 。 因此 , SD 卡上 电之后 , 至少需要先延迟 74个时钟周期 , 之后才能开 始发送 CMD0进行复位操作和 SPI 模式的选择 。 SD 卡按照上述流程完成初始化之后 , 就可以对 SD 卡进行正常的数据读写操作了 。3SD 卡读写SD 卡驱动最主要的任务 , 就是实现数据的读写操 作 。 由于 SD 卡驱动采用 “ 命令 +应答 ” 的形式和 SPI 主 机通信 , 因此每次数据传输之前 , 都要先发送相应的读 写命令并等待正确应答 , 才能进行数

16、据传输 。 和 SD 卡 读写相关的几个主要命令集中列于表 2:表 2SD 卡数据读写相关命令SD 卡数据传输通过数据令牌 (Data Token 进行 , 所有字节都按照高位在前 (MSB 的传输方式 。 数据令 牌的长度在 4字节到 515字节之间 , 并且按照如表 3格式组织 。对于单块读 、 单块写和多块读命令而言 , 数据令牌 格式如表 3:开发案例2012.02表 3SD 卡数据令牌格式对于多块写命令 , 数据令牌格式则采用如下格式 :对于每一个写入块的第一个字节 , 如果是数据传输则 为 Start Block (0xFC , 如果是停止传输的指令 (CMD12 则是 Stop

17、Tran (0xFD 。 多 块 连 续 写 操 作 的 结 束 , 由CMD12负责 。当读操作发生错误时 , SD 卡会返回一个数据错误 应答来替代 。 这个错误应答只有一个字节 , 高 4位为0, 低 4位指示了一些错误位 , 格式如表 4:表 4数据传输错误应答格式读单块的过程很简单 :首先发送读单块命令 , 正确 应答后则从 SPI 总线接收一个数据块 , 保存在内存缓 冲区中供应用程序使用 。 读多块的过程和这个过程类 似 , 区别在于读多块过程结束后 (或读过程出错时 , 需 要使用 CMD12通知 SD 卡停止数据传输 。写单块的过程比读单块过程 , 多了一个检查数据 应答的过

18、程 , 以便确认数据是否正确写入 SD 卡中 。 写 多块的停止 , 同样通过 CMD12完成 。 在多块数据写入图 4SD 卡初始化流程趪趽开发案例Construction of Library Management System Based on DelphiWANG Cheng 1,ZHAO BI-fang 2(1. Wells Fargo Bank, West Des Moines, 50266,USA ; 2. ASDI Inc, West Des Moines, 50266,USA Keywords:Library Management; Management System; So

19、ftware EngineeringHow to scientifically manage the library is not only related to the knowledge of the convenienceof the reader, is also related to the development of the library, therefore, to develop a compre -hensive library management system will become essential. Describes the environment in th

20、e Borland Delphi 7.0adoption of the top-down master plan, from the bottom up application de -velopment, the strategy development process of this system in details and puts forward informa -tion in library management, resource sharing of basic objectives, so as to promote the pace to -wards the digit

21、al library, and presents system architecture design and functional design, from book storage register to the query view, from the library card issued to borrow books, forming a complete library management system solutions, software engineering from the perspective of a scientific and rigorous elabor

22、ation, and achieves through Delphi.Abstract:Design of SD Card Drive Software Based on SPIYANG huai-de 1,PIAO xi-nan 2(1. Department of Computer Engineering, Dongguan Polytechnic , Donguan 523808;2. College of City, Dongguan University of Technology, Dongguan 523106Keywords:SPI; SD Card; Drive SoftwareSD card is a flash memory storage media based on new semiconductor, widely used in portabledevices. Described in accordan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论