1.SD卡寄存器

SDIO接口中定义了8个寄存器:OCRCIDCSDRCADSRSCRSSR(仅sdio卡支持),CSR(仅sdio卡支持)。
这些寄存器只能通过对应的命令访问
其中OCR,CID,CSD,SCR寄存器保存了卡/内容的特定信息,RCA和DSR寄存器是配置寄存器,存储当前的配置参数。
为了使能扩展功能,寄存器的保留位卡应该返回 0

注意:RCA在SPI模式下不可用。

1.1操作条件寄存器——OCR

32位的操作条件寄存器(OCR)存储了卡的VDD电压描述和2个状态信息位。
包含了Vdd支持电压,并且包含了card的状态信息,用以表示该card是否power up,以及表示card是否为大容量和标准容量。

bit 7是新定义的,用于双电压卡默认设置为0。如果双电压卡没有收到CMD 8,则该位为0,如果收到CMD 8,则该位为1。
bit 31-卡上电状态位,这个状态位在卡的上电流程完成后设置。
bit 30-卡容量状态位,如果是SDHC或SDXC,设置为1,如果是SDSC,设置为0。卡容量状态位只有在上电流程完成,且bit 31设置为1之后才有效。主机应该读取这个状态位来判断卡的种类

1.2卡识别寄存器——CID


·MID
一个用于识别卡厂商的8-bit二进制数。MID号由SD-3C,LLC.(松下,闪迪和东芝成立的公司)控制、定义和分配给SD卡厂商。此过程用以保证CID 寄存器的唯一性。

·OID
一个用以识别卡的OEM和/或卡内容(当ROM或FLASH卡被用作发布媒介时)的2字符的ASCII字符串。OID 号由SD-3C,LLC控制、定义和分配给SD 卡厂家。此过程用以保证CID 寄存器的唯一性。

注意:SD-3C,LLC给想要生产和/或者销售SD卡的公司授权,包括但不限于Flash记忆卡,ROM,OTP,RAM和SDIO Combo卡。

·PNM
产品名,5字符的ASCII字符串。

·PRV
产品版本由两个二进制编码的十进制(BCD)数字,每个占4 bit,代表一个"n.m"版本号。"n"在高半字节,"m"是在低半字节。
例如,产品版本"6.2"的PRV二进制值域为:0110 0010b

·PSN
序列号,32位二进制数。

·MDT
出厂日期由两个16进制数组成,一个8bit 代表年份(y),另外4bit 代表月份(m)。
"m"域是月份码。1为一月份。
"y"域是年份码。0为2000。
例如,出厂日期"April 2001"对应的日期域的二进制值为:00000001 0100。

·CRC
CRC7校验和(7bit),这是对CID 内容计算的校验和。

1.3特定数据寄存器——CSD

特定数据寄存器——CSD(card specific data register)
通过发送CMD9命令来读取CSD

CSD分为V1.0和V2.0两个版本,其中V2.0只适用于高容量SD卡,本文也是以V2.0为参考。
插入的区域名字是固定值,并且主机不一定要求涉及这些区域。这些区域的固定值使主机保持对CSD V1.0的兼容。
单元类型区域中,R=可读,W(1) =写一次,W=反复写。

·CSD_STRUCTURE
记录了 CSD 的版本号,CSD version 1.0 为标准容量卡所用,CSD version 2.0 为大容量或超大容量卡所用。·

最大数据传速速率(TRAN_SPEED)
对于标准SD卡,这个区域值应该总是00110010b(32h),这个等于25Mhz, 是强制的SD卡最大操作频率。
对于高速卡来说,这个值应该是01011010b(5Ah),这个值代表50Mhz,当时序通过CMD 6和CMD 0命令回到默认的时候,这个值会重新设置为032h。

·卡命令类(CCC)
表示卡支持的命令类,class0~11。
一个CCC 中的一位值为1表明支持对应的命令分类。

·读数据块最大长度(READ_BL_LEN)
其值固定为9h,代表READ_BL_LEN=512byte。

·READ_BL_PARTIAL
这个值固定为0,表明不允许部分块读操作,只能按块进行访问。

·WRITE_BLK_MISALIGN
这个值固定为0,表明高容量卡中,写操作不允许越过物理块边界

·READ_BLK_MISALIGN
这个值固定为0,表明高容量卡中,读操作不允许越过物理块边界

·DSR _IMP
定义是否可配置驱动阶段在卡上整合了。如果设置了,驱动阶段寄存器(DSR) 就应该使用,0一不实现DSR,1一实现DSR。

·C_SIZE
这个值有22bit,可以支持最大到2Tbyte(和通过32Bit块地址指定的最大存储空间一致) 这个参数是用来计算sd卡的用户数据区域容量的(不包括保护区域)。公式如下:
memory capacity = (C_SIZE+1) * 512K byte。
鉴于V 2.0支持的最大容量是32GB,超过6bit的部分都设置为0.

·ERASE_BLK_EN
这个值固定为1,代表着主机可以擦除1个或者多个512字节单位。

