SD卡的读写和加解密

一、概述

SD卡全称为 Secrue Digital Memory Card,具有轻巧、可加密、传输速度高、适用于手持设备使用等优点。


 

二、总线接口

SD需要高速读写,同时也要使手持等嵌入式设备能方便使用,特设有两个访问接口中:SD模式接口和SPI接口。SD卡在上电初期,卡主控通过检测引脚1(DAT3)来决定使用SD模式还是SPI模式。当此脚接50KOhm上拉电阻时,卡进入SD模式;当此脚为低电平,卡则工作于SPI模式。


 

SD引脚

SD模式

SPI模式

1

DAT3

CS

2

CMD

DI

3

VSS

VSS

4

VDD

VDD

5

CLK

SCLK

6

VSS

VSS

7

DAT0

DO

8

DAT1

Resvered

9

DAT2

Resvered

表1:SD卡接口定义

1、SPI接口

SPI接口是为嵌入式和手持设备准备的,只使用普通的三线制SPI总线,即可对卡进行一般的慢速的读写等操作。

图略

图一:SPI总线

如上图,由读卡器到卡的数据,在每个时种的上升沿把DO的数据锁存到卡主控,而卡的数据则在每个CLK的上升沿把DI的数据读入读卡器。


 

2、SD接口

SD接口是为高速专有设备而设计,使设备能对卡进行高速可靠的传输而设计,因SD模式在每个命令及数据转输时,都必须具有正确的CRC校验。因此,此模式下主机一般需要专门设计的硬件模块以产生CRC校验。

在此模式下,SD卡具有四根数据线,且时种速度最大可达50MHz,所以此模式下数据传输速率比SPI模式快得多。


 

三、总线协议

SD卡命令共分为12类,分别为class0到class11,不同的卡主控根据其功能,支持不同的命令集。主要如下:

class0:卡的识别、初始化命令集。

class2:读卡命令集

class4:写卡命令集

class7:卡的锁定,解锁功能命令集


 

SD卡只有唯一的主机,所有命令是由主机发出。总线上可传输三种类型数据,分别是命令帧、响应、数据。

命令帧:由总线上唯一的主机发出,由设备响应并执行。

响应:指设备响应主机的命令。

数据:指由主机传给设备,或由设备传给主机的数据实体。

图略

如上图,命令帧一共由48bit组成,其中起始位固定为0,结束位固定为1。每个命令最后1字节包含7bit的CRC校验,第一字节为的另外7bit为命令码,中间的32bit为命令参数。

一个完整的命令由命令帧和响应,或命令帧、响应和数据组合而成。

图略

图二:Mult Block Read

如上图,主机发出command请求,然后卡返回该命令的respond,如果respond响应为正确,则Host通过读取cmd线状态,等待卡准备好数据;如果cmd为低电平,表示卡busy,busy结束后卡会把cmd线拉高,并且发出start token,随即进入数据传输阶段;数据传输结束后,主机发送结束命令停止命令,传输结束。


 

四、卡的初始化

上电后,卡处于IDLE状态,主机发送CMD0复位SD Card,然后通过CMD55和ACMD41判断当前电压是否在卡的工作范围内。但如果是MMC卡,则不能识别CMD55,所以可以通过此命令的响应正确与否,判断插入的是MMC卡还是SD卡。

得到正确的响应后,主机可以继续通过CMD10读取SD卡的CID寄存器,通过CMD16设置数据Block长度,通过CMD9读取卡的CSD寄存器。从CSD寄存器中,主机可获知卡容量,支持的命令集等重要参数。

此时,卡已进入了传输状态,主机就可通过CMD17/18和CMD24/25对卡进行读写。

继SD1.1之后又推出了SD2.0,主要特性是支持更大容量。SD1.1中卡容量存放于CSD寄存器中,而由于其规范中相关域的值较小,固最大只能表示2G地址。随着Nand容量的大大提高,SD1.1已经不适合潮流,因而推出了SD2.0。

