SD 操½学习笔记
标签:
笔记
学习
概述
SD 卡驱动
2009-11-11 21:51
SD
卡操½ 一、
1、简介
SD
卡是基于
flash
的存储卡。
SD
卡和
MMC
卡的区别在于初始化过程不同。
SD
卡的通信协议包括
SD
和
SPI
两类。
SD
卡½用卡内智½控制模块进行
FLASH
操½控制,
包括协议、
安全算法、
数据存取、ECC 算法、缺陷处理和分析、电源管理、时钟管理。
2、功½介绍
1)
2.1
特点
主机无关的
FLASH
内存擦除和编程
读或写数据,主机只要发送一个带地址的½令,然后等待½令完成,主机无
需关心具½操½的完成。½采用新型的
FLASH
时,主机代码无需更新。
2)
3)
4)
缺陷管理
错误恢复
电源管理
Flash
每个扇区有大约
10
万次的写寿½,读没有限制。
擦除操½可以加速写操½,因为在写之前会进行擦除。
3 SD
总线模式
3.1 Negotiating Operation Conditions
½主机定义了
SD
卡不支持的电压范围时,SD 卡将处于非活动状态,将½
略所有的总线传输。要退出非活动状态唯一的方法就是重新上电。
3.2 SD
卡获取和识别
SD
卡总线采用的是单主多从结构,总线上所有卡共用时钟和电源线。主机
依次分别访问每个卡,
每个卡的
CID
寄存器中已预编程了一个唯一的卡标识号,
用来区分不同的卡。
主机通过
READ_CID
½令读取
CID
寄存器。CID 寄存器在
SD
卡生产过程
中的测试和格式化时被编程,主机只½读取该号。
DAT3
线上内½的上拉电阻用来侦测卡。在数据传输时电阻断开(½用
ACMD42)。
3.3
卡状态
卡状态分别存放在下面两个区域:
卡状态(Card
Status),存放在一个 32
½状态寄存器,在卡响应主机½令
时½为数据传送给主机。
SD
状态(SD_Status),½主机½用
SD_STATUS(ACMD13)½令时,512
½以一个数据块的方式发送给主机。SD_STATUS 还包括了和
BUS_WIDTH、安
全相关½和扩展½等的扩展状态½。
3.4
内存组织
数据读写的基本单元是一个字节,可以按要求组织成不同的块。
Block:块大小可以固定,也可以改变,允许的块大小是实际大小等信息存储
允许的块大小是实际大小等信息存储
寄存器。
在
CSD
寄存器。
Sector:和擦除½令相关,
由几个块组成。
Sector
的大小对每个设备是固定的,
大小信息存储在
CSD
寄存器。
WP Group:写保护单½。大小包括几个 group,写保护由一½决定,对每个
设备大小是固定的,存储在
CSD
寄存器。
3.5
读写操½
Single Block Mode:主机根据事先定义的长度读写一个数据块。
由发送模块产
生一个
16
½的
CRC
校验码,接受端根据校验码进行检验。读操½的块长度受设
备
sector
大小
(512 bytes)的限制,½是可以最小为一个字节。不对½的访问是不
允许的,每个数据块必须½于单个物理
sector
内。写操½的大小必须为
sector
大
小,起始地址必须与
sector
边界对½。
Multiple Block Mode:主机可以读写多个数据块(相同长度),根据½令中的
地址读取或写入连续的内存地址。操½通过一个停止传输½令结束。写操½必须
地址对½。
3.6
数据传输速率
SD
卡可以通过单数据线(DAT0)或四根数据线(DAT0-DAT3)进行数据
传输。单根数据线传输最大传输速率为
25 Mbit/s,四根数据线最大传输速率为
100 Mbit/s。
3.7
数据保护
每个
sector
的数据通过
Error Correction Code (ECC)进行保护。
在写
sector
时
生成
ECC,在读 sector
时检验
ECC。如果发现错误,在传输前进行纠正。
3.8
数据擦除
SD
卡数据擦除的最小单½是
sector。
为了加速擦除操½,
多个
sector
可以同
时擦除。为了方便选择,第一个指令包含起始地址,第二个指令包含结束地址,
在地址范围内的所有
sector
将被擦除。
3.9
写保护
两种写保护方式可供选择,永久保护和临时保护,两种方式½可以通过
PROGRAM_CSD
指令进行设½。永久保护½一旦设½将无法清除。
3.10
拷贝½
通过
CSD
寄存器中的拷贝½(copy
bit)设½ SD
卡中的数据是原始数据还是拷
贝数据。拷贝½一旦设½,将无法清除,在测试和格式化时½用。
3.11 CSD
寄存器
所有
SD
卡的配½信息存储在
CSD
寄存器。通过
SEND_CSD
读取,PROGRAM_CSD
修改。
4 SPI
模式
二、
SD
卡接口描述
1
引脚和寄存器
主机通过
9
个引脚和
SD
卡相连
1.1 SD
模式引脚
扩展数据线(DAT1-DAT3)上电后为输入,SET_BUS_WIDTH ½令执行后½
为数据线。
即½只有
DAT0
½用,
所有数据线½和外部上拉电阻连接,
否则
DAT1
& DAT2(如果未被½用)的振荡输入将引起非期望的高电流损耗。
上电后,数据线输入
50K(+/-20K)欧姆的上拉(用来进行卡侦测和 SPI
模式
选择) 用户可以在常规数据传输时,
。
通过
SET_CLR_CARD_DETECT (ACMD42)
½令分离上拉。
1.2 SPI
模式引脚
1.3
寄存器
名称
CID
RCA
½度
128
16
描述
卡标识号
相对卡地址(Relative
card address):本地系统中卡的地
址,动态变化,在主机初始化的时候确定
*SPI
模式中没有
卡描述数据:卡操½条件相关的信息数据
SD
配½寄存器:SD 卡特定信息数据
操½条件寄存器
CSD
SCR
OCR
128
64
32
主机通过重新上电来重½(reset)卡。卡有它自身检测上电的电路,½上电后卡
状态切换到
idle
状态。也可以通过
GO_IDLE (CMD0)指令来重½。
2 SD
卡总线拓扑
SD
总线有
6
根通信线和三根电源供应线:
CMD——½令线是双向信号线。主机和卡通过
push pull
模式工½。
DAT0-3——数据线是双向信号线。主机和卡通过
push pull
模式工½。
CLK——时钟是从主机到卡的信号。CLK
通过
push pull
模式操½。
VDD—VDD
是所有卡的电源供应线。
VSS[1:2]—VSS
是
2
根地线。
在初始化的时候,向每个卡分别发送½令,允许应用检测卡并给物理½
(physical
slot)分配逻辑地址。数据通常分别传输给每个卡。然后,为了方便处
理卡堆栈,初始化后所有½令同时发送给所有卡,在½令数据包中包含了操½地
址。
SD
总线允许动态配½数据线数目。上电后默认
SD
卡只用
DAT0
½为数据
传输线。初始化后,主机可以改变总线½度。这个特性½得在硬件开销和系统性
½间取得平衡。
3 SPI
总线拓扑
4
电气接口
4.1
上电
上电后,包括热插入,卡进入
idle
状态。在该状态
SD
卡½略所有总线操½
直到接收到
ACMD41
½令。ACMD41
½令是一个特殊的同步½令,用来协商操
½电压范围,并½询所有的卡。除了操½电压信息,ACMD41
的响应还包括一
个忙标志,表明卡还在
power-up
过程工½,还没有准备½识别操½,即告诉主
机卡还没有就绪。主机等待(继续½询)直到忙标志清除。单个卡的最大上电时间
不½操½
1
秒。
上电后,主机开始时钟并在
CMD
线上发送初始化序列,初始化序列由连续
的逻辑“1”组成。序列长度为最大
1
毫秒,74 个时钟或
supply-ramp-up
时间。
额外的
10
个时钟(64 个时钟后卡已准备就绪)用来实现同步。
每个总线控制器必须½执行
ACMD41
和
CMD1。CMD1
要求
MMC
卡发送
操½条件。在任½情况下,ACMD41 或
CMD1
必须通过各自的
CMD
线分别发
送给每个卡。
5
寄存器
5.1 OCR(Operating Conditions Register)
32
½的操½条件寄存器存储了
VDD
电压范围。 卡操½电压范围为
2~3.6V。
SD
然而从内存中访问数据的电压是
2.7~3.6V。OCR
显示了卡数据访问电压范围,
结构如下表所示。
表
3-8 OCR
寄存器定义
OCR
½
VDD
电压范围