目录
一、关于SD卡
1.简介
SD(Secure Digital Memory Card)卡与U盘生在同年,可以称为表兄弟,也是一种基于半导体快闪记忆器(Nand Flash)的记忆设备,只是接口不同,为9 Pin接口。SD卡家族有三个兄弟,他们除了外表尺寸不同外,实质上完全一样。普通SD卡标准为24mm×32mm×2.1mm,MiNi SD卡标准为20mmX21.5mmX1.4mm,Micro SD卡(T-Flash卡)标准为15mm x 11mm x1mm 。
图 SD/Mini SD/Micro SD
SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制,2000年成立了SD卡协会,东芝一直走在SD卡最前沿。近年来,SD卡逐渐在卡的混战中胜出,广泛应用在数码相机、GPS、DV等媒体设备中。
随着数码产品体积的要求,2003年SD卡组织发布了MiNi SD卡标准,配有卡套可转接成标准SD卡接口,Mini SD卡组成、接口及功能与SD卡完全相同,但面积为SD卡的37%。MiniSD卡还未及普及开来,就被随后出来的Micro SD卡所取代。
2004年由Motolola和Sandisk共同创造的T-Flash卡,以更小的体积受到手机的青睐,之后被SD卡组织纳入SD卡系列,并更名为Micro SD。该卡15mm x 11mm x1mm的体积,约为SD卡的1/4,只有指甲大小,当之无愧的成为现时最小的存储卡。该卡一经面市,立即受到手机等更高空间要求的数码产品关注,其中Motolola为首家采用该卡的手机公司。
- 从技术层面看,SD卡、Mini SD卡和Micro SD卡的构成是完全一样的,主控制器芯片往往共用同一颗,只是外形物理尺寸不同而已。Mini和Micro通过转接卡套可以直接当普通SD卡使用,转接卡套只是单纯物理连接线上的转换。
- 从封装技术上看,SD卡最为简单,内部采用封装后的标准芯片贴片生产,然后使用超声波塑封外壳,而Micro SD卡受限于体积,内部主控和Nand Flash均采用晶圆体绑定后直接封装成卡,因此加工难度较大,大部分都在台湾封装生产。
- 从市场容量看,Micro SD卡的市场容量要远远大于SD卡,因为其直接和手机量绑定。
2.SD卡的寄存器
SD卡总共有8个寄存器,用于设定或表示SD卡信息。
这些寄存器只能通过对应的命令访问,SDIO定义64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。
名称 | bit宽度 | 概述 |
---|---|---|
CID | 128 | 卡识别号(Card identification number):用来识别的卡的个体号码(唯一的) |
RCA | 16 | 相对地址(Relative card address):卡的本地系统地址,初始化时,动态地由卡建议,主机核准 |
DSR | 16 | 驱动级寄存器(Driver Stage Register):配置卡的输出驱动 |
CSD | 128 | 卡的特定数据(Card Specific Data):卡的操作条件信息 |
SCR | 64 | SD配置寄存器(CD Configuration Register): SD卡特殊特性信息 |
OCR | 32 | 操作条件寄存器(Operation conditiongs register) |
SSR | 512 | SD状态(SD Status): SD卡专有特征的信息 |
CSR | 32 | 卡状态(Card Status):卡状态信息 |
3.SD卡读取与写入(SPI模式)
1、发送CMD17;
2、接收卡响应R1;
3、接收数据起始令牌0XFE;
4、接收数据;
5、接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉。
6、禁止片选之后,发多8个CLK;
以上就是一个典型的读取SD卡数据过程,SD卡的写于读数据差不多,写数据通过CMD24来实现,具体过程如下:
1、发送CMD24;
2、接收卡响应R1;
3、发送写数据起始令牌0XFE;
4、发送数据;
5、发送2字节的伪CRC;
6、禁止片选之后,发多8个CLK;
以上就是一个典型的写SD卡过程。
二、实验操作
1.仪器
- STM32F103C8T6
- SD卡模块
- USB TO TTL
- 串口调试助手
- 杜邦线
2.代码
代码是参考其他大神的
STM32用cube配置FATFS模式下SPI读写SD卡
链接:https://pan.baidu.com/s/1wUKjH54Kc0Ne6lUNM-leoQ
提取码:xlp5
笔者还写不出完整的SD卡读取程序,借用来学习,并做了些修改:
编译运行生成hex文件
3.连线
连线是基于代码来连接的,如下所示
STM32 | SD卡模块 |
---|---|
PA4 | SDCS |
PA5 | SCK |
PA7 | MOSI |
PA6 | MISO |
5V | VCC |
GND | GND |
STM32 | USB TO TTL |
---|---|
5V | 5V |
GND | GND |
PA9 | RXD |
PA10 | TXT |
注意:
- 接线很不稳!
- 确保SD卡格式化成FAT文件模式(sd卡插入读卡器连接电脑)
4.烧录程序
用mcuisp烧录hex进入单片机
5.串口调试助手初始化并写入文件
如果连接稳定的话,如果连接稳定的话,如果连接稳定的话,如果连接稳定的话,如果连接稳定的话,
(重要的事情说五遍,出现的初始化失败,或者只显示mian都是因为连接不稳!)
初始化成功的显示如下:
6.sd卡里hello文档的确认
sd卡插入读卡器连接电脑,打开sd卡里的hello文档,如果前面操作一切正确,并且代码没有出错,正确结果就如下所示:
三、总结
本次对SD卡的数据读取实验,回过来看并不困难,主要问题就是连线要接稳,代码要写对!