收藏 分享(赏)

sd卡(驱动)工作原理分析完整版.doc

上传人:czsj190 文档编号:7334328 上传时间:2019-05-15 格式:DOC 页数:17 大小:633.50KB
下载 相关 举报
sd卡(驱动)工作原理分析完整版.doc_第1页
第1页 / 共17页
sd卡(驱动)工作原理分析完整版.doc_第2页
第2页 / 共17页
sd卡(驱动)工作原理分析完整版.doc_第3页
第3页 / 共17页
sd卡(驱动)工作原理分析完整版.doc_第4页
第4页 / 共17页
sd卡(驱动)工作原理分析完整版.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、sd 卡工作原理分析 1sd 卡工作原理分析侯会明2005-11-22一 CPU 相关, ssio 的连接和设置 21 硬件初始化,ssio 的相关配置 21) 端口功能选择寄存器 GPCTL.22) 端口模式寄存器 GPPMA,GPPMB,GPPMC ,GPPMD ,GPPME .23) 同步 SIO 控制寄存器 SSIOCON34) 同步 SIO 状态寄存器 SSIOST35) 同步 SSIO 测试控制寄存器 SSIOTSCON .46) 同步 SIO 收发缓冲寄存器 SSIOBUF.57) 同步 SIO 中断申请寄存器 SSIOINT58) 同步 SIO 中断使能寄存器 SSIOINTE

2、N 52 CPLD 片选 .63 第三步,ssio 收发字符相关 6二 数据包的封装与命令协议相关 61 sd 卡指令数据包 62 sd 卡命令索引表 73 命令回应 repond .101) R1 模式 102) R2 模式 113) R3 模式 11三 命令的控制与实现 121 程序中调用的 sd 卡命令 .121) 命令响应函数 UCS_DRSD_niCommandRespond .122) sd 卡驱动程序初始化 UCS_DRSD_giSdIdentify.133) 读 sd 卡操作函数 154) 写 sd 卡操作函数 15四 sd 卡的配置信息和相关结构体 .161 卡识别寄存器 C

3、ID(card identification register )162 卡特性寄存器 CSD(card specific data register) .17sd 卡工作原理分析 2一 CPU 相关,ssio 的连接和设置1 硬件初始化,ssio 的相关配置1) 端口功能选择寄存器GPCTL地址:0xB7000000功能描述:这个寄存器配置各组GPIO的管教原始功能或者第二功能; CPU可以对这个寄存器进行读/写访问;复位后的默认值是 0x0000。15 14 13 12 1110 9 8 7 6 5 4 3 2 1 0GPCTL -*At reset 0 0 0 0 0 0 0 0 0 0

4、 0 0 0 0 0这里对这个寄存器有两处操作 首先将此寄存器和0x0008 与,来操作 GPPMB;GPCTL3(bit3)位控制管脚 PIOB4和 PIOB1:0的功能,设置如下:GPCTL3 = “0” (原始功能) GPCTL3 = “1” (第二功能)Function In/Out Function In/OutPIOB0 In/Out DREQ0 InputPIOB1 In/Out DREQCLR0 OutputPIOB4 In/Out TCOUT0 Output 然后将此寄存器和 0x0100 或,来操作 GPPME。GPCTL9(bit9)位控制管脚的功能,它的第二功能是 ss

5、ioGPCTL9 = “0” (原始功能) GPCTL9 = “1” (第二功能)Function In/Out Function In/OutPIOE3 In/Out SDA In/OutPIOE4 In/Out SCL Output2) 端口模式寄存器GPPMA,GPPMB ,GPPMC ,GPPMD ,GPPME地址:0xB7A010080xB7A01088功能描述:这些寄存器指定相应管脚的I/O流向(PIOA7:0, PIOB7:0,PIOC7:0, PIOD7:0 and PIOE9:0);CPU可以对这个寄存器进行读/写访问;复位后的默认值是0x0000。GPPMA7:0/GPPM

6、B7:0/ GPPMC7:0/GPPMD7:0 (bits 0 to 7)/GPPME9:0 (bits 0 to 9):,这些位置0时表示input;置1时表示output 。1510 9 8 7 6 5 4 3 2 1 0GPPM* -*-*-*- GPPMA7:0/GPPMB7:0/GPPMC7:0/GPPMD7:0/GPPME9:0,GPPME uses bit9 CRC 选项bit=0表示 CRC OFF.31:01stuff bits00:00CRCoptionR1sd 卡工作原理分析 113 命令回应 repond1) R1 模式对象指令CMD0 : GO_IDLE_STATEC