·SECTOR_SIZE
这个值固定是7Fh,这个代表64字节。这个值同擦除操作没关系。V2.0的卡通过AU尺寸来表明存储边界,不用这个值。

·WP_GRP_SIZE
这个值固定是0,高容量SD卡不支持写保护组。

·WP_GRP_ENABLE
这个值固定为0,高容量卡不支持写保护组。

·R2W_FACTOR
这个值固定是2h, 代表4倍。写超时可以通过读访问时间和R2W_FACTOR的乘积计算。但是,对于写超时,主机不应该用这个参数,而是应该用固定的250ms。

·WRITE_BL_LEN
这个值固定是9h,代表WRITE_BL_LEN=512Byte。

·WRITE_BL_PARTIAL
这个值固定是0,表明部分块写不支持,值支持块整数倍的写操作。

·FILE_FORMAT_GRP
这个值固定是0,主机不应该使用这个值。

·COPY
定义是否内容是原始的(0) ,或者是拷贝的(1)。拷贝位对于销售到终端用户的OTP和MTP设备来说是设置为1的,这表明卡的内容是拷贝的。拷贝位是一次性编程位。

·PERM_WRITE_PROTECT
永久保护整个卡内容,不允许写和擦除(所有相关命令都无效)。默认值是0,非永久写保护。

·TMP_WRITE_PROTECT
临时保护卡的内容,不允许写和擦除(所有相关命令都临时无效)。这个值可以设置和复位,默认值是0,非写保护。

·FILE_FORMAT
这个值固定为0,主机不应该使用这个值

1.4相对地址寄存器——RCA

相对地址寄存器——RCA(relative card address register)
可写的16位卡相对地址寄存器,在卡的初始化期间,由卡向外发布的卡地址。这个地址用于卡初始化进程之后,主机同卡之间的交互寻址。
默认的RCA寄存器值是0x0000,这个值保留着,用来通过CMD 7设置所有卡到standby状态。
卡的RCA地址如何确定???根据是什么???
RCA地址默认值为0x0000,在卡识别过程中,接收到CMD 3命令后,由SD卡给自己动态分配的暂时的16bit非零值。每次接收CMD 3后,重新分配地址。

1.5驱动阶段寄存器——DSR

驱动阶段寄存器——DSR(driver stage register)
16位驱动阶段寄存器,是可选的,可以用来在扩展操作条件中,提高总线性能(受总线长度,传输速率和卡数目的影响)。CSD寄存器中有DSR寄存器是否使用的标志。DSR默认值是0x404。

1.6SD配置寄存器——SCR

64bit的SD配置寄存器作为CSD寄存器的补充,提供了SD卡的特殊功能的信息。

·DATA_STAT_AFTER_ERASE
定义了擦除之后的数据状态,可能是0或者1,由厂家定义。

·SD BUS WIDTHS
描述了卡支持的所有DAT总线宽度,如表所示。SD卡最少应该支持1bit和4bit的宽度,所以SD卡的bit 0和bit 2必须有一个为1。

1.7SD状态寄存器——SSR

SD状态寄存器——SSR(SD status register)
SD卡专有特征的信息。
包含了sd存储卡的专有属性并为以后的功能扩展保留了足够空间。SD 状态大小是一个512 Bit的数据块。寄存器通过DAT线发送给host的内容有16bit CRC。SD 状态作为ACMD13(CMD55 跟随CMD13)的响应通过Dat 总线发送给Host。ACMD13 只能在‘Trans_State’状态发送给卡(卡被选中)。SD 状态结构描述如下。没有使用的保留Bit 应该设成0。

1.8卡状态寄存器——CSR

卡状态寄存器——CSR(card status register)
卡状态信息。
CSR(卡状态)寄存器总共 32bits,代表了执行一个命令的错误和状态信息,其信息包含在 R1 格式的应答中返回给主机。

2.SD卡存储器

SD卡属于连续存储介质(NAND型Flash),它是由许多小的区块组成,每个区块都可以存储一定数量的数据,因此SD卡的读写是以“数据块”为单位进行传输的。
n块(Block):是文件系统上的概念,指最小读写单位,块的长度是字节的整数倍,一般为512字节,有的SD卡的数据块为1024或2048等等,要修改SD卡中一个字节,必须重写整个数据块。
n扇区:扇区是擦除单位,表示擦除操作要擦除的块的数目,通常:1扇区=128块=64KByte。注意:文件系统中,V 2.0的卡通过AU尺寸来表明存储边界,不使用扇区。
nAU(分配单元),也称为簇,是文件系统为每一个单元地址划分的空间大小,类似于一栋大楼将它换分为若干房间,并分配相应的门牌号,其中房间的大小就是所说的分配单元大小。
存储文件时,系统将文件按照分配单元的大小分为若干部分,比如分配单元为4096Byte,一个4096Byte的文件刚好放进一个分配单元中,如果是4097Byte的文件则需占用两个分配单元。擦除时也是同样道理,一次最小擦除一个分配单元。因此分配单元越小,越节约空间,但是浪费读取时间;分配单元越大,越节约读取时间,但是浪费空间。
卡的容量决定最大的AU大小,默认分为:2048Byte、4096Byte,8192Byte, 16KB,32KB和64KB,最大为一个扇区即64KB,一般默认设置为4096Byte,格式化时分配单元设置。

