当前位置: 首页 > news >正文

SD2.0 Specification之功能切换

文章目录

  • 简述
  • 命令参数含义
  • 状态数据结构及含义
  • 功能切换流程
    • Mode0(查询功能)步骤
    • Mode1(切换功能)步骤
    • 示例

本文章主要讲解关于SD2.0功能切换(CMD6)的内容,基础概念和其它内容请参考以下文章。
SD2.0 Specification简述

简述

SD卡将一些功能进行分组,归属于同一组的若干功能,在同一时刻只能有一个生效,也就是组内功能互斥,具体哪一个生效,可通过CMD6命令来指定,每组都会有一个默认生效的功能。断上电或者发送CMD0命令进行复位,都会导致默认功能生效。

目前SD2.0总规划是分成6个功能组,每组可包含16个功能。但当前只使用了2个功能组,其它组预留,方便以后升级扩展。

  • 组1是访问模式,只包含2个速度选项,一个是默认速度(12.5 MB/sec),一个是高速(25 MB/sec)。从SD1.10版本开始,SD卡支持高速模式,但上电后,是处于默认速度模式,需要通过切换使得SD卡支持高速模式,让主机能够以50MHz的速度访问。
  • 组2是命令系统,包含3个选项,分别是标准命令集、电子商务命令集、供应商特定命令集。该功能组涉及的命令包括CMD34-37, CMD50以及CMD57。在标准命令集下,SD卡不支持这些命令,视为非法命令;在供应商特定命令集下,这些命令的作用由SD卡供应商自行定义;在电子商务命令集下,这些命令按照《SD Specifications Part A1: Mobile Commerce Extension Specification》的规定实现相应功能。标准命令集是默认有的,其它两个是可选项。
    功能分组表

CMD6命令既可查询当前功能,也可切换功能,具体使用哪种,会在CMD6的参数里面用1 bit标记出来,让SD卡识别判断。

mode0:查询功能
mode1:切换功能

CMD6的通信过程类似于读命令,SD卡除了会在CMD线上回Response,还会在DAT线上返回512 bits的数据,这些数据表明各功能情况。在收到命令后,SD卡需要在100ms内返回数据,如果是使用切换功能(Mode1),则卡需要在发送完数据后的8个时钟周期内做好切换,主机也至少需要等待8个时钟周期才能使用新功能。

CMD6 Mode0
CMD6 Mode1

命令参数含义

CMD6参数含义
参数可用功能分配
如上所示,CMD6的32位参数中,[31]用于指定模式,[23:0]用于指定每个功能组要查询或者切换的功能,因为不支持功能组6~功能组3,所以这里对应的值通常是0或者Fh。

状态数据结构及含义

表1 状态数据结构
位置 描述 宽度
511:496 最大功耗 16
495:480 第6功能组信息,位被置1则表示支持该位所对应的功能 16
479:464 第5功能组信息,位被置1则表示支持该位所对应的功能 16
463:448 第4功能组信息,位被置1则表示支持该位所对应的功能 16
447:432 第3功能组信息,位被置1则表示支持该位所对应的功能 16
431:416 第2功能组信息,位被置1则表示支持该位所对应的功能 16
415:400 第1功能组信息,位被置1则表示支持该位所对应的功能 16
399:396 对应第6功能组。mode0:表示组内可切换的功能。
mode1:表示切换后的功能, 0xF表示设置出错了
(参考后续状态码的解释,可以更好理解)
4
395:392 对应第5功能组。mode0:表示组内可切换的功能。
mode1:表示切换后的功能, 0xF表示设置出错了
4
391:388 对应第4功能组。mode0:表示组内可切换的功能。
mode1:表示切换后的功能, 0xF表示设置出错了
4
387:384对应第3功能组。mode0:表示组内可切换的功能。
mode1:表示切换后的功能, 0xF表示设置出错了
4
383:380 对应第2功能组。mode0:表示组内可切换的功能。
mode1:表示切换后的功能, 0xF表示设置出错了
4
379:376 对应第1功能组。mode0:表示组内可切换的功能。
mode1:表示切换后的功能, 0xF表示设置出错了
4
375:368 该数据结构的版本
00h-->bits 511:376 都有定义
01h-->bits 511:272 都有定义
02h-FFh-->保留
8
367:352标记第6功能组的busy状态 。位被置1则表示对应的功能正处于busy状态, mode0和mode1都能得到这个信息 16
351:336标记第5功能组的busy状态 。位被置1则表示对应的功能正处于busy状态, mode0和mode1都能得到这个信息 16
335:320标记第4功能组的busy状态 。位被置1则表示对应的功能正处于busy状态, mode0和mode1都能得到这个信息 16
319:304标记第3功能组的busy状态 。位被置1则表示对应的功能正处于busy状态, mode0和mode1都能得到这个信息 16
303:288标记第2功能组的busy状态 。位被置1则表示对应的功能正处于busy状态, mode0和mode1都能得到这个信息 16
287:272标记第1功能组的busy状态 。位被置1则表示对应的功能正处于busy状态, mode0和mode1都能得到这个信息 16
271:0保留(全是0) 272

