JJJ:SD 卡中的 OCR(Operating Conditions Register)寄存器

1.简介

OCR 是一个 32位(4字节) 的只读寄存器,位于 SD 卡内部。它的主要作用有两个:
1、报告 SD 卡支持的工作电压范围。
2、指示上电初始化过程是否完成。

当主机(例如单片机、树莓派、手机)与 SD 卡通信时,首先需要读取 OCR 寄存器来确认双方是否“兼容”,并等待卡准备好接受后续命令。

2.位定义

bit解析
31卡上电状态位。0:卡仍在初始化过程中,繁忙。1:卡初始化过程完成,准备就绪。这是主机在发送 ACMD41(SD Memory Card)或 CMD1(MMC 卡)命令时,需要轮询检查的关键位。只有当此位变为 1 时,主机才能继续进行下一步操作。
24switching to 1.8v(request/accepted),对应的内核宏为:SD_OCR_S18R/SD_ROCR_S18A
23VDD voltage 3.5 ~ 3.6,参考内核宏MMC_VDD_35_36
22VDD voltage 3.4 ~ 3.5,参考内核宏MMC_VDD_34_35
21VDD voltage 3.3 ~ 3.4,参考内核宏MMC_VDD_33_34
20VDD voltage 3.2 ~ 3.3,参考内核宏MMC_VDD_32_33
19VDD voltage 3.1 ~ 3.2,参考内核宏MMC_VDD_31_32
18VDD voltage 3.0 ~ 3.1,参考内核宏MMC_VDD_30_31
17VDD voltage 2.9 ~ 3.0,参考内核宏MMC_VDD_29_30
16VDD voltage 2.8 ~ 2.9,参考内核宏MMC_VDD_28_29
15VDD voltage 2.7 ~ 2.8,参考内核宏MMC_VDD_27_28
14VDD voltage 2.6 ~ 2.7,参考内核宏MMC_VDD_26_27
13VDD voltage 2.5 ~ 2.6,参考内核宏MMC_VDD_25_26
12VDD voltage 2.4 ~ 2.5,参考内核宏MMC_VDD_24_25
11VDD voltage 2.3 ~ 2.4,参考内核宏MMC_VDD_23_24
10VDD voltage 2.2 ~ 2.3,参考内核宏MMC_VDD_22_23
9VDD voltage 2.1 ~ 2.2,参考内核宏MMC_VDD_21_22
8VDD voltage 2.0 ~ 2.1,参考内核宏 MMC_VDD_20_21
7VDD voltage 1.65 - 1.95,参考内核宏MMC_VDD_165_195

3.如何读取ocr寄存器

3.1 主机发送 CMD58。

SD 卡响应,并在数据线上返回一个 R3 响应。
R3 响应包含 5 个字节:

1个字节:CMD58 的响应字节。
第2-5个字节:就是 32 位的 OCR 寄存器值。

3.2 acmd41指令

4.实际应用示例

4.1 字节粒度

假设你通过 CMD58 读取到一个 OCR 值为:0x80FF8000(这是一个非常典型的返回值)。

我们将其分解为二进制来分析:

0x80FF8000 的二进制是:1000 0000 1111 1111 1000 0000 0000 0000

位 31:是 1。这意味着卡已经上电完成,准备就绪。

位 7:是 1。这意味着卡支持 2.7-3.6V 的标准电压。

所以,这个值告诉主机:

“我已经准备好了(位31=1)。”

“我可以在 2.7V 到 3.6V 的电压下工作(位7=1)。”

主机看到这个响应后,就知道可以开始进行后续的识别、读写等操作了。

4.2 通信流程粒度

OCR 寄存器的读取和检查是 SD 卡初始化流程的核心部分,特别是与 ACMD41 命令配合使用。

简化版的 SD 卡初始化流程:

主机发送 CMD0 使卡进入空闲状态。

主机发送 CMD8 检查卡是否支持 SDHC/SDXC(Ver2.00+)。

主机循环发送 ACMD41,并将主机支持的电压范围(例如,将 OCR 的位7置1)作为命令参数发送给卡。

卡在初始化过程中,会不断返回它的 OCR 寄存器值(通过 ACMD41 的响应)。

主机每次收到响应,都检查:

位31 是否为 1?如果不是,回到步骤3,继续发送 ACMD41。

如果是 1,则初始化完成。同时,主机还可以检查返回的电压窗口,确认卡是否支持主机提供的电压。