SDIO接口(2)——SD卡寄存器相关推荐

  1. sdio接口_单片机基础 —— 使用SDMMC接口读写SD卡数据

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SDMMC外设读取SD卡数据. 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4 ...

  2. SD卡寄存器及对应的CMD命令描述

    目录 1.SD卡寄存器 1.1操作条件寄存器--OCR 1.2卡识别寄存器--CID 1.3特定数据寄存器--CSD 1.4相对地址寄存器--RCA 1.5驱动阶段寄存器--DSR 1.6SD配置寄存 ...

  3. STM32单片机基础19——使用SDMMC接口读写SD卡数据

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SDMMC外设读取SD卡数据. 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4 ...

  4. STM32F407ZGT6使用SDIO方式驱动SD卡

    原文地址::STM32F407ZGT6使用SDIO方式驱动SD卡 - JavaShuo 相关文章 1.[STM32] STM32官方标准固件库概述----[STM32] STM32官方标准固件库概述_ ...

  5. 苹果公司申请新专利 聚合USB接口和SD卡槽

    新浪科技讯 北京时间6月28日凌晨消息,苹果公司周四向美国专利商标局提交的一份专利文件显示,该公司为一项聚合USB接口和SD卡槽的新技术申请专利. 该专利名为"混合输入端口"技术. ...

  6. Arduino ESP32 使用HSPI和VSPI接口挂载SD卡区别

    Arduino ESP32 使用HSPI和VSPI接口挂载SD卡区别 在挂载SD卡时,ESP32使用HSPI和VSPI接口挂载SD卡区别 如果使用hard SPI(HSPI)接口需要注意以下几点: 烧 ...

  7. cube sdio fatfs 初始化sd卡_Stm32CubeMx配置SDIO+FATFS+FREERTOS

    芯片型号:STM32F427VG 软件版本:Stm32CubeMx 5.6.0 库版本:STM32Cube FW_F4 V1.25.0 配置SDIO: 卡时钟(SDIO_CK ):每个时钟周期在命令和 ...

  8. stm32 SD(SDSC)卡的学习SDIO 模式连接SD卡

    本次的SD卡连接使用的是SDIO模式与之前的SPI模式相对应,都是对stm32 使用SD卡的介绍也为了和后面的FATFS文件系统使用铺垫.就直接上源码,也有看不明白的抢先看上一节的stm32 SD(S ...

  9. 传统emmc所用的sdio接口_SolidGear SD/SDIO/eMMC协议分析仪

    SolidGear是全球排名第一的SD/SDIO/eMMC协议分析仪测试解决方案的厂商,目前业界主流的从事SD/SDIO/eMMC接口界面开发及测试验证的厂商均有在广泛的使用SolidGear的产品, ...

最新文章

  1. 深入研究asp.net2.0——控件类库
  2. IIS 错误代码大汇总
  3. 浩然GG和女朋友的游戏 (数学,规律)
  4. 大学生英语fif测试系统_英语听力解题技巧
  5. 产品原型设计的参考步骤
  6. asp.net 检测访问者是iphone,android,web(摘录)
  7. Linux用sendmail发信失败,提示Connection refused by [127.0.0.1]
  8. Android程序开发初级教程(一)
  9. Arcgis Licensemanager 不能启动的原因之一(转载)
  10. Atitit redis使用场合总结 使用场景 目录 1.1. 3. Session 存储 1 1、 配置数据查询 1 2. 排行榜应用,取TOP N操作 1 1.2.     1、查找最
  11. JS函数创建的几种方式
  12. 四川大学计算机组成原理实验报告_计算机组成原理基础解释
  13. 经典对抗攻击Deepfool原理详解与代码解读
  14. 03.C 语言实现3.5寸虚拟软盘
  15. 查看电脑操作系统版本
  16. 关于计算机合成图像的应用中,数字图像合成技术综述
  17. RuntimeError: stack expects each tensor to be equal size, but got [8] at entry 0 and [2] at entry 2
  18. 【Unity】如何删除不要的Tile Palette(瓦片地图)(遇到新的问题就继续更新2021.4.29)
  19. Redis应用项目---抢红包功能(一)
  20. 选择面向 USB4 数据线的 ESD 保护

热门文章

  1. JAVA-day04-继承、多态
  2. php2017下载官网,phpmailer 2017官方版最新下载_phpmailer 2017官方版官方免费版 - 软件帝...
  3. Activity之四大启动模式
  4. 定格动画影片 - 重订相片与影片的分野 --转载
  5. Java、JSP等文章发布系统的设计与实现
  6. 计算机网络的应用九年级最新历史试题,九年级信息技术考试题库(2017).doc
  7. 【Pytorch】backward()简单理解
  8. 3D渲染的最佳CPU推荐, 目前流行的 3D 渲染 CPU
  9. Game - Deppin绿色安装红色警戒(OpenRA-Red Alert)
  10. FFmpeg源码分析:获取声道布局与声道数