1、电子技术应用 2009 年第 7 期欢迎网上投稿 SD 存 储 卡 (Secure Digital Memory Card)是 为 音 视 频消费 电子 设备的 安全 性 、容 量 、性 能 和 环 境 等 要 求 而 设计的一 种存 储卡 ,其 安 全 系 统 使 用 双 方 认 证 和 “新 的 密码算法 ”技术 ,防止卡中内容被非法使用 。 SD 卡的通信基于一个 9 引脚接口 (时钟 、命令 、4 条数据 线和 3 条电源线 ),可以在最高 25 MHz 频率和低电压范围内工作 。 在便携式监控系统中 ,SD 卡可用来存储监控采集数据 。1 硬件系统设计应 用 于 数 据 采 集 的
2、SD 卡 读 写 控 制 结 构 如 图 1 所示 。 使用 ARM7 芯片 LPC21321控制接 口芯 片 D12 处 理SD 卡存储器 。ARM 处理器 :LPC2132 是基 于一个 支 持 实 时 仿 真 和跟踪 的 16/32 位 ARM7TDMI-S CPU,并 带 有 64 KB 嵌 入的高速 Flash 存储器2。 LPC2132 的实时仿真和跟踪功能方便了代码调试 ,节省了开发成本 。PDIUSBD12 是 一 款 性 价 比 高 的 USB 器 件 , 用 于 控制 系 统 中 与 微 控 制 器 进 行 通 信 的 高 速 通 用 接 口 , 支 持本 地 DMA 传
3、输 。 PDIUSBD12 所 具 有 的 低 挂 起 功 耗 连同 LazyClock 输 出 可 以 满 足 使 用 ACPI、OnNOW 和 USB电 源 管 理 的 要 求 , 低 操 作 功 耗 可 以 应 用 于 使 用 USB总 线 供 电 的 外 设 。 LPC2132 与 D12 连 接 电 路 如 图 2所 示 。2 软件设计软 件 设 计 主 要 包 括 D12 驱 动 、SD 卡 、SPI 总 线 协 议和 SD 卡接口程序设计 。基于 ARM7 的 SD 卡读写控制在数据采集系统中的应用张 华1,吴 欣1,王大星2(1.广东技术师范学院 ,广东 广州 510635;2
4、.广州致远电子有限公司 ,广东 广州 510660)摘 要 : 一个基于 ARM7 的应用于便携式数据采集系统中的 SD 卡读写控制设计 。 描述了基于LPC2132、USB 接口芯片 D12 和 SD 卡的硬件系统设计 , 软件设计主要包括 D12 驱动 、SPI 总线协议实现和 SD 卡接口程序设计等 。关键词 : ARM;USB;SD 卡协议中图分类号 : TP274+.2 文献标识码 : ASD card access based on ARM7 and its applicationin data acquisition systemZHANG Hua1,WU Xin1,WANG D
5、a Xing2(1.Guangdong Polytechnic Normal University, Guangzhou 510635 ,China;2.Guangzhou Zhiyuan Electronic Co., Ltd., Guangzhou 510660 ,China)Abstract: This paper elaborated a design of the SD card data access on ARM7, applied in portable data acquisition system.Italso describes the hardware system d
6、esign based on the LPC2132 ,USB D12 and SD card in detail. The software design mainly in-cludes the D12 drive, SPI protocol and SD interface program and so on.Key words: ARM;USB;SD card protocol图 1 数据采集系统结构简图USB 协 议USB 接 口 芯 片 LPC2132数 据 采 集SD 卡 读 写SD 卡嵌入式技术Embedded Technology38电子技术应用 2009 年第 7 期文 件
7、 名D12HAL.cD12CI.cChap_9.cDescriptor.cD12Driver.c表 1 USB 驱动程序分层结构表简 要 说 明PDIUSBD12 与 MCU 之间的硬件接口PDIUSBD12 命 令 接 口USB 协 议 层USB 协 议 层USB 应 用 层相 关 性与 硬 件 相 关与 硬 件 无 关与 硬 件 无 关与 硬 件 无 关与 硬 件 无 关2.1 D12 驱动的实现USB 协 议 规 定 了 一 些 基 本 准 则 , 每 个 设 备 的 端 点0 都 是 可 用 的 , 属 于 控 制 端 点 。 有 了 这 个 基 本 的 沟 通途 径 ,主 机 就 开
8、 始 通 过 端 点 0 向 设 备 发 出 一 些 获 得 相关 设 备 基 本 状 态 的 命 令 。 这 些 基 本 状 态 可 以 反 映 USB设 备 所 属 的 类 别 及 子 类 , 反 映 配 置 状 态 、 接 口 状 态 和端 点 状 态 , 主 机 按 照 USB 协 议 建 立 设 备 间 数 据 通 道 。主 机 向 设 备 提 出 的 这 些 命 令 实 际 上 是 USB 协 议 中 规定 的 各 种 标 准 请 求 , 设 备 向 主 机 传 送 相 应 的 描 述 符 ,包 括 设 备 描 述 符 、 配 置 描 述 符 、 接 口 描 述 符 、 端 点 描
9、述 符 等 。为 了 使 软 件 可 移 植 性 强 、易 维 护 ,采 用 了 分 层 的 方法编写 PDIUSBD12 驱动程序 。 USB 驱动程序分层结构表如表 1 所示 。硬件接口 (D12HAL.c)包含最底层的函数 。 D12 命令接口 (D12CI.c)实 现 PDIUSBD12 的 命令接 口以 简化 器件的编程 。 该层的函数及其功能如下 :(1)读取芯片 ID 号 :uint16 D12_ReadChipID(void)(2)设 置 地 址 /使 能 :void D12_SetAddressEnable(UINT8bAddress,UINT8 bEnable)(3)设置端
10、 点使 能 :void D12_SetEndpointEnable(UINT8bEnable)(4) 设 置 模 式 :void D12_SetMode (uint8 bConfig,uint8嵌入式技术Embedded Technology39电子技术应用 2009 年第 7 期欢迎网上投稿 bClkDiv)协议层 (Chap_9.c)和 Descriptor.c 用来处理标准的 USB设备请求及特殊的厂商请求 ,如 DMA 等 。 USB 主机通过标准 USB 设 备请 求 , 可设 定和 获取 USB 设备的 有关 信息 ,完成 USB 设备的枚举 。所 有 请 求 都 是 通 过 端
11、点 0 接 收 和 发 送 SETUP 包 完成 的 。 接 收 主 机 SETUP 包 的 函 数 为 ep0_rxdone(), 所 有SETUP 包 都 由 函 数 control_handler() 来 处 理 ,发 送 SETUP包的函数为 ep0_txdone()。SETUP 包的接收和发送通过控制 传 输 结 构 全 局 变 量 CONTROL_XFER ControlData 来 控制 ,它实现了以上 3 个函数之间的通信 。 CONTROL_XFER结构体的定义如下 :typedef struct _control_xferDEVICE_REQUEST DeviceReque
12、st; /USB 设备请求/结构体 ,8 Bunsigned short wLength; /传输数据的总字节数unsigned short wCount; /传输字节数统计unsigned char*pData; /传输数据的指针unsigned char dataBufferMAX_CONTROLDATA_SIZE;/请求的数据 CONTROL_XFER;应 用 层 (D12Driver.c)实 现 PDIUSBD12 的 所 有 功 能 。USB 设备控制驱动 、USB 接口控制驱动和协 议层都 在应用层的控制之中 。 应用层要实现的任务包括 :(1)初始化 PDIUSBD12,包括初始
13、化 PDIUSBD12 的硬件 连 接 、复 位 PDIUSBD12、配 置 PDIUSBD12 的 中 断 服 务程序地址 、初始化应用层相关的全局变量 。(2)编写 PDIUSBD12 中断服务程序 ,PDIUSBD12 几乎所有功能都通过 PDIUSBD12 中断服务程序完成 。因此中断服务程序是应用层的核心部分 ,也是本驱动程序的核心部分 。 它要完成以下任务 :控制端点数据接收与发送中断服 务程 序 ,负责 处理控制传输的有关工作 ;端点 1 和端点 2 数据接收与发送中断服务程序 ;USB 总线挂起 、复位 、DMA 结束中断服务程序 ;用户读写端点 1 和端点 2 的 API 函
14、数 ;传 输 控 制 处 理 任 务 ,该 任 务 用 于 处 理 枚 举 、标 准任务请求 、厂商请求等传输控制 。2.2 SD 卡总线协议的实现SD 存 储 卡 系 统 定 义 了 SD 和 SPI 两 种 通 信 协 议 ,应用时可以选择其中一种模式 。 SD 卡能使用 两种 总线 协议 ,因此涉及到协议选择问题 。 SD 卡总是在 SD 模式下被唤醒 , 如果系统想要使用 SPI 模式来 对 SD 卡 进行操作 ,则 系 统 应 该 在 向 SD 卡 发 送 复 位 命 令 (CMD0)期 间 ,保 持 CS 信 号 有 效 (低 电 平 ), 这 样 SD 卡 将 进 入 SPI 模
15、式 。 如果想从 SPI 模式切换回 SD 模式 ,只能对卡掉电再上电 。 图 3 为 SD 卡读写操作图 。2.2.1 SD 总线SD 总线上 的 数 据 通 信 是 基 于 以 起 始 位 开 始 、 以 停止位结束的数据位流 。命令 :命令是启动一 项操 作的 令牌 。 命 令可 以从主机发送到一张卡 (寻址命令 )或发送到连接的所有卡 (广播命令 )。 命令在 CMD 线上串行传输 。响应 :响应是从被寻址的卡或 (同时 )从 所有 连接的卡发送到主机 ,作为对接收到的命令的回答的令牌 。 响应在 CMD 线上串行传输 。数据 :数据可以从卡发送到主机或者相反 。SD 存储卡 的数 据
16、 传 输 通 过 块 的 形 式 进 行 。 数 据 块后面通常有 CRC 位 ,它定义了单块和多块操作 。 在快速写操作中使用多块操作模式 最理想 。 当 CMD 线 出现停止命令时 ,多块传输结束 。 主机可以配置数据传输是使用一条还是多条数据线 。 SD 模式读操作如图 3(a)所示 。2.2.2 SPI 总线SPI 信 道 是 面 向 字 节 的 。 每 个 命 令 或 数 据 块 都 由 8位的字节组成 ,而且字节与 CS 信号对齐 (即长度是 8 个时钟周期的倍数 )。 与 SD 协议相似 ,SPI 报文由命令 、响应和数据块令牌组成 。 主机和卡之间的所有通信都由主机控制 。 主
17、机通过将 CS 信号置低电平启动总线处理 。SPI 模 式 中 的 响 应 行 为 在 以 下 三 个 方 面 与 SD 模 式不同 :(1)被选中的卡总会响应命令 。(2)使用两种新的响应结构 (8 bit 和 16 bit)。(3)当卡遇到数据检索错误时会用错误响应 (替代要求的数据块 ),而不是用 SD 模式中的超时响应 。SPI 模式支持单块和多 块的 写命 令 。 在接 收有 效的写 命令 前 ,卡 会 用 响 应 令 牌 响 应 ,并 等 待 主 机 发 送 数 据块 。 CRC 后缀 、块的长度和起始地址的限制都与读操作相同 。 SPI 模式写操作如图 3(b)所示 。在接收到数
18、据块后 ,卡会 用数 据响应 令牌 响应 。 如果数据块被无错接收 ,它将被烧写 (/编程 )到卡中 。 在卡烧写 (/编程 )期间 ,卡会向主机发送连续的忙令牌流 (有效地保持 DataOut 线为低电平 )。 SPI 模式写操作函数如下 :/*函数名称 :SD_Write_BlockData()*功能描述 :写块数据*入口参数 :wrbuf 写缓冲区 m=0 写单块 m=1 写多块*出口参数 :操作是否成功*/uint8 SD_Write_BlockData(uint8*wrbuf,uint8 m)SPI_CS_Assert();if(m=0)SPI_Send_Byte(SD_TOK_WR
19、ITE_STARTBLOCK);/发写单块令牌else嵌入式技术Embedded Technology40电子技术应用 2009 年第 7 期SPI_Send_Byte(SD_TOK_WRITE_STARTBLOCK_M);for(i=0;i8) & 0xFF); /发校验和SPI_CS_Deassert();if (SD_WaitBusy() ! = SD_NO_ERROR)return TIMEOUT_ERROR; /*写 入 超 时 writetime out*/elsereturn SD_NO_ERROR;该 函 数 在 发 送 写 命 令 后 被 调 用 。 首 先 根据 用 户 请
20、 求 ,向 SD 卡 发 送 写 单 块 还 是 写 多 块的 令 牌 , 随 后 将 数 据 跟 在 令 牌 后 面 发 到 SD卡 。 在 发 送 完 毕 后 调 用 SD_WaitBusy()函 数 ,用以 等 待 SD 卡 写 完 成 。 如 果 超 时 就 返 回 一 个 错误 代 码 。2.3 SD 卡接口及初始化程序设计SD 卡通过卡座与 MCU 连接 , 卡座连线如图 4 所 示 。 J12 为 卡 座 ;CMD/DI 和 DAT0/DO两 条 数 据 线 分 别 接 上 拉 电 阻 , 确 保 数 据 稳 定 ;CARD_INSERT 为 卡 完 全 插 入 卡 座 检 测
21、线 , 为 高 电 平 时表 明 无 卡 ;CARD_WP 为 写 保 护 检 测 脚 , 高 电 平 时 表 示卡 被 写 保 护 ;DAT3/CS 为 SD 卡 使 能 引 脚 ,低 电 平 时 卡被 选 中 , 使 用 SPI 总 线 方 式 ;DAT1/IRQ 和 DAT2 通 过电 阻 接 地 ,SD 卡 的 电 源 不 直 接 与 3.3 V 相 连 ,MUC 可以 通 过 IO 口 来 控 制 是 否 为 SD 卡 供 电 , 这 样 可 以 方便 地 对 SD 卡 进 行 重 起 操 作 。根 据 大 容 量 传 输 协 议 的 需求 ,对 SD 卡 的 操 作 只 需 要 实
22、 现卡的初始化 (包括进入 SPI 模 式并 获 得 卡 的 有 关 信 息 );向 卡 发命 令 ;向 卡 指 定 地 址 写 数 据 ;从卡指定地址读出数据 。 SD 卡初始 化 程 序 的 调 用 建 立 在 SPI 接口已初始化的基础上 。为 了 可 以 兼 容 MMC 卡 ,在初 始 化 的 过 程 中 必 须 把 SPI 时钟设置为低于 400 kHz,在初始化结束时 ,再恢复到 SPI 的最大 时钟 速 率 。 这 个 时 钟 速 率 应 该 低于 CSD 寄 存 器 中 TRAN_SPEED字段的值 。在 ARM7LPC2132 嵌 入 式 控制器硬件平台上 , 实现了对 SD
23、卡 的 读 写 控 制 、D12 驱 动 , 在 SD 和 SPI 总 线 协 议 方 式下 , 提供相 关的 硬件 设 计 和 SD 卡 接 口 程 序 设 计 方 法 ,为数据采集系统中的数据存储提供了一种方便 、可靠的方案 。参考文献1 周立功 ,张华 .深入浅出 ARM7LPC213X/214X(上 )(下 ).北京 :北京航空航天大学出版社 ,2006.2 周立功 .ARM 嵌入式系统基础教程 .北京 :北京航空航天大学出版社 ,2005.3 周立功 .PDIUSBD12 USB 固件编程与驱动开发 .北京 :北京航空航天大学出版社 ,2003.(收稿日期 :2009-04-29)嵌入式技术Embedded Technology41