基于STM32 DIO接口驱动SD卡的设计(上)

  作者:​陈启武 王飞 袁彬 时间:2017-03-06来源:电子产品世界

引言
     随着铁路货运速度的提高,时速160km/h的快速货车运 行安全智能监测系统已成为研究的重要课题。由于货车具有 运行周期长的特点,监测系统采集到的各种实时的数据, 包括防滑控制、轴温预警、列车定位、转向架失稳等信息, 需要大量的存储空间。主控制器采集到这些数据后,需要通 过存储卡将数据保存下来,然后通过GPRS无线模块读取卡 数据信息发送到通用计算机上,以作进一步的分析和处理。 目前常用的存储器有 U 盘、FLASH 芯片、SD 卡等。SD卡是 一种容量大(最大可达32GB)、性价比高、体积小、访问 接口简单、易于集成的存储卡,采用SD卡可解决上述采集 数据的存储和传输问题;采用ARM Cortex ™-M3内核的32位 微控制器STM32F103作为主控制器,STM32F103 自带标准 的SD卡接口,使用其自带的SDIO接口驱动,在4位SD模式 下,最高通信速度可达 24MHz,最高每秒可传输12M字节数 据,可快速地实现对SD卡的访问。

1  硬件功能原理与设计
1.1  SD卡简介
S D 卡 ( S e c u r e  D i g i t a l Memor y Card) 是一种基于半 导体闪存工艺的存储卡,它的 外形和接口如图1 所示。 S D 卡 有 9 个 引 脚 与 外 部 通 信 , 支 持 SPI和SDIO两种模式, 不同模 式下,SD卡引脚功能描述如表1所示。在具体的通信过程中,主机只能选择一种通信模式。

图1  SD卡的外形和接口
主控制器STM32F103可支持SDIO模式,在该模式下,CS为主控制器向SD卡发送的片选信号,CMD为主控制器向SD卡 发送的命令/响应信号,CLK为主控制器向SD卡发送的时钟 信号,DAT0、DAT1和DAT2分别为SD卡的3个数据线。
SD卡的内部结构如图2所示,SD卡内部不仅有大量的 存储单元,还具有卡接口控制器、寄存器以及SDIO和SPI两 种模式的对外接口等。外部主控制器并不直接访问卡内存储 单元,而是通过卡的接口控制器与存储器单元接口相连来访 问卡的外部信号线。卡内存储单元的读、写、擦除等操作由 卡接口控制器根据主控器发出的命令自动处理完成,而主控 制器无需知道卡内如何操作、管理存储单元,这将大大降低 主控制器对存储器操作的负担。SD卡内部有6个寄存器,其 中四个信息寄存器用来设置和保存卡的关键信息,另外两个 状 态 寄 存 器 用 来配 置 和 操 作 卡 当 前的状态。
1.2  SDIO接口
原理
S   D   I   O( S e c u r e D i g i t a l I n p u t    a n d O u t p u t ) , 即 安全 数 字 输 入 输 出接口。 它由SD存 储 卡 的 规 范 发 展 而 来 , 在 机 械 、 电 路 、 功 耗 、 信 号 与 软 件 上 与 多

图2   SD卡的内部结构

表1   SD卡在不同模式下的引脚定义
种存储卡完全兼容,可支持多媒体卡(MMC卡)、SD存储卡、SDIO卡;并且可扩展性较强,可以连接多种SDIO接口 设备,如蓝牙、WIFI、GPRS、照相机等。SDIO与SD卡规范 的一个重要区别是增加了低速标准,以最小的硬件开支支持 低速I/O数据传输能力。
STM32F1的 SDIO控制器包含2个部分:SDIO 适配器模 块和 AHB 总线接口,其功能框图如图3所示。SDIO_D[7:0] 为SDIO数据总线,如果一个 SD卡接到了总线上,可以通过 主机配置数据传输方式使用SDIO_D0或SDIO_D[3:0],所有 的数据线都工作在推挽模式。复位后默认情况下,SDIO_ D 0 用 于 数 据 传 输 , 初 始 化 后 主 机 可 以 改 变 数 据 总 线 的 宽 度,采用4位总线SDIO_D[3:0]传输数据。
SDIO_CMD为命令/响应接口。SDIO的命令分为应用 相关命令(ACMD)和通用命令(CMD)两部分,发送应 用相关命令之前必须先发送通用 命令。每发送一个命令, SD卡都会给出一个应答,以告知主机该命令的执行情况或 返回主机所需的数据,这个应答我们称之为响应,响应也在 SDIO_CMD线上串行传输。STM32F1的 SDIO 控制器支持 2 种响应类型,即:短响应(48位)和长响应(136位),这 两种响应类型都带 CRC 错误检测。
SDIO_CK为卡时钟输出接口。根据卡类型的不同,可 能有好几个区间,这就涉及到时钟频率的设置,SDIO_CK 与 SDIO适配器时钟(SDIOCLK)的关系为:
SDIO_CK=SDIOCLK/(2+CLKDIV)
上式中,SDIOCLK 为SDIO挂接在AHB总线上的接口时 钟(对于STM32F1系列是72MHz);CLKDIV 则是时钟分频 系数,可以通过SDIO的 SDIO_CLKCR 寄存器进行设置(要 确保SDIO_CK不超过卡的最大操作频率)。
1.3  硬件连接
主 控 制 器 选 用 大 容 量 、 增 强 型 的 芯 片 STM32F103ZET6,其与SD卡座的电路连接图如图4所示。 SDIO_D0(PC8)、SDIO_D1(PC9)、SDIO_D2(PC10) 和SDIO_D3(PC11)这4个引脚接上拉电阻,通过3.3V的电
源给SD卡端提供灌电流,从而提高STM32F103ZET6芯片的

图3    STM32F1的SDIO控制器功能框图

图4  STM32F103ZET6与SD卡座的电路连接图 驱动能力;
SDIO_CK(PC12)直接与卡的CLK端相连,用 于向SD卡发送时钟信号。除了SDIO接口的连接外,还有两根控制线:SD_CD(PD5)用于检测SD卡接口与卡座是否接好,若完全接好则该引脚为低电平,否则为高电平;SD_ WP(PD6)用于检测SD卡当期是否设置写保护,写保护时 该引脚为高电平,否则为低电平。

2  软件设计
软件设计主要包括硬件层配置以及驱动层配置。硬件 层配置主要包括配置SD I O 相关寄存器、 识别卡类型、 获 取卡信息,实现对SD卡的初始化;驱动层配置主要是利用 SDIO接口驱动SD卡进行读、写操作。利用ST官方提供的固 件库函数可大大提高软件设计的效率,STM32F1 的 SDIO 相 关操作的函数分布在源文件 stm32f10x_sdio.c 以及对应的头 文件 stm32f10x_sdio.h 中。(未完待续)

关键词: STM32 DIO SD卡

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版