SD卡驱动工作原理分析(完整版)
更新时间:2023-08-31 05:46:01 阅读量: 教育文库 文档下载
SD卡驱动工作原理分析
sd卡工作原理分析
一 CPU相关,ssio的连接和设置.................................................................................................2
1 硬件初始化,ssio的相关配置............................................................................................2
1) 端口功能选择寄存器——GPCTL..........................................................................2 2) 端口模式寄存器——GPPMA,GPPMB,GPPMC,GPPMD,GPPME...........2 3) 同步SIO控制寄存器——SSIOCON.....................................................................3 4) 同步SIO状态寄存器——SSIOST.........................................................................3 5) 同步SSIO测试控制寄存器——SSIOTSCON.......................................................4 6) 同步SIO收发缓冲寄存器——SSIOBUF..............................................................5 7) 同步SIO中断申请寄存器——SSIOINT...............................................................5 8) 同步SIO中断使能寄存器——SSIOINTEN..........................................................5 2 CPLD片选............................................................................................................................6 3 第三步,ssio收发字符相关................................................................................................6 二 数据包的封装与命令协议相关.................................................................................................6
1 sd卡指令数据包...................................................................................................................6 2 sd卡命令索引表...................................................................................................................7 3 命令回应repond.................................................................................................................10
1) R1模式...................................................................................................................10 2) R2模式...................................................................................................................11 3) R3模式...................................................................................................................11
三 命令的控制与实现...................................................................................................................12
1程序中调用的sd卡命令....................................................................................................12
1) 命令响应函数——UCS_DRSD_niCommandRespond.........................................12 2) sd卡驱动程序初始化——UCS_DRSD_giSdIdentify..........................................13 3) 读sd卡操作函数...................................................................................................15 4) 写sd卡操作函数...................................................................................................15
四 sd卡的配置信息和相关结构体..............................................................................................16
1卡识别寄存器——CID(card identification register ).........................................................16 2卡特性寄存器——CSD(card specific data register)...........................................................17
SD卡驱动工作原理分析
一 CPU相关,ssio的连接和设置 1 硬件初始化,ssio的相关配置
1) 端口功能选择寄存器——GPCTL 地址:0xB7000000
功能描述:这个寄存器配置各组GPIO的管教原始功能或者第二功能;CPU可以对这个寄存器进行读/写访问;复位后的默认值是0x0000。
1514131211109876543210
GPCTL -* At reset 0 0 0 0 0 0000000 0 0 0
这里对这个寄存器有两处操作
① 首先将此寄存器和~0x0008与,来操作GPPMB;
GPCTL3(bit3)位控制管脚PIOB[4]和PIOB[1:0]的功能,设置如下:
GPCTL3 = “0” (原始功能) GPCTL3 = “1” (第二功能) ② 然后将此寄存器和0x0100或,来操作GPPME。 GPCTL9(bit9)位控制管脚的功能,它的第二功能是ssio
GPCTL9 = “0” (原始功能) GPCTL9 = “1” (第二功能)
2) 端口模式寄存器——GPPMA,GPPMB,GPPMC,GPPMD,GPPME 地址:0xB7A01008~0xB7A01088
功能描述:这些寄存器指定相应管脚的I/O流向(PIOA[7:0], PIOB[7:0],PIOC[7:0], PIOD[7:0] and PIOE[9:0]);CPU可以对这个寄存器进行读/写访问;复位后的默认值是0x0000。
GPPMA[7:0]/GPPMB[7:0]/ GPPMC[7:0]/GPPMD[7:0] (bits 0 to 7)/GPPME[9:0] (bits 0 to 9):,这些位置0时表示input;置1时表示output。
15~10 9 8 7 6 5 4 3 2 1 0
GPPMA[7:0]/GPPMB[7:0]/GPPMC[7:0]/
GPPMD[7:0]/GPPME[9:0],
GPPME uses bit9 & bit8.
For other GPPMx, bit9 & bit8 are “-*”.
At reset 0 0 0 0 0 0 0 0 0 0
SD卡驱动工作原理分析
这里对寄存器GPPMB和0x0002,将PIOB[2]作为输出,作用是CPLD的片选。 对寄存器GPPME先后进行了三步操作: ① 首先将寄存器和0x0001或
将PIOE[0]作为输出,该管脚输出时钟clock。 ② 再次将寄存器和0xfffd与
将PIOE[1]作为输入,该管脚为SDI,即SD卡的输入。 ③ 最后将寄存器和0x0004或
将PIOE[4]作为输出,该管脚为SDO,即SD卡的输出。
3) 同步SIO控制寄存器——SSIOCON 地址:0xB7B01010
功能描述:SSIOCON寄存器用来控制收发操作。这个寄存器可以通过程序来进行读或者写。如果SSIOCON寄存器被修改,那么变化会在收发操作结束后生效。如果SSIOCON在传送过程中被修改,那么当前的操作将不能正确的执行。
7 6 5 4 3 2 1 0 SLMSBSFTSLV-*-*SFTCLK At reset 0 0 0 0 0 0 0 0
注意:-*是保留位,这些位总是被写0,如果这些位被写1,正常操作无法被保
证。 位说明:
① SFTCLK [1:0] (bit 1 to bit 0)
这两位选择同步时钟,操作必须在主模式(master mode)下,从模式(slave mode)被禁止。
bit[1:0]] = 00 时,1/8 HCLK; bit[1:0]] = 01 时,1/16 HCLK bit[1:0]] = 1x 时,1/32 HCLK ② SFTSLV (bit 4) 这位用来选择主从模式 bit[4] = 0 时,Master mode bit[4] = 1 时,Slave mode ③ SLMSB (bit 5)
这位用来选择在收发数据过程中最低有效位在前(LSB first)还最高有效位在前(MSB first)
bit[5] = 0 时, LSB first bit[5] = 1 时, MSB first
这里将其存器设置成0x22,选择了主模式Master|最高有效位在前MSB|1/32HCLK。
4) 同步SIO状态寄存器——SSIOST 地址:0xB7B01004
SD卡驱动工作原理分析
功能描述:SSIOST寄存器指示同步SIO的操作状态,通过程序可以读写OERR和BUSY。寄存器的SFTCT[2:0]位是只读的,写这些位无效,当写这些位是,将写0。
.
7 6 5 4 3 2 1 0
-*-*At reset 0 0 0 0 0 0 0 0
注意:-*位是保留位,总是向这些位写0,如果写1,正常德操作将无法保证。 位说明: ① BUSY (bit 0)
这位指示数据正在被收发,这位在数据收发时自动置1,操作完成时自动清0。当置1时,意味着数据正在被传送,在传送的过程中写0,可能会终止收发操作并且重新初始化SSIO。如果在空闲时写0,操作是无效的。 当bit[0] = 0,Transmit-receive idle
当bit[0] = 1,Transmit-receive in progress ② OERR (bit 1)
这位指示overrun错误是否发生。如果当前接收的数据没有被读,CPU该位置1。一旦被置1,这位不会清0,即使在下一个接受操作中没有overrun错误发生。因此有必要在程序中清0,写0该位被清0,但写1也被置1。 当bit[1] = 0, No overrun error 当bit[1] = 1 ,Overrun error ③ SFTCT[2:0] (bit 7 to bit 5)
这个位指示3位移位计数器的当收发时的计数值。当没有数据收发时计数器被设置成000(二进制)。每次收发数据时有移位,计数器增1。当收发操作结束时或者BUSY位在接收数据过程中写0时,寄存器返回000。
这里这个寄存器被写0x00清除状态。
5) 同步SSIO测试控制寄存器——SSIOTSCON 地址:0xB7B01014
功能描述:SSIOTSCON是一个可以设计简单的同步SIO内部测试的寄存器,寄存器可以有程序读写。在普通操作中,设置SSIOTSCON为0x00,收发数据时不覆盖此寄存器的内容。
7 65--**
Atreset000
4
-*03-*02-*01-*00 -* 0
注意:-*位是保留位,这些位总是写0,如果写1,正常的操作无法保证。 位说明: LBTST (bit 7)
这个位使能循环回侧函数,当循环回侧函数使能时,发送信号作为接收信号被读回。
SD卡驱动工作原理分析
当bit[7] = 0, Loop back test function disabled (normal mode) 当bit[7] = 1, Loop back test function enabled (test mode)
这里这个寄存器被写0x80,循环回侧函数使能,进行虚拟发送数据0xff并接收。
6) 同步SIO收发缓冲寄存器——SSIOBUF 地址:0xB7B01000
功能描述:SSIOBUF寄存器在收发操作过程中保存收发的数据,寄存器可以通过程序读/写。当写时,寄存器作为发送缓冲区;读时,寄存器作为接收缓冲区。当接收SSIOBUF的内容时,数据保存直到下次接收操作完成。转换并行发送数据为串行数据和转换串行接收数据为并行数据时SSIOREG寄存器被配置成移位寄存器。在发送操作中,发送数据写到SSIOBUF中,SSIOBUF中的数据自动传送给SSIOREG。在接收操作中,当接收完最后一位时,SSIOREG数据传送给SSIOBUF。寄存器SSIOREG不能在程序中读/写。
7) 同步SIO中断申请寄存器——SSIOINT 地址:0xB7B01008
功能描述:SSIOINT寄存器设定一个同步SIO中断请求,可以通过程序读写寄存器,向一位写1来清除该位。
7 6 5 4 3 2 1 0 -*-*-*TREMPRXCMPAt reset 0 0 0 0 0 0
注意:-*作为保留位,这些位总是写0,如果这些位被写1,正常德操作无法保证
位说明:
① TXCMP (bit 0)
当发送完成时这位被设置。
当bit[0] = 0, Transmission not complete 当bit[1] = 1, Transmission complete ② RXCMP (bit 1)
当接收完成时这位被设置。
当bit[1] = 0, Reception not complete 当bit[1] = 1, Reception complete ③ TREMP (bit 2)
当收发缓冲区寄存器的数据被传送到移位寄存器并且收发缓冲区为空时这位被置位。
当bit[2] = 0, Transmit data not transferred 当bit[2] = 1, Transmit data transferred
这里将此寄存器写入0x07,将3个标志位置1,清除中断作为初始状态。 8) 同步SIO中断使能寄存器——SSIOINTEN 地址:0xB7B0100C
SD卡驱动工作原理分析
功能描述:SSIOINTEN寄存器可以使能同步SIO中断,可以通过程序读写寄存器。
7 6 5 4 3 2 1 0 SSIOINTEN-*-*-*TREMPAt reset 0 0 0 0 0 0
注意:-*是保留位,总是对这些位写0,如果写1,正常操作无法保证。 位说明:
① TXCMPEN (bit 0)
这位使能发送完成时的中断请求。
当bit[0] = 0, Transmit complete interrupt request masked 当bit[0] = 1, Transmit complete interrupt request enabled ② RXCMPEN (bit 1)
这位使能接受完成时的中断请求。
当bit[1] = 0, Receive complete interrupt request masked 当bit[1] = 1, Receive complete interrupt request enabled ③ TREMPEN (bit 2)
这位使能收发缓冲区为空时的中断请求。
当bit[2] = 0, Transmit-receive buffer empty interrupt request masked 当bit[2] = 1, Transmit-receive buffer empty interrupt request enabled
这里将此寄存器写入0x00,禁止所有中断。
2 CPLD片选
先读入地址0xf800000e中的值
如果选中片选,向地址0xf8000002写0,拉低电平; 如果为选中片选,向地址0xf8000002写1,拉高电平。
3 第三步,ssio收发字符相关
① 首先读取SSIOINT中的内容,SSIOINT在这里是状态寄存器,中断已经屏蔽,因此与中断无关。然后与3个宏定义比较 SSIOCON_TXCMPEN 0x01 /* transmit complete */ SSIOCON_RXCMP 0x02 /* receive complete */ SSIOCON_TREMP = 0x04 /* transmit empty */
3个宏分别表示SSIOINT的后3位置1,比较结果哪位置1证明此时操作已经完成,但由于屏蔽了中断,不产生中断。
② 其次将3个宏定义的值相应的写入SSIOINT。
③ 最后根据操作要求向SSIOBUF写数据或者读出SSIOBUF中的数据。
二 数据包的封装与命令协议相关 1 sd卡指令数据包
sd卡的指令被封装成48位的数据包,每次传送这48位的数据包。数据包的内容包括起始位、结束位、传输位、命令索引、传输参数和7位CRC校验码。其具
SD卡驱动工作原理分析
体格式分布如下图 Bit 位置 Bit 宽度 值 说明
Transmission Command
Start bit bit index
其中的命令索引位是[45:40],里面可以封装各种命令,具体的命令表将在下面给出。不同的命令会对应不同的回应(respond),回应有三种(R1,R2,R3)格式,在命令表中的选项会给出。 2 sd卡命令索引表
SPI 模式 CMD 简略语 指令说明
自变量 回应
这是使card初始化到Idle状态的指令.CS信号设在Low的状态时,接到本指令后,card 将转换到SPI模式.
接到本指令后,card将做R3回应(含有OCR 数据).根据OCR值,可以得知card能工作电压范
围.OCR数据最高值位的1bit是用来确认card内部处理是否结束(Ready/Busy轮询).
接到本指令后,
处于Ready状态的card将传送CID数据.在MMC模式下,数据被送到CMD信号,在CID数据的每1bit传送后,CMD信号状态将与该card内
SD卡驱动工作原理分析
部状态相比较,如果不一致,將中止数据传送,card返回到Ready状态.如果相一致,该card 将认为已被选中,然后转换到Identification 状态.
本指令会为已转
换到Identification状态的card分配一个相对card地址(RCA).当RCA分配后,card将转换到Stand-by 状态,对以后的CMD2和CMD3不回应.
这是用来设定
DSR(DriveState寄存器)的指令,但是本car不支持DSR.
本指令是用来选
择一张card,让它在Stand-by状态和Transfer状态之间转换的指令.如果给card设定已分配到的RCA地址,card将从Stand-by状态转换到Transfer状态,并将回应以后的读取指令及其他指令.如果给card设定RCA以外的地址,card将转换到Stand-by状态。当RCA=0000h时,card将无条件地转换到Stand-by状态.
SD卡驱动工作原理分析
接到本指令后,将传送CSD数据.
接到本指令后,将传送CID数据.
接到本指令后,将
从设定的地址传送P2ROM数据,直到接到指令CMD12为止.
本指令强行终止CMD11和
CMD18的处理
接到本指令后, 将传送状态寄存器的信息.
接到本指令后,将
转换到休止(inactive)状态.
本指令用来设定31:00] R1
Block长度.对象block 是以后的指令length CMD17和CMD18.
接到本指令后,将[31:00] R1
从自变量设定的data 地址传送1个address block 长度的数据.(block长度由指令CMD16设定).
_BLOCK接到本指令后,将[31:00] R1
从自变量设定的data 地址连续传送address block长度的数据,直到接到指令CMD12为止.(block长度由指令CMD16设定).
本指令是给紧跟[31:16]set to 0 R1
的指令CMD18[15:00]number 设定要传送的of block block 数量.
SD卡驱动工作原理分析
接到本指令后,将
写1个block 长度
的数据到自变量设定的地址.(block长度由指令CMD16设
定).
接到本指令后,将
BLOCK 连续写block长度
的数据到自变量
设定的地址,直到接到指令CMD12为止.(block长度由指令CMD16设
定).
接到本指令
后,Card将传送OCR数据.
本指令是用来设
定CRC 选项为ON或OFF.在SPI模式下,CRC的初始值设定为OFF.[CRC选项[bit=1]表示CRC ON;[CRC选项[bit=0]表示CRC OFF.
[31:0] data address
R1
[31:0] data address
R1
[31:01] stuff bits [00:00] CRC option
R1
3 命令回应repond 1) R1模式 对象指令
CMD0 : GO_IDLE_STATE CMD1 : SEND_OP_COND CMD9 : SEND_CSD CMD10:SEND_CID
CMD12:STOP_TRANSMISSION CMD16:SET_BLOCKLEN
CMD17:READ_SINGLE_BLOCK CMD18:READ_MULTIPLE_BLOCK CMD23:SET_BLOCK_COUNT CMD59:CRC_ON_OFF
SD卡驱动工作原理分析
7 6 5 4 3 2 1 0
2) R2模式 对象指令
CMD13:SEND_STATUS 15 14 13 1211 10 9 8 7 6 5 4 3 2 1 0
3) R3模式 对象指令
CMD58:READ_OCR
39 38 37 3635 34 33320 OCR
SD卡驱动工作原理分析
三 命令的控制与实现
1程序中调用的sd卡命令
在程序中的sd的命令发送响应主要通过函数UCS_DRSD_niCommandRespond来实现。其他函数通过调用这个函数完成对sd卡的操作,这里主要有3个函数:sd卡驱动程序初始化、读sd卡操作和写sd卡操作函数,下面分别对这些函数具体分析:
1) 命令响应函数——UCS_DRSD_niCommandRespond
UCS_DRSD_niCommandRespond (W iCmd,UW uiArg,UB *pucRsp) 参数分别表示: icmd—命令号 uiArg—命令参数
pucRsp—命令响应的存储地址 本函数分别涉及到了命令的处理
CMD9、CMD10:接收sd卡的CSD和CID信息。
CMD17、CMD24:读写单个block数据,CMD18、CMD25:读写多个block数据。
CMD58:读取sd卡OCR信息。
SD卡驱动工作原理分析
2) sd卡驱动程序初始化——UCS_DRSD_giSdIdentify
SD卡驱动工作原理分析
在mainTask中最开始调用,进行sd卡驱动的上电初始化。
次函数调用上面的函数实现命令的设置,顺序进行了如下设置: CMD1:设置sd卡的工作电压
UCS_DRSD_niCommandRespond(CMD1,UCS_DRSD_OCR_VAL,ucRsp_a) CMD59:使能CRC校验
SD卡驱动工作原理分析
UCS_DRSD_niCommandRespond(CMD59,1,ucRsp_a) CMD9:读取sd卡的CSD信息
UCS_DRSD_niCommandRespond(CMD9, 0, ucRsp_a) CMD10:读取sd卡的CID信息
UCS_DRSD_niCommandRespond(CMD10, 0, ucRsp_a CMD16:设置sd读写块的大小,设置值为512个字节
UCS_DRSD_niCommandRespond(CMD16,UCS_DRSD_ATASECTORSIZE,ucRsp_a)
3) 读sd卡操作函数
本函数主要处理了CMD17的读单个block操作,流程如下
通过调用DataIn函数来读取512字节的数据,DataIn函数的是这样实现的,接收512个字节的数据和2个字节的16位CRC校验码。 4) 写sd卡操作函数
本函数主要处理了CMD24,写单个block操作,流程如下:
SD卡驱动工作原理分析
相似。 函数调用DataOut函数,其机制与DataIn
四 sd卡的配置信息和相关结构体 sd卡驱动程序共定义了4个结构体:
UCS_DRSD_SDTInfo_st——sd卡任务信息
UCS_DRSD_SD_BASICINFO_st——sd卡物理信息 UCS_DRSD_SD_CID_st——sd卡CID信息 UCS_DRSD_SD_CSD_st——sd卡CSD信息
其中,物理信息、CID和CSD信息是从硬件上读取回来的,CID和CSD直接复制给程序中的结构体,物理信息basicinfo需要转换
它们是在mainTask的identify函数中调用的,CID和CSD通过命令CMD9和CMD10获取硬件信息后,直接复制。物理信息的结构体是将CSD信息中LBA(逻辑块地址)方式转换成CHS(柱面 磁头 扇区)方式后得到的。 1卡识别寄存器——CID(card identification register )
CID-slice 名称 栏目宽度 值原创 [127:120] Manufacture ID MID 8 0x41 OKI ID, 由
MMCA 指定
OID 16 0x0000 OK设备名
SD卡驱动工作原理分析
name PNM 48 P2016 产品名 Product 产品修订
版(version 1.0)
[47:16] Product serial number PSN 32 0x00000001 产品编号
Default=1, user设定可
8 收到Code OKI 收到
文件的月份 客户Code
档案的日期,或是写入程序的日期
[7:1] 7-bit CRC checksum CRC7 7 CRC 检验和 - 1 固定是”1”
2卡特性寄存器——CSD(card specific data register)
名称 [127:126] [125:122] [121:120]
CSD Structure spec version Reserved
栏目
CSD_STRUCTURE SEPC_VERS TAAC NSAC TRAN_SPEED CCC
READ_BL_LEN
Bit 宽度2 4 2 8 8 8 12 4
10 0011 X 00001000 00000001 00101010 000000000111 1001
值 Bin.
Hex. 0x2 0x3 X 0x08 0x01 0x2A 0x007 0x9
Type R R R R R R R R
备注
Version 3.1 Version 3.1 不必理会 1ns 100cycles 20Mb/s 支持Class0,1,2 512 字节
datatime1 read access datatime2 read access [103:96] max rate data transfer [95:84] [83:80]
card command class max read data block length
79
partial blocks for read allowed
78 77 76 [75:74] [73:62] [61:59] [58:56] [55:50] [49:47] [46:31]
Reserved
read block misalignment DSR implemented Reserved device size min. read current max. read current Reserved
device size multiplier Reserved
READ_BL_PARTIAL 1 1 0x1 R
READ_BLK_MISALIGN DSR_IMP C_CIZE
VDD_R_CURR_MIN VDD_R_CURR_MAX
C_SIZE_MULT
1 1 1 2 12 3 3 6 3 16
X 0 0 X
111111111110 000 100 X 001 X
X 0x0 0x0 X 0xFFE 0x0 0x4 X 0x1 X
R R R R R R R R R R
不必理会 禁止跨越Block DSR: 不支持 不必理会 0.5mA 35mA 不必理会 不必理会
SD卡驱动工作原理分析
[30:29] [28:26] [25:22]
manufacture default ECC Reserved
Max. write data block length
DEFAULT_ECC
WRITE_BL_LEN
2 3 4
00 X 1001
0x0 X 0x9
R R R
ECC: 不支持 不必理会
[21:16] 15 14
Reserved file format group Copy flag (OTP)
FILE_FORMAT_GRP COPY
6 1 1
X 0 0
X 0x0 0x0
R R R
不必理会
Default=0 User 设定可
protection
write
protection
write
[11:10]
file format
PERM_WRITE_ PROTECT 1 1 0x1 R
TMP_WRITE_ PROTECT 1 1 0x1 R
FILE_FORMAT 2 00 0x0 R Default=0 User 设定可
[9:8] [7:1] 0
ECC code CRC Reserved
ECC CRC
2 7 1
00 CRC 1
0x0 CRC 0x1
R R R
ECC: 不支持
正在阅读:
SD卡驱动工作原理分析(完整版)08-31
电气工程课程设计06-07
热心肠同学作文400字06-29
近代中国的金融业09-01
重庆文理学院继续教育学院:jj.cqwu.net/index.asp02-08
大学入党申请书范文精选09-08
角膜曲率计的使用09-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 卡驱动
- 整版
- 原理
- 分析
- 工作
- 使用自费药品及项目告知书
- 西北工业大学乒乓球理论课多选题题库
- 八年级上学期地理期末复习提纲(2013最新人教版)
- 2012年12月四川省属事业单位考试真题
- 营业执照注销申请表
- 会员评家工作情况报告
- 《因特网上的信息交流》教学设计
- 二三版兼用《运筹学教程》胡运权主编课后习题答案(第二章)
- 2019年商业综合体市场调研及发展前景趋势预测 目录
- 虹口区历史文化建筑介绍
- (此申请书必须双面打印) - 厦门大学管理学院 学院首页
- DWG图纸中零件轮廓线提取方法的研究与实现
- 模板拆除申请表
- 放射工作人员证申请表
- 外墙挂钢丝网施工工艺
- 三国志11-在野武将及未发现武将出现时间
- 高二政治《哲学常识》第四课 事物发展的原因、状态、趋势
- 三年行动计划工作总结
- 泥浆转运协议
- 心理咨询师(普通心理学)考试练习题