7、MD1 : SEND_OP_CONDCMD9 : SEND_CSDCMD10:SEND_CIDCMD12:STOP_TRANSMISSIONCMD16:SET_BLOCKLENCMD17:READ_SINGLE_BLOCKCMD18:READ_MULTIPLE_BLOCKCMD23:SET_BLOCK_COUNTCMD59:CRC_ON_OFF7 6 5 4 3 2 1 00 0 0in idle stateillegal commandcommunication CRC erroraddress errorparameter error2) R2 模式对象指令CMD13:SEND_STATU

8、S15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 0 0 0 0 0 0 0 0 0out of rangecommunication CRC errorin idle stateillegal commandaddress errorparameter errorsd 卡工作原理分析 123) R3 模式对象指令CMD58:READ_OCR39 38 37 36 35 34 33 32 00 0 0 OCRcommunication CRC errorin idle stateillegal commandaddress errorparameter error

9、三 命令的控制与实现1 程序中调用的 sd 卡命令在程序中的 sd 的命令发送响应主要通过函数 UCS_DRSD_niCommandRespond来实现。其他函数通过调用这个函数完成对 sd 卡的操作,这里主要有 3 个函数:sd 卡驱动程序初始化、读 sd 卡操作和写 sd 卡操作函数,下面分别对这些函数具体分析:1) 命令响应函数UCS_DRSD_niCommandRespondUCS_DRSD_niCommandRespond (W iCmd,UW uiArg,UB *pucRsp)参数分别表示:icmd命令号uiArg命令参数pucRsp命令响应的存储地址本函数分别涉及到了命令的处理C

10、MD9、CMD10:接收 sd 卡的 CSD 和 CID 信息。CMD17、CMD24:读写单个 block 数据,CMD18、CMD25:读写多个 block 数据。CMD58:读取 sd 卡 OCR 信息。s t a r tC o m m a n d 打包封装到 u c B u f _ a 6 中 选中 C P L D发送 C o m m a n d过滤 0 x f f , 限制 5 0 0次 , 返回接收结果结果 E _ O K ?i E r = E _ I O , 发送0 x f f , 取消 C P L DY返回结果处理N返回 i E ri C m d = ?C a s e 9 :C

11、 a s e 1 0 :C a s e 1 7 :C a s e 1 8 :C a s e 2 4 :C a s e 2 5 :C a s e 5 8 :读回 1 6 字节的数据读回 5 个字节的数据返回 i uD e f a u l t2) sd 卡驱动程序初始化UCS_DRSD_giSdIdentify在 mainTask 中最开始调用,进行 sd 卡驱动的上电初始化。sd 卡工作原理分析 13S S I O 硬件初始化S T A R TC M D 1 S D 卡工作电压设置设置成功 ?C M D 5 9 使能 C R C设置成功 ?C M D 9 取出 S D 卡寄存器 C S D 信息

12、设置成功 ?C M D 1 0 取出 S D 卡寄存器 C I D 信息设置成功 ?C M D 1 6 块大小设置设置成功 ?C H S 信息处理r e t u r n e r r o rE N DNYNNNNNYYYY次函数调用上面的函数实现命令的设置,顺序进行了如下设置:CMD1:设置 sd 卡的工作电压UCS_DRSD_niCommandRespond(CMD1,UCS_DRSD_OCR_VAL,ucRsp_a)CMD59:使能 CRC 校验UCS_DRSD_niCommandRespond(CMD59,1,ucRsp_a)sd 卡工作原理分析 14CMD9:读取 sd 卡的 CSD 信

13、息UCS_DRSD_niCommandRespond(CMD9, 0, ucRsp_a)CMD10:读取 sd 卡的 CID 信息UCS_DRSD_niCommandRespond(CMD10, 0, ucRsp_aCMD16:设置 sd 读写块的大小,设置值为 512 个字节UCS_DRSD_niCommandRespond(CMD16,UCS_DRSD_ATASECTORSIZE,ucRsp_a)3) 读 sd 卡操作函数本函数主要处理了 CMD17 的读单个 block 操作,流程如下S T A R TC M D 1 7 设置开始块号U C S _ D R S D _ n i D a t

14、 a I nE r r = E _ R e t r y ?是否出错 ?读完 ?R e t u r n E r r o rE N DYNNYNY通过调用 DataIn 函数来读取 512 字节的数据,DataIn 函数的是这样实现的,接收 512 个字节的数据和 2 个字节的 16 位 CRC 校验码。4) 写 sd 卡操作函数本函数主要处理了 CMD24,写单个 block 操作,流程如下:sd 卡工作原理分析 15S T A R TC M D 2 4 设置开始块号U C S _ D R S D _ n i D a t a O u tE r r E _ R e t r y ?是否出错 ?写完

