SD卡操作

版权声明:本文为博主原创文章,未经博主允许不得转载。博客搬迁至https://winddoing.github.io https://blog.csdn.net/u011037149/article/details/50967380

介绍

SD 卡是基于 flash 的存储卡。
SD 卡和 MMC 卡的区别在于初始化过程不同。
SD 卡的通信协议包括 SD 和 SPI 两类。
SD 卡使用卡内智能控制模块进行 FLASH 操作控制,包括协议、安全算法、数据存取、 ECC 算法、缺陷处理和分析、电源管理、时钟管理。

特点

1) 主机无关的 FLASH 内存擦除和编程
读或写数据,主机只要发送一个带地址的命令,然后等待命令完成,主机无需关心具体操作的完成。当采用新型的 FLASH 时,主机代码无需更新。
2) 缺陷管理
3) 错误恢复
4) 电源管理
Flash 每个扇区有大约 10 万次的写寿命,读没有限制,擦除操作可以加速写操作,因为在写之前会进行擦除

总线模式

Negotiating Operation Conditions

当主机定义了 SD 卡不支持的电压范围时, SD 卡将处于非活动状态,将忽略所有的总线传输。要退出非活动状态唯一的方法就是重新上电。

SD 卡获取和识别

  • SD 卡总线采用的是单主多从结构, 总线上所有卡共用时钟和电源线。主机依次分别访问每个卡,每个卡的 CID 寄存器中已预编程了一个唯一的卡标识号,用来区分不同的卡。
  • 主机通过 READ_CID 命令读取 CID 寄存器。 CID 寄存器在 SD 卡生产过程中的测试和格式化时被编程,主机只能读取该号。
  • DAT3 线上内置的上拉电阻用来侦测卡。在数据传输时电阻断开(使用
    ACMD42)。

卡状态

卡状态分别存放在下面两个区域:
* 卡状态( Card Status), 存放在一个 32 位状态寄存器,在卡响应主机命令时作为数据传送给主机。
* SD 状态( SD_Status), 当主机使用 SD_STATUS( ACMD13)命令时, 512位以一个数据块的方式发送给主机。 SD_STATUS 还包括了和 BUS_WIDTH、安全相关位和扩展位等的扩展状态位。

内存组织

数据读写的基本单元是一个字节,可以按要求组织成不同的块。

  • Block:块大小可以固定,也可以改变,允许的块大小是实际大小等信息存储允许的块大小是实际大小等信息存储在在 CSD 寄存器。
  • Sector:和擦除命令相关,由几个块组成。 Sector 的大小对每个设备是固定的,大小信息存储在 CSD 寄存器。
  • WP Group:写保护单位。大小包括几个 group,写保护由一位决定,对每个设备大小是固定的,存储在 CSD 寄存器。

读写操作

Single Block Mode:

  • 主机根据事先定义的长度读写一个数据块。由发送模块产生一个 16 位的 CRC 校验码,接受端根据校验码进行检验。 读操作的块长度受设备 sector 大小 (512 bytes)的限制,但是可以最小为一个字节。 不对齐的访问是不允许的,每个数据块必须位于单个物理 sector 内。写操作的大小必须为 sector 大小,起始地址必须与 sector 边界对齐。

Multiple Block Mode:

  • 主机可以读写多个数据块(相同长度), 根据命令中的地址读取或写入连续的内存地址。操作通过一个停止传输命令结束。写操作必须地址对齐。

数据保护

每个 sector 的数据通过 Error Correction Code (ECC)进行保护。在写 sector 时生成 ECC,在读 sector 时检验 ECC。如果发现错误,在传输前进行纠正。

数据擦除

SD 卡数据擦除的最小单位是 sector。为了加速擦除操作,多个 sector 可以同时擦除。为了方便选择,第一个指令包含起始地址,第二个指令包含结束地址,在地址范围内的所有 sector 将被擦除。

写保护

两种写保护方式可供选择,永久保护和临时保护,两种方式都可以通过PROGRAM_CSD 指令进行设置。永久保护位一旦设置将无法清除。

拷贝位

通过 CSD 寄存器中的拷贝位( copy bit)设置 SD 卡中的数据是原始数据还是拷贝数据。拷贝位一旦设置,将无法清除,在测试和格式化时使用。

CSD 寄存器

所有 SD 卡的配置信息存储在 CSD 寄存器。通过 SEND_CSD 读取,PROGRAM_CSD修改。

SD 卡接口描述

SD 模式引脚

  • 扩展数据线(DAT1-DAT3)上电后为输入, SET_BUS_WIDTH 命令执行后作为数据线。即使只有 DAT0 使用,所有数据线都和外部上拉电阻连接,否则 DAT1& DAT2(如果未被使用)的振荡输入将引起非期望的高电流损耗。
  • 上电后,数据线输入 50K(+/-20K)欧姆的上拉(用来进行卡侦测和 SPI 模式选择)。 用户可以在常规数据传输时,通SET_CLR_CARD_DETECT (ACMD42)命令分离上拉。

寄存器

名称 宽度 描述
CID 128 卡标识号
RCA 16 相对卡地址( Relative card address) :本地系统中卡的地址,动态变化,在主机初始化的时候确定*SPI 模式中没有
CSD 128 卡描述数据:卡操作条件相关的信息数据
SCR 64 SD 配置寄存器:SD 卡特定信息数据
OCR 32 操作条件寄存器

主机通过重新上电来重置( reset)卡。卡有它自身检测上电的电路,当上电后卡状态切换到 idle 状态。也可以通过 GO_IDLE (CMD0)指令来重置。

猜你喜欢

转载自blog.csdn.net/u011037149/article/details/50967380
今日推荐