SD/eMMC寄存器介绍

转载地址:https://blog.youkuaiyun.com/junzhang1122/article/details/50868308



熟悉SD/MMC的相关寄存器对协议的理解有一定的辅助作用,所以这篇文章来介绍一下SD/MMC相关的寄存器有哪些呢?

1.SD卡内部架构

在熟悉SD/MMC相关寄存器之前,我们先来看看SD卡的内部架构是怎么样的,如下图所示:


2.SD/MMC相关寄存器的介绍


从上图中总结出:SD卡内部有7个寄存器.

一、OCR,CID,CSD和SCR寄存器保存卡的配置信息;

二、RCA寄存器保存着通信过程中卡当前暂时分配的地址(只适合SD模式);

三、CSR寄存器卡状态(Card Status)和SSR寄存器SD状态(SD Status)寄存器保存着卡的状态(例如,是否写成功,通信的CRC校验是否正确等),这两个寄存器的内容与通信模式(SD模式或SPI模式)相关.

四、MMC卡没有SCR和SSR寄存器.

下面分别对7个寄存器中比较重要的寄存器详细解释一下,分别是CID、CSD、SCR、OCR、RCA这5个寄存器。

2.1. Card Identification Register(CID)

这个 CID 寄存器有 16 字节长,如下表所示,它包含了本卡的特别识别码(ID 号)。 这些信息是在卡的生产期间被编程(烧录),主控制器不 能修改它们的内容。 注意:SD卡的 CID 寄存器和 MMC 卡的 CID 寄存器在记录结构上是不同的。


2.2.Card Specific Data Register(CSD)

这个描述数据寄存器(CSD)有 128 字节长,如下表所示,此卡的包含了访问该卡数据时的必要配置信息。“cell type”栏内定义了CSD的区域是只读(R)、一次编程(R/W)或可擦除的(R/W/E)[“R/W”是指可以多次擦写,“R/W(1)”是指只能一次写入,不可擦除]。该张表中所显示的值都对应真实的CSD结构中的各自区域和编码。CSD区域的样式是依照栏标记(和一个复选标记√)的样式。注意SD卡内的 CSD寄存器和MultiMedia卡的CSD寄存器有着不同的结构。

在SD3.0协议中,CSD分为版本1.0和版本2.0,版本1.0对应标准容量的SD卡,版本2.0对应高容量和超高容量的SD卡。



CSD Version 2.0的如下:


2.3.SD card Configuration Register (SCR)

除了 CSD 寄存器外,还有一个配置寄存器的名字是:SD 卡配置寄存器(SCR)。SCR 提供了SD 卡的一些特殊特性在这张卡内。它的大小是64 位。这个寄存器内容由制造商在生产厂内设置,MMC卡没有SCR。


SCR_STRUCTURE 关于SD卡内的物理级说明中SCR结构的版本号。

SD_SPEC描述这张SD卡在物理级上所支持的说明版本。

DATA_STAT_AFTER_ERASE 定义了数据在擦除后的状态。是“0”或“1”中的任何一个(这要依赖卡的供应商)。

SD_SECURITY 描述了该卡所支持的安全算法。0:无 1:安全协议1.0 安全说明版本 0.96 2:安全协议2.0 安全说明版本 1.0 - 1.01。其他保留

SD_BUS_WIDTHS描述该卡所支持的所有数据总线宽度。从SD 卡支持最少1 位或4 位宽度这两种总线模式开始,任何SD 卡都将最少要设置0 和2 这两个位(即SD_BUS_WIDTH = 0101 ),1.4位保留。

2.4.Operating Conditions Register (OCR)

这个 32 位的工作条件寄存器储存了卡的 VDD 电压轮廓图。任何标准的 SD 卡主控制器可以使用 2V 至 3.6V 的工作电压来让 SD 卡能执行这个电压识别操作(CMD1)。而访问存储器的阵列操作无论如何都需要 2.7V 至 3.6V 的工作电压。OCR 寄存器显示了在访问卡的数据时所需要的电压范围。OCR 寄存器的结构描述:


2.5.RCA寄存器
该16位卡地址寄存器保存了在卡识别过程中卡发布的器件地址。该地址用于在卡识别后主机利用该地址与卡进行通信。该寄存器只有在SD总线模式下才有效。