初始化流程大同小义,只需要CMD0之后再加上CMD8命令的识别。SD1.1不支持CMD8,而SD2.0的CMD8能读到卡的接口信息。如果卡响应CMD8为无效命令,则走SD1.1的流程,可能是SD1.1或MMC。如CMD8响应正确,则很可能是SD2.0了。


 

五、加密

SD卡具有安全加密功能,内置128bit加密位,在加密状态下,用户需提供密码才可以访问卡内的数据。

在卡上电时,若卡包含密码,卡自动进入锁定状态,读写命令均返回错误,以保护卡内容不被读出及修改。

密码设置功能由CMD42实现,其数据包中包括该命令中所有的信息。

Byte

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

0


 

Erase Card

Lock/UnLock

ClrPwd

SetPwd

1

Psw_Length

2

Pwd Data


 


 


 

PwdLen+1


 

擦除:此位置1时,卡的密码和内容会被强制擦除,在遗忘密码时可使用此功能。

锁定/解锁:此位置1时,表示命令结束后状态为锁定,为0,表示卡解锁。

清除密码:此位置1,表示清除卡的旧密码,此时数据中必须包含旧密码的正确内容。

加密:此位置1,表示设置卡的新密码,数据中必须包含新密码内容;更改密码时,新密码紧跟随旧密码内容。

注:在CMD42命令之前,首先要使卡工作在传输状态,在SD模式下可使用CMD7进行状态转换,在SPI模式下,可使用初始化序列进行状态切换。

 

在任意刻,主机可以通过CMD13命令读取卡的内部状态,判断其锁定状态。定义如下:

图略

bit0置1表示卡处于锁定状态。

1、设置密码

使用CMD16设置Block长度为密码长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;

使用CMD16恢复原Block长度。


 

2、清除密码

使用CMD16设置Block长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x02,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;

使用CMD16恢复原Block长度。


 

3、卡的锁定、解锁

使用CMD16设置Block长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x04,LEN,密码[LEN]……,0xFF,0xFF;

使用CMD16恢复原Block长度。


 

4、修改密码

使用CMD16设置Block长度为OLD_PWD_LEN+NEW_PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x05,LEN,旧密码[n],新密码[m]……,0xFF,0xFF;

使用CMD16恢复原Block长度。


 

5、卡擦除

使用CMD16设置Block长度为1;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x08,0xFF,0xFF;

使用CMD16恢复原Block长度。


 

修订内容:
    增加: 增加了SD2.0与SD1.1的识别说明。
    修改:原文使用CMD9设置Block长度,实际应为CMD16。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接触式IC加密解密工具是一种用于读取和写入接触式IC中存储数据的设备。接触式IC是一种集成电路片,内部存储有加密的数据,常用于银行、身份证等各种应用场景。 这种工具通常由硬件设备和相应的软件组成。硬件设备通常包括一个IC插槽,用于将IC插入其中,以及与计算机或终端设备连接的接口,如USB接口。软件则负责与硬件设备进行通信,并提供加密解密算法以读取和写入IC中的数据。 使用接触式IC加密解密工具时,首先将IC插入读器的插槽中。然后,通过与计算机或终端设备的连接,将工具与设备进行通信。用户可以使用相应的软件来操作工具,选择读取或写入IC中的数据。在读取数据时,工具将通过接触式与IC进行通信,并解密被加密的数据。在写入数据时,工具将对即将写入IC的数据进行加密处理,以确保数据的安全性。 接触式IC加密解密工具在金融、身份验证等领域具有广泛的应用。它可以帮助用户读取和操作IC中的加密数据,如读取银行余额、授权信息等。同时,它还能对要写入IC的数据进行加密处理,保护数据的机密性和完整性。 总而言之,接触式IC加密解密工具是一种用于操作接触式IC的设备。它能够读取和写入IC中的数据,并提供加密解密功能,以确保数据的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值