<think>首先,用户的问题是:“我想查找解决 '/bin/sh: ./jjj: Permission denied' 错误的方法”,具体是如何解决这个权限被拒绝的错误的错误。 系统的指令包括: - 所有行内数学表达式必须用 $...$ 格式,但这个问题没有数学内容,所以可能不需要。 - 独立公式用 $$...$$,但这里没有公式。 - LaTeX 语法正确:在回复中,如果有数学内容,要遵守,但这里可能没有。 - 使用中文回答:整个回复要用中文。 - 生成相关问题:在回答结束时,生成几个相关问题。 - 引用的段落末尾添加引用标识:如 [^1],但用户提供了引用 [1],是关于其他权限问题的,我需要参考它。 用户提供的引用 [1] 是关于另一个权限错误的:"Permission denied" 错误,用户提到了如何解决。引用内容描述了在脚本执行过程中出现的权限问题,并建议使用 chmod 命令来解决。 用户的问题是关于 "./jjj: Permission denied" 的错误,这与引用中的错误类似。 我的回答结构应该清晰,帮助用户逐步解决问题。确保回答真实可靠。 步骤: 1. **理解错误**:解释这个错误意味着什么。错误消息 "/bin/sh: ./jjj: Permission denied" 表明当尝试运行脚本或文件 "./jjj" 时,shell 没有执行权限。 2. **解决方法**:建议使用 chmod 命令来添加执行权限。 - 例如:运行 `chmod +x jjj` 来添加执行权限。 - 确保文件存在,并且用户有权限修改它。 3. **参考提供的引用**:引用 [1] 提到使用 chmod 来解决类似的权限问题,所以我可以在回答中引用它。 - 在相关部分末尾添加引用标识,如 [^1]。 4. **预防措施**:解释如何避免类似问题,比如在创建脚本时设置权限。 5. **生成相关问题**:在回答结束时,添加几个相关问题,类似于示例中的格式。 生成的回答结构: - 开头:确认问题并解释错误。 - 主体:逐步说明解决方法。 - 结束:生成相关问题。 相关问题示例: 1. 如何检查文件权限? 2. 如何永久设置文件权限? 3. 其他常见的权限错误及其解决方法? 确保回答完整: - 错误原因:文件没有可执行权限。 - 解决步骤: 1. 检查文件是否存在:`ls -l jjj` 2. 添加执行权限:`chmod +x jjj` 3. 尝试再次运行:`./jjj` - 如果问题依旧,考虑其他可能性,如文件所有权或路径问题。 参考用户的引用: - 在回答中,提到类似问题可以用 chmod 解决,并添加引用 [^1]。 最终回答用中文。 完整回答大纲: 1. 介绍错误:这个错误表示尝试执行的脚本或文件没有足够的权限。 2. 解决方法: - 使用 chmod 命令添加执行权限。 - 示例命令:`chmod +x jjj` - 解释:这将使文件可执行。 - 参考引用:类似问题可以通过 chmod 解决 [^1]。 3. 额外建议:检查文件类型、所有权等。 4. 生成相关问题。 </think>### 解决 '/bin/sh: ./jjj: Permission denied' 错误的方法 此错误表示您尝试执行文件 `./jjj` 时,系统拒绝了权限,通常是因为该文件缺少可执行权限(execute permission)。以下是系统性的解决步骤,基于 Linux/Unix 环境中的常见实践(确保您有管理员或文件所有者权限)。参考类似权限问题的处理方式[^1]。 #### 逐步解决方法 1. **检查文件权限与所有权**: - 使用 `ls -l` 命令查看文件详细信息: ```bash ls -l jjj ``` - 输出示例:`-rw-r--r-- 1 user group 1024 Jan 1 12:00 jjj`(表示没有 `x` 权限)。 - 如果所有者不正确,使用 `chown` 修改所有权(例如:`sudo chown your_username jjj`)。 2. **添加可执行权限**: - 运行 `chmod` 命令为文件添加执行权限: ```bash chmod +x jjj ``` - 这会将权限更改为类似 `-rwxr-xr-x`,允许执行。 - 如果文件在特定路径下,确保命令路径正确(如 `chmod +x /path/to/jjj`)。 - 验证权限是否生效:再次运行 `ls -l jjj`。 3. **尝试重新执行文件**: - 运行文件: ```bash ./jjj ``` - 如果错误消失,表示问题已解决。 4. **检查文件类型与完整性**: - 确保 `jjj` 是可执行文件(如脚本或二进制程序),使用 `file jjj` 检查类型(例如:是否标记为 `Bourne-Again shell script`)。 - 如果文件损坏或不完整,重新下载或创建备份。 #### 常见问题排查 - **权限不足**:如果您不是文件所有者,需要在 `chmod` 前加 `sudo`(例如:`sudo chmod +x jjj`)。 - **路径问题**:确保当前目录包含 `jjj` 文件(使用 `pwd` 确认路径)。 - **SELinux/AppArmor 限制**:在某些系统(如 CentOS),安全模块可能阻止执行;临时禁用或调整策略(需谨慎)。 - 类似错误可通过 `chmod` 修复,如引用中所述的处理方式[^1]。 #### 预防措施 - 创建新脚本时,直接设置权限:`chmod +x filename.sh`。 - 使用 `umask` 配置默认权限(例如:`umask 022` 确保新文件可执行)。 如果上述步骤无效,请提供更多细节(如操作系统类型或文件来源),以便进一步诊断。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值