15、?R e t u r n E r r o rE N DYNYNNY函数调用 DataOut 函数,其机制与 DataIn 相似。四 sd 卡的配置信息和相关结构体sd 卡驱动程序共定义了 4 个结构体:UCS_DRSD_SDTInfo_stsd 卡任务信息UCS_DRSD_SD_BASICINFO_stsd 卡物理信息UCS_DRSD_SD_CID_stsd 卡 CID 信息UCS_DRSD_SD_CSD_stsd 卡 CSD 信息其中,物理信息、CID 和 CSD 信息是从硬件上读取回来的,CID 和 CSD 直接复制给程序中的结构体,物理信息 basicinfo 需要转换它们是在 main

16、Task 的 identify 函数中调用的,CID 和 CSD 通过命令 CMD9 和CMD10 获取硬件信息后,直接复制。物理信息的结构体是将 CSD 信息中LBA(逻辑块地址) 方式转换成 CHS(柱面 磁头 扇区)方式后得到的。1 卡识别寄存器CID(card identification register )CID-slice 名称 栏目 Bit宽度 值 OKI 原创sd 卡工作原理分析 16127:120 Manufacture ID MID 8 0x41 OKI ID, 由MMCA 指定119:104 OEM/Application ID OID 16 0x0000 OK 设备名

17、103:56 Product name PNM 48 P2016 产品名55:48 Product revision PRV 8 0x10 产品修订版(version 1.0)47:16 Product serial number PSN 32 0x00000001 产品编号Default=1, user 设定可15:8 Manufacturing data MDT 8 收到 Code 文件的月份OKI 收到客户 Code 档案的日期,或是写入程序的日期7:1 7-bit CRC checksum CRC7 7 CRC 检验和0:0 - - 1 1 固定是”1”2 卡特性寄存器CSD(card

18、 specific data register)值 Type 备注CSD-slice 名称 栏目Bit 宽度 Bin. Hex. 127:126 CSD Structure CSD_STRUCTURE 2 10 0x2 R Version 3.1 125:122 spec version SEPC_VERS 4 0011 0x3 R Version 3.1 121:120 Reserved 2 X X R 不必理会119:112 datatime1 read access TAAC 8 00001000 0x08 R 1ns 111:104 datatime2 read access NSAC

19、 8 00000001 0x01 R 100cycles 103:96 max rate data transfer TRAN_SPEED 8 00101010 0x2A R 20Mb/s 95:84 card command class CCC 12 000000000111 0x007 R 支持Class0,1,2 83:80 max read data block length READ_BL_LEN 4 1001 0x9 R 512 字节79 partial blocks for read allowed READ_BL_PARTIAL 1 1 0x1 R78 Reserved 1 X

20、 X R 不必理会77 read block misalignment READ_BLK_MISALIGN 1 0 0x0 R 禁止跨越Block 76 DSR implemented DSR_IMP 1 0 0x0 R DSR: 不支持75:74 Reserved 2 X X R 不必理会73:62 device size C_CIZE 12 111111111110 0xFFE R61:59 min. read current VDD_R_CURR_MIN 3 000 0x0 R 0.5mA sd 卡工作原理分析 1758:56 max. read current VDD_R_CURR_M

21、AX 3 100 0x4 R 35mA 55:50 Reserved 6 X X R 不必理会49:47 device size multiplier C_SIZE_MULT 3 001 0x1 R46:31 Reserved 16 X X R 不必理会30:29 manufacture default ECC DEFAULT_ECC 2 00 0x0 R ECC: 不支持28:26 Reserved 3 X X R 不必理会25:22 Max. write data block length WRITE_BL_LEN 4 1001 0x9 R21:16 Reserved 6 X X R 不必

22、理会15 file format group FILE_FORMAT_GRP 1 0 0x0 R14 Copy flag (OTP) COPY 1 0 0x0 R Default=0 User 设定可13 permanent protection write PERM_WRITE_ PROTECT 1 1 0x1 R12 temporary protectionwrite TMP_WRITE_ PROTECT 1 1 0x1 R11:10 file format FILE_FORMAT 2 00 0x0 R Default=0 User 设定可9:8 ECC code ECC 2 00 0x0 R ECC: 不支持7:1 CRC CRC 7 CRC CRC R0 Reserved 1 1 0x1 R

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报