位[367:272] 表示相应功能busy与否,如果功能A处于busy状态,则不能切换到功能A,只有处于ready状态的功能才能切换。
命令系统功能组的busy状态

位[399:376] 表示的是Status Code,在mode0和mode1下有差别,以下表格将逐一解释。

支持的功能组在Mode0模式下的状态码
参数 Busy Status Status Code 含义
0 忽略0 Status Code为默认功能的编码,也就是0
支持的功能 Ready 等于参数 支持参数里面指定的功能并且现在处于ready状态可以切换,所以返回该功能的编码
Busy 当前正在使用的功能编码 支持参数里面指定的功能,但现在处于busy状态,无法切换,所以返回的是现在正在使用的功能编码
不支持的功能 忽略 Fh 不支持参数里面指定的功能,返回Fh值
Fh型 忽略 当前正在使用的功能编码 参数指定为Fh,返回的是现在正在使用的功能编码

支持的功能组在Mode1模式下的状态码
参数 Busy Status Status Code 含义
0 忽略0 默认功能一定是可切换的,所以返回0
支持的功能 Ready 等于参数 支持参数里面指定的功能并且现在处于ready状态,可以切换且切换成功,所以返回切换后的功能编码,也就是参数值
Busy 当前正在使用的功能编码 支持参数里面指定的功能,但现在处于busy状态,取消切换,所以返回的是现在正在使用的功能编码
不支持的功能 忽略 Fh 不支持参数里面指定的功能,返回Fh值。一个功能组切换出错,其它功能组的切换都会取消
Fh型 忽略 当前正在使用的功能编码 参数指定为Fh,表示维持原功能,返回的是现在正在使用的功能编码
不支持的功能组在Mode0和Mode1模式下的状态码
参数 Busy Status Status Code 含义
0 忽略0 总是0
Eh-1h 忽略 Fh 总是Fh
Fh型 忽略 0 总是0

功能切换流程

切换流程
整个功能切换流程如上图所示,可以简单理解为以下3步

  1. 查询支持哪些功能。
  2. 检查要切换的功能是否ready以及功耗情况。
  3. 开始切换。

Mode0(查询功能)步骤

  1. 配置命令参数
 a、配置为mode0模式。b、每个功能组选择一个要查询的功能编码。 配置成Fh,返回的则是当前在使用的功能编码,其它效果可参考前面的状态码描述表内容
  1. 获取512 bits状态数据
数据里面包含可支持的功能、功能的busy状态等等。

Mode1(切换功能)步骤

  1. 配置命令参数
 a、配置为mode1模式。b、每个功能组选择一个要切换的功能编码。 配置成Fh,返回的则是当前在使用的功能编码,其它效果可参考前面的状态码描述表内容
  1. 获取512 bits状态数据
可从得到数据里面判断是否切换成功

示例

查询示例
切换示例

相关文章:

  • 【Diffusion分割】FDiff-Fusion:基于模糊学习的去噪扩散融合网络
  • 群晖套娃:群晖+飞牛fnOS二合一,群晖nas安装飞牛fnOS系统实录(飞牛fnOS初体验,如何挂载网盘视频,轻松实现影视刮削)
  • gtk4学习
  • SPI驱动学习七(SPI_Slave_Mode驱动程序框架)
  • AI驱动的Java开发框架:Spring AI Alibaba实战部署教程
  • C++之STL—常用排序算法
  • TDSQL-C电商可视化,重塑电商决策新纪元
  • IoT网关的主要功能有哪些?天拓四方
  • Hive优化高频面试题
  • Centos Stream 9根目录扩容
  • 【MySQL】函数及存储过程
  • GUI-工具栏(页签)和选择网格
  • leetcode621. 任务调度器
  • C++【类和对象】(构造函数与析构函数)
  • 全球200多个国财政数据(1991-2023年)
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Elasticsearch 参考指南(升级前重新索引)
  • iOS小技巧之UIImagePickerController实现头像选择
  • JAVA SE 6 GC调优笔记
  • Java 最常见的 200+ 面试题:面试必备
  • Magento 1.x 中文订单打印乱码
  • Promise面试题,控制异步流程
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 工作手记之html2canvas使用概述
  • 七牛云假注销小指南
  • 深入浅出webpack学习(1)--核心概念
  • 小程序开发之路(一)
  • 译米田引理
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 运行时添加log4j2的appender
  • Java性能优化之JVM GC(垃圾回收机制)
  • Python 之网络式编程
  • python最赚钱的4个方向,你最心动的是哪个?
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (7) cmake 编译C++程序(二)
  • (Git) gitignore基础使用
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (备份) esp32 GPIO
  • (二)WCF的Binding模型
  • (九)One-Wire总线-DS18B20
  • (全注解开发)学习Spring-MVC的第三天
  • (三)c52学习之旅-点亮LED灯
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (一)RocketMQ初步认识
  • (译) 函数式 JS #1:简介
  • (转)程序员疫苗:代码注入
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .gitignore文件使用
  • .NET CORE Aws S3 使用