<think>好的,我现在需要回答用户关于VxWorks 7.0SD卡和eMMC设备树编写方法的问题。首先,我得回顾一下用户提供的引用资料,特别是引用2、3和4,因为它们提到了设备树、SD卡驱动和驱动程序编写方法。 根据引用2,VxWorks 7.0SD卡驱动基于VxBus架构,需要先在设备树中添加节点。示例中的sdhc0节点有兼容性字符串、寄存器地址、时钟频率等属性。这说明编写设备树节点需要符合硬件规范,比如正确的寄存器地址和中断号。 引用3提到创建VXB_FDT_DEV_MATCH_ENTRY匹配结构,属性名称与设备树中的兼容性字符串对应。这意味着驱动程序中需要定义匹配表,确保设备树节点和驱动能够正确关联。 引用4说明在U-Boot中烧写设备树和镜像的步骤,但用户的问题更多是关于设备树编写,这部分可能需要更详细的结构说明。 接下来,我需要整理设备树节点的基本结构,比如节点名称、compatible属性、寄存器映射、时钟频率、中断等。同时,eMMCSD卡可能类似,但可能有不同的兼容性字符串或参数。 然后,驱动注册部分需要引用3中的方法,使用FDT匹配表和初始化函数。需要确保驱动模块正确编译并加载到内核中。 可能还需要考虑设备树节点中的其他属性,如总线宽度、电压设置等,这些在引用2的示例中有提到。同时,文件系统格式化部分可能涉及mkfs命令,但用户主要关注设备树编写,所以这部分可能简略带过。 用户可能需要具体的示例,所以需要提供一个SD卡和eMMC的设备树节点示例,并说明各参数的意义。同时,常见问题如中断配置错误、兼容性字符串不匹配需要提醒。 最后,生成相关问题,如驱动开发流程、调试方法、文件系统配置等,帮助用户进一步了解。</think>### VxWorks 7.0SD卡和eMMC设备树编写方法 #### 1. **设备树节点编写** VxWorks 7.0基于设备树(Device Tree)描述硬件配置,SD卡和eMMC的设备树节点需包含以下关键属性: - **`compatible`**:标识驱动兼容性,需与驱动代码中的匹配表一致。例如: ```dts sdhc0: sdhc@E0100000 { compatible = "zynq,sdhc"; // 驱动匹配标识[^2][^3] reg = <0xE0100000 0x1000>; // 寄存器地址和范围 clock-frequency = <100000000>; // 控制器时钟频率 interrupts = <56 0 4>; // 中断号、触发类型 bus-width = <4>; // 总线宽度(4或8线) max-dev-clock-frequency = <52000000>; // 设备最大时钟频率 }; ``` - **`reg`**:控制器寄存器基地址和范围。 - **`interrupts`**:中断号及触发方式,需与硬件设计匹配。 - **`bus-width`**:定义数据线宽度(4线或8线)。 - **`max-dev-clock-frequency`**:设置SD卡/eMMC设备支持的最大时钟频率。 #### 2. **驱动匹配与注册** 在驱动代码中,需通过`VXB_FDT_DEV_MATCH_ENTRY`定义设备树匹配表,例如: ```c static VXB_FDT_DEV_MATCH_ENTRY sdhcMatchTable[] = { { .compatible = "zynq,sdhc" }, // 与设备树中compatible属性一致 { NULL } }; VXB_DRV_FDT_DECLARE(sdhcDrv, sdhcMatchTable, sdhcInit); ``` 驱动初始化函数`sdhcInit`中需完成控制器配置、中断注册等操作。 #### 3. **文件系统挂载** 设备树配置完成后,需通过以下步骤挂载文件系统: 1. **格式化SD卡/eMMC**: ```c void formatSdCard() { if (usrFmt("sd0:", 0, 0) == OK) { printf("格式化成功"); } } ``` 2. **挂载文件系统**: ```c void mountFs() { if (dosFsDevInit("sd0:", 0, "fatfs") == OK) { printf("挂载成功"); } } ``` #### 4. **常见问题** - **中断配置错误**:设备树中的`interrupts`需与硬件实际中断号一致,否则驱动无法响应中断。 - **兼容性字符串不匹配**:驱动代码中的`compatible`必须与设备树节点中的完全一致。 - **时钟频率限制**:`max-dev-clock-frequency`需根据SD卡/eMMC规格设置,过高可能导致通信失败。 #### 5. **eMMCSD卡的差异** eMMC设备树节点通常需要额外配置: - **`non-removable`**:标记为不可移除设备。 - **`mmc-hs200-1_8v`**:支持高速模式(若硬件支持)。 示例: ```dts mmc0: mmc@E0101000 { compatible = "vendor,emmc-controller"; non-removable; mmc-hs200-1_8v; bus-width = <8>; }; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值