logo资料库

基于ARM7的SD卡控制器的设计.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
· 16· 仪 表 技 术 2009年 第 2期 基 于 ARM7的 SD卡 控 制 器 的设 计 高 学 军 ,王 君 (三峡 大 学 电 气信 息 学院 ,湖 北 宜昌 443002) 摘 要 :针 对起 重机 限量 仪 需 对 数 据 大 量存 储 和 交换 的要 求 ,提 出 了一 种新 的 方案 。该 方 案 选 用 LPC21 38高 性 能 处 理 器 作 为 主 控 制 器 ,采 用 SPI模 式 读 写 sD卡 ,并对 相 应 的文 件 进 行 系统 设 计 。 文 章 首 先介 绍 sD卡 的 接 口 电路 ,然后 介 绍 ARM7对 SPI协 议 下 的 SD 卡 的 底层 读 写操 作 ,最后 给 出相 应 文 件 系统 的 编 写 方 案 。 关 键 词 :ARM7;SD卡 ;SPI协 议 ;FAT16 中 图 分类 号 :TM930 文献 标 识 码 :B 文 章 编 号 :1006—2394(2009l02—0016—03 Design of SD H ost ControUer Based on ARM 7 GA0 Xue.jun.WANG Jun (College of Electrical Engineering& Information Technology,Three Gorges University,Yichang 443002,China) A bstract:In order to m eet the requirem ent of the huge data memory and exchange of the overloader limiter,a new method is given in the paper. The m ethod takes LPC2138 high·perform ance processor as the center controller. It reads and writes SD card by SPI protocol and gives the system design. At first,the interface circuit of the SD card is intro. duced. And then, the operations of the bottom reading ·and writing of the SD card are discussed. At last. a method according to the file system is proposed. K ey words:ARM 7;SD card; SPI protocol; FAT16 ∞赢 、 1 MCU 与 SD 卡 的 接 口 电路 2SJ355,由 LPC2138 的 P0.17进 行 控 制 。 当 P0.17输 出高 电平时 ,2SJ355关 断 ,不 给 卡 供 电 ;当 P0.17输 出 接 口电路采 用 的 是 Philips公 司 的 LPC2138微 处 低 电平 时 ,2SJ355开通 ,给 SD卡供 电 。 理 器 。它 除 了 比普 通 的 8051有 更 快 的 指 令 执 行 周 期 1.3 卡 检 测 电路 外 ,还提供 多 种 在 片 的 硬 件 接 口功 能 ,如 UART、SPI、 卡检测 电路包 括 两个 部 分 : 是 否 完全 插 入 到 卡 I C等 ,因此用 LPC2138的 SPI接 口可 以很 方 便 地 与 座 中和卡是 否写保 护 。检测 信号 由卡座 的两个 引脚 以 SD卡 互 连 。原 理 图 如 图 l。 电平方 式输 出。当卡 插 入 到卡 座 并 插 入到 位 时 ,由于 1.1 SPI总 线 如 图 l,LPC2138SP10接 口的 P0.4, P0.5,P0.6直 接 连 接 到 卡 座 的 相 应 接 口 ,为 了使 电 路 可 以 与 SD 卡 接 口兼 容 ,SPI的 两个 数 据线 P0.6和 P0.5需 要 分 别 接 上 拉 电 阻 。 片 选 信 号 使 用 PO.18。SPI模 式下 没 有用 到 的信 号 线 DAT2和 DAT1分别接 下拉 电阻 。 1.2 卡 供 电 控 制 P0.17I SD PoW ER P0.18 PO.6 LPC2138 P0.4 P0.5 P0.19 P0.29 R22 47k 几 卡的 供 电 采 用 可 控 方 式 ,这 是 为 VDD 了防止 SD卡进 入不 确定 状 态 时 ,可 以 通 过对 卡重 新上 电使 卡 复 位 而无 需 拔 出 卡 。 可 控 电 路 采 用 P 型 MOS 管 收 稿 日期 :2008—08 lo0 R29 [=] lOO 图 1 9 JP4 _●^ ●____ _____ _●-。。。 。。。_- _____ _____ __-’— — 1DAT2 {DAT3,CS ICMD/Dl lVSS1 1VDD {CLK/SCK lVSS2 IDATO/DO ¨)AT1/IRQ {CARD INSERT lGND {CARD WP L————=———一 SD CAR D 作 者 简 介 :高 学 军 (1966~ )男 ,副 教 授 ,研 究 方 向 为计 算 机 控 制 、电 力 电 子 与 电磁 兼 容 ;王 君 (1982一 ),女 ,在 读 硕 士 。
2009年第 2期 仪 表 技 术 ·17· 卡座 内部触点 连接到 GND,P0.19为低 电平 ;当卡拔 出 对 SD卡 的 基本 读 写操 作命 令 有 :数 据块 读 命 令 时 ,该 引脚 由电阻 R26上拉 为高 电平 。 READ— BLOCK(CMD17)、多 数 据 块 读 命 令 READ~ 卡 是否写保 护的检测 原理 与卡是否完 全插 入到卡 M ULTIPLE— BLOCK(CMD18)和 数 据 块 写 命 令 WRITE~ 座 中 的 检 测 原 理 相 同 。 2 SPI模 式 下 对 SD 卡 的 操 作 2.1 SPI模式下 对 SD卡的操作原 理 对 SD卡 的操 作都是 由一些命 令来 实现 。所 有 的 BLOCK(CMD24)、多数 据块写 命令 WRITE—MULTIPLE ~ BLOCK(CMD25)。 在 应 用 时 ,可 以 连 续 发 送 6个 字 节来 实现上 述 的命 令格式 。 3 应用 于起重机 限量仪 的 SD 卡 文件 系统设计 命令都 是 由 48个 数据位组 成 ,其结 构如表 1所示 。通 单 片机对 SD底 层 的读 写 ,按 照 FAT16的格 式 对 过 向 SD卡发送相 应的命 令并 读取 相应 的响应 来 实现 SD卡上 数 据 进 行操 作 ,就 可 在 SD卡 上 创 建 文件 、读 对 SD卡 的控 制 。在对 SD卡读 写 之前 ,首先 要进行 初 写 文件和删 除文件 等 ,从 而实 现 文 件 的管 理 。要 使 写 始化操 作 ,这是 确保 SD卡 能在 SPI模式 下进行 正常数 入 SD卡 的数 据在 Windows下访 问 ,需 要在 SD卡上 创 据读写 的前 提 。需 要 注 意 的是 ,在 发 送 使 SD 卡空 闲 建 Windows支 持 的 FAT16文 件 系 统 。 SD 卡 上 的 命令 CMD0之前至少 等待 74个 时钟 ,确 保 SD卡 进入 FAT16文件 系统 的结 构包 含分 区引 导记 录 、文件 分 配 SPI模 式 。初 始 化 完 成之 后 ,如果 使 用 默 认 的块 读 写 表 、文件 目录表 以及 数据 区 4个部分 。 长 度 5l2字 节 ,就 可 进 行 SD 卡 的 读 写 。 当 然 ,也 可 用 此文 件系统 是在周立 功公 司开 发 的 ZLG/FS文 件 CMD16来 设 置 SD 卡 的 块 读 取 长 度 ,可 以 是 l~5l2字 系 统 的基 础 上 进 行 剪 裁 ,从 而 大 大 减 少 了 额 外 的开 销 , 节之 间的任 意值 ,但 是 对 SD 的写 过 程 则 要 求块 长 度 必须 为 512字 节。无 论 是 MMC卡 的读 还 是 写 ,都 要 求在 读写 命令 发送后 有数 据起 始令 牌 FEH,数据 传输 使 剪裁过 的文件 系统结构 简单 、容易维护 ,能够满 足上 位 机数据 积 累 和 软 件 分析 的需 要 。另 外 需 要 注 意 的 是 ,在 fat.h中 默 认 的 MAX—DISK—CACHES值 为 200, 结束 之后有 2个字节 的循环冗余 编码 CRC(Cyclic Re. 本 设 计 取 MAX—DISK—CACHES:48。 dundancy Codes)。 为 了能 使 文件 系 统识 别 并 操 作 SD 卡 ,就需 要 编 表 1 SD 卡 命令 格 式 写 相应 的接 口驱 动函数 ,下面 的代 码就是基 于 ZLG/FS 位 标识 47 46 [45:40] [39:8] [7:1] O 文件 系统操 作 SD卡的接 口驱动 函数 。 uint16 SDCammand(uint8 Cammand.void Parameter) 宽 度 (位 ) 1 1 取 值 ‘0’ ‘1’ 6 × 32 7 l × ‘1’ uintl6 rt; 描 述 起 始位 传 输 位 命 令 序 号 命 令 参 数 CRC7 停 止 位 Disk — RW _ Parameter Dp; Dp= (Disk—RW —Parameter})Parameter 2.2 SPI模 式 下 SD卡 的 操 作 流 程 如图 2所示 ,上 电后 ,SD卡 自动进入 SD模式 。单 OS— ENTER— CR~ICAL(); /{关 中断 ,根 据 需 要 添 加 / / 可选 命 令 如 果 没 有 实现 ,则 rt=BAD—DISK—COMMAND / 片机 此时使 cs信号 为低 电平 ,并 向 SD卡发 送 RESET switch(Cammand) 命令 (CMD0),如果 SD卡 有 OxO1作 为 响 应 ,则 表 明 SD卡进入 SPI模 式 下的 Idle状 态 。在等待 至少 74个 . 时钟 周期 后 ,向 SD 卡发 SEND—OP—COND(CMD1)命 令 ,当轮询到 SD卡 的响应为 OxO0时 ,说 明 SD卡 已经 准备 好接收读 写操作 了 。 — Id le St ate _ SPI ( 模 式 ) : 匝 叵亟j== 匦巫卜+}. case DISK — INIT: / 初 始 化 驱 动程 序 ,必 须 实现 / if(SD—Initialize()==0) rt= DISK— INIT — OK ; else rt= DISK — INIT — NOT ~ OK ; break; case DISK — CLOSE : / 关 闭 驱 动程 序 ,必 须 实 现 / rt= DISK— RETUR N — OK ; break; case D ISK — READ — SECTOR : if(SD—ReadBloek (Dp一>Sectorlndex,Dp一>Buf):=0) rt= DISK— READ — OK ; else
· 18· 仪 表 技 术 2009年第 2期 rt: DISK— READ— NOT— OK ; / 读 物 理 扇 区 ,必 须 实 现 +/ / Dp一>Buf:存 储 读 到 的数 据 }/ /}Dp一>ScetorIndex:物 理扇 区索 引 ·/ /·开 中断 ,如 果 前 面使 用 了 OS—ENTER—CRITICAL(),则 添加 ·/ return rt; / rt= DISK— READ— OK或 DISK—READ—NOT—OK}/ 4 小 结 break; case DISK — W R ITE— SECTOR : if(SD—WriteBlock(Dp一>SectorIndex,Dp一>Buf)==0) rt= DISK— W RrrE — OK ; else rt= DISK — W RITE— NOT — OK ; / 写 物理 扇 区 ,必 须 实 现 ·/ / Dp一>Buf:需 要 写 的数 据 ·/ 通 过对 SPI模式下 SD卡读 写和 文件 系统 的研 究 , 实 现 了单 片 机 对 SD卡 FAT16文 件 的 管 理 ,包 括 文 件 的创 建 、读写 、删除 等操作 。该 方法 为数据采 集 系统提 供 了一种 非易 失性存 储器 的解决 方案 。本文 的创新 点 是 采 集 到 的数 据 会 以标 准文 件 的 格 式 记 录 到 SD 卡 上 ,数据 文件 可在 Windows下用 读卡 器读取 ,在保 证高 /}Dp一>SectorIndex:物理 扇 区索 弓I / 性价 比的 同时 ,又方 便 了数 据 的进一 步分析 、处理 。并 / } rt= DISK— W RITE — OK或 DISK—WRITE—NOT~OK·/ 且 SD卡存 储 容量 大 ,而且 价 格 相 比其 他 的 存 储 器 要 break; case DISK — DRIVER— VER : Dp 一> SectorIndex :110 rt: DISK — RETURN— OK break; case DISK— CHECK— CM D : rt: DISK — FALSE : 便宜 得多 。此控 制器 已成 功地应用 到大 型起 重机 的数 据记 录 ,效 果非 常好 ! 参 考文献 : [1]周 立 功 ,等 .ARM 嵌 入 式 系统 软 件 开 发 实 例 [M].北 京 :北 京 航 空航 天 大 学 出 版社 ,2006. [2] SanDisk Secure Digital Card Product Manual[z].USA: / 以下 那 个 命令 没 有 实 现 就 注 释掉 相 应 的语 句 +/ SANDISK CORP0RAT10N .2004. if((Dp一>SectorIndex==DISK—INIT ) l1(Dp一>SectorIndex=:DISK—CLOSE) fl(Dp一>SectorIndex==DISK—READ—SECTOR) II(Dp一>Seetorlndex==DISK—WRITE—SECTOR) iI(Dp一>SectorIndex:=DISK—DRIVER~VER) ll(Dp一>SectorIndex=:DISK—CHECK—CMD) ll(Dp一>Sectorlndex:=DISK_GET_SECTOR_NUMBER) [3]周立 功 ,等 .ARM 嵌 入 式 系 统 基 础 教 程 [M].北 京 航 空 航 天 大 学 出 版社 ,2005. (丁云 编发 ) (上接 第 l5页 ) Il(Dp一>Sectorlndex==DIsK-GET-FrrESJlER-sECTOR) 表 1 标 准含 水 率 与 测 得 的 含 水 率 之 间 的 比 较 ) rt= DISK— TRUE; break; case D ISK — GET— SECTOR— NUM BER : / 获 得 设 备 总 扇 区数 ,可 选命 令 / //Dp一>SeetorIndex=有 效 的 物 理扇 区总 数 ; Dp 一> Seetorlndex : sds.block— n B m ; n = DISK— RETURN— OK ; break; case DISK— GET— BYTES— PER— SECTOR : /+获 得 每 扇 区 字节 数 ,可 选 命 令 +/ //Dp一>Sectorlndex=每 扇 区 字节 数 ; Dp 一> SectorIndex = sds.bloc k— len; rt: DISK— RETURN— OK ; break; defauh. rt= BAD— DISK— COM M AND ; break; 标 准含 水 率 测 量 含 水 率 标 准 含 水 率 测 量 含 水 率 l% 0.95% l0% 9.92% 2O% 40% 60% 2O.O2% 3O% 30.O5% 39.97% 50% 50.04% 60.08% 70% 69.98% 80% 80.O6% 90% 89.94% 由表 1可以看 出 ,模 拟实验 中 ,测得 的含水 率和标 准含水 率相 比,最 大误 差不 大 于 0.1% ,测 量接 近 实 际 值 ,与 传统 的测量 模式 相 比 ,大 大 提 高 了测 量 精度 ,具 有较好 的应 用价 值 。 参 考 文 献 : [1]徐科 军 .传 感 器 与 检 测 技 术 [M].北 京 :电 子 工 业 出 版 社 , 2004. [2]王 进 旗 ,强 锡 富 .新 型 油 井 含 水 率 测 量 仪 的 研 制 [J].仪 表 技术 与传 感 器 ,2003,(7). [3]龙 海 南 ,张 莉 莉 .AD7745型 高 精 度 电 容数 字转 换 器 [J].国 外 电 子元 器件 ,2006,(8). OS — EXIT — CRITICAL(); (许雪 军编 发 )
分享到:
收藏