S3c2410_SDIO_调试笔记

一:SDIO简介

    在介绍SDIO原理前,还是先来点SDIO知识的普及工作吧!

新兴的消费性电子产品不仅要求大容量,高速,而且要求数据的保密性。因此,美国MEI公司,美国SanDisk 公司,日本Toshiba 公司,组成联合小组推出SD Card协议规范。该协议规范定义了SD Memory Card和SDIO Card。

我们平常所说的SD卡即SD Memory Card(Secure Digital Memory Card安全数字存储卡),专为存储数据而设计。该协议规范定义了SD Memory 卡的电压范围为1.6~3.6V,默认模式下最大时钟为25Mhz,速率最大可达到12.5M字节/秒(4根数据线);高速模式下,最大时钟可达到50Mhz,速率最大可达到25M字节/秒(4根数据线)。并支持SPI传输模式。目前规范的V1.10版本最大容量只支持到2Gbyte,但未来可达到32Gbyte。

SDIO Card ,即Secure Digital Input/Output Card(安全数字输入输出卡),是与SD Memory Card兼容的一种卡。其兼容能力包括:机制,电气特性,功耗,信号,软件。SDIO Card是为高速数据I/O传输,低功耗移动电子设备而设计的。目前,应用在wifi,gps,gprs,条码扫描器等设备接口部分。其电压范围为2.0~3.6V。协议规范定义了两种类型的SDIO Card,即高速SDIO Card和低速SDIO Card。高速SDIO Card 支持SPI,1-bit SD 和4-bit SD 传输模式,其时钟最大可达到25Mhz,速率最大可达到10M字节/秒。低速SDIO Card,只需要SPI和1-bit SD 传输模式,4-bit模式可选,其时钟最大为400Khz。

二:深入SDIO

虽然,SDIO接口的产品越来越多,但相比SD Memory Card来说,网上的资料很少。也就是说,基本上要靠自己了,网络帮不了你什么忙!

S3C2410 datasheet中SDIO部分的介绍不够详细,很多部分仅仅提到,因此我怀疑sumsung们并不重视这一部分。或者说,他们不擅长这部分。

不管调试哪个从设备,第一步想到应该是去读出该设备的ID号,因为每个设备肯定是有ID号的,而且在其Datasheet中应该有说明,这是证明你读写寄存器最简单的方法了。对于很多I2C总线接口的设备,读出设备的ID号比较简单,只要读出存放该设备ID号的寄存器就OK了;但,针对SDIO接口规范,要读出SDIO卡的ID号,就不只操作一个寄存器这么简单了。因为,SDIO的最大速率达到10Mbyte,这么高的速率肯定是以其复杂的协议规范为代价的。

2.1 SDIO Signal Pins

1.jpg

三 读SDIO card ID 号

    要读出ID号,需要对卡进行初始化工作。下面是我在S3c2410上调试conexant wifi card 时的初始化顺序

2.jpg

 

3.1  S3C2410—SDIO相关寄存器设置

  对S3c2410的设置,要根据下列几种情况来考虑

   1,polling方式;

   2,interrupt 方式;

   3,DMA方式;

      因为,我最终是要用到DMA方式,所以我这里只介绍DMA方式的设置。(在调试过程中,一般是先从polling开始调试,因为其最简单)但,因初始化过程中只发送几个命令,所以,我还是采用的polling方式,即使用CMD53命令时,我才用到DMA。

    而初始化时只需要设置rSDIPRE,rSDICON,rSDIDTIMER三个寄存器:

    rSDIPRE:SDI 波特率设置寄存器,在发送数据前,波特率一般设置到400Khz;

    rSDICON:SDI 控制寄存器,只需ByteOrder, FRST, CTYP置位;

    rSDIDTIMER:数据超时寄存器;(等待SDI数据响应时间,一般设置到0xff00)

    在设置完这些寄存器后应该delay 74个clock。

    注意:发送每个命令前rSDICARG(命令参数寄存器),rSDICCON(命令控制寄存器)是必须设置的。

 

3.2 如何判断命令是否发送正确

       命令发送后,需要根据rSDICSTA(命令状态寄存器), rSDIRSP0-3(命令响应寄存器)来判断是否正确响应。  

                       rSDICSTA(命令状态寄存器)

3.jpg

 

 

如果,RspFin位置位,表示命令响应结束,但这并不代表命令响应正确,还有检测RspCrc, CmdTout 是否置位,如果置位则表示发生错误。(在发送cmd5时,crc位可以不管, 个人认为)在检测状态位的同时,还要判断RspIndex是否为你发送时的命令号。

       rSDIRSP0-3(命令响应寄存器)要根据你所发送的命令来解析是否正确。

3.3 得到CIS 结构指针地址

     3.3.1 什么是CIS

4.jpg

每个SDIO card 有一个CIS区域,在这个CIS区域内分成0-7八段,对应到FN0-FN7(Function Number 0-7)。而且,每个段的CIS都有一个CIS pointer(CIS 指针)指向其起始地址。(FN0-7代表每个SDIO卡支持功能数,发送CMD5后,响应R4的Number of I/O function 域指示卡所支持的最大功能号。即,如果Number of I/O function == 1,那么表示此卡支持FN0和FN1。FN0是每个卡都支持的,存放卡最基本的信息,Card Common Card Information Structure表示的就是这个意思,卡的ID号就存放在FN0所对应的CIS中,所以要读出卡的ID号,首先就要得到FN0所对应CIS的指针)

          对,CIS(CIA)区域的读写操作是通过CMD52来实现的。

          例:

          我在得到conexant wifi card CIS指针时操作如下:

           因为,卡ID号存放在common CIS内,所以我们需要操作FN0。根据SDIO协议规范FN0 CIS Pointer地址为0x09, 0x0A, 0x0B:

          

5.jpg

作者:下家山

(见Simplified SDIO Card Specification.pdf  35page)因为,CMD52响应后返回数据为8bit,所以要送三次。第一次:

                  rSDICARG == 0x00001200;

                  rSDICCON == 0x00000B74;

                  响应

                  rSDICSTA == 0x00000A34;

                  rSDIRSP0 == 0x00001000;

                                  解读0x00001200

  0            000            0           0      00  0000 0000 0001 001     0       0000 0000

R/W flag

Function Number

RAW flag

Stuff

Register Address

Stuff

Write data or stuff bits

 1              3              1             1          17             1             8

                                  解读0x00000B74(略)

                                  解读0x00000A34(略)

                                  解读0x00001000

                  0x00001000的低8位表示从地址0x09读出来的值为0x00;

第二次:

                  rSDICARG == 0x00001400;

                  rSDICCON == 0x00000B74;

                  响应

                  rSDICSTA == 0x00000A34;

                  rSDIRSP0 == 0x00001010;

                                  解读0x00001400

  0            000            0           0      00  0000 0000 0001 010     0       0000 0000

R/W flag

Function Number

RAW flag

Stuff

Register Address

Stuff

Write data or stuff bits

 1              3              1             1          17             1             8

               解读0x00000B74(略)  解读0x00000A34(略)解读0x00001010

                  0x00001010的低8位表示从地址0x0a读出来的值为0x10;

第三次:

                  rSDICARG == 0x00001600;

                  rSDICCON == 0x00000B74;

                  响应

                  rSDICSTA == 0x00000A34;

                  rSDIRSP0 == 0x00001000;

                                  解读0x00001600

  0            000            0           0      00  0000 0000 0001 011     0       0000 0000

R/W flag

Function Number

RAW flag

Stuff

Register Address

Stuff

Write data or stuff bits

 1              3              1             1          17             1             8

                                  解读0x00000B74(略)解读0x00000A34(略)

                                  解读0x00001000

        0x00001000的低8位表示从地址0x0b读出来的值为0x00;

   最后,可以得到FN0 CIS指针地址为0x001000。

3.4 读出ID号

     同样,读出ID号也是通过CMD52来实现的。(见5.2  CMD52及响应剖析

          我们可以从SDIO 协议规范中看出CIS 的整个区域地址范围为0x00001000~0x00017fff。

      而,我刚才读出FN0 的CIS指针地址为0x001000,这证明是正确的。那么出厂时,这些CIS信息是如何存放在0x001000所在的区域的呢?以FN0为例,听我一一道来:

          在0x001000起始的区域,SDIO 协议规范是以一个或多个链(连起来的列表)被称为数据块或tuples(便士)来组织这些CIS信息的。    

作者:下家山
 

每个链节点有三个域:

           第一个域: 00 byte,表示tuple code号,也即TPL_CODE Tuple code: CISTPL_xxx(各种代码号见Table13-2);

           第二个域:01 byte,表示tuple body字节数,也即到下一个节点的偏移地址;

           第三个域:02~n+2 byte,表示tuple body内容;

7.jpg

有了这些知识,我们再来看我读写conexant wifi sdio card ID号的操作:

       步骤一:读地址0x001000

              rSDICARG == 0x00200000;

              rSDICCON == 0x00000B74;

              响应

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x 00001021;                   

              解读0x00000B74(略)

             解读0x00000A34(略)

             解读0x00001021:0x00001021的低8位表示从地址0x001000读出来的值为0x21,查看table13-2得知为CISTPL_FUNCID

       步骤二:读地址0x001001

              rSDICARG == 0x00200200;

              rSDICCON == 0x00000B74;

              响应

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001002;                               

             解读0x00000B74(略)

             解读0x00000A34(略)

             解读0x00001002:0x00001002的低8位表示从地址0x001001读出来的值为0x02,根据table13-1可知CISTPL_FUNCID的tuple body大小为2字节,读出来的第一个tuple code号并不为CISTPL_MANFID(0x20),而且知道其下一个节点的偏移量为2,需要继续读。

       步骤三:读地址0x001004

              rSDICARG == 0x00200800;

              rSDICCON == 0x00000B74;

              响应

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001022;                             

             解读0x00000B74(略)

             解读0x00000A34(略)

             解读0x00001022:0x00001022的低8位表示从地址0x001004读出来的值为0x22,查看table13-2得知为CISTPL_FUNCE

     步骤四:读地址0x001005

              rSDICARG == 0x00200A00;

              rSDICCON == 0x00000B74;

              响应

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001004;                               

             解读0x00000B74(略)

             解读0x00000A34(略)

             解读0x00001004:0x00001004的低8位表示从地址0x001005读出来的值为0x04,根据table13-1可知CISTPL_FUNCE的tuple body大小为4字节,读出来的第一个tuple code号并不为CISTPL_MANFID(0x20),而且知道其下一个节点的偏移量为4,需要继续读。

    步骤五:读地址0x00100A

              rSDICARG == 0x 00201400;

              rSDICCON == 0x00000B74;

              响应

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001020;                             

             解读0x00000B74(略)

             解读0x00000A34(略)

             解读0x00001020:0x00001020的低8位表示从地址0x00100A读出来的值为0x20,查看table13-2得知为CISTPL_MANFID

     步骤五:读地址0x00100C

              rSDICARG == 0x 00201800;

              rSDICCON == 0x00000B74;

              响应

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001013;                            

            解读0x00000B74(略)

             解读0x00000A34(略)

             解读0x00001013:0x00001013的低8位表示从地址0x00100C读出来的值为0x13,因为已得到CISTPL_MANFID节点号,根据Table13-1可直接读出tuple body信息,故此时地址为0x00100C,而非0x00100B。所以,读出来的值0x13即为conexant wifi sdio card ID号,这里你也可以读出0x00100B中的值,看CISTPL_MANFID的tuple body总共占多少字节,即可以把其所有信息读出来。

             其实,开始我并不知道,这0x13就为conexant wifi sdio card ID 号,只是我把后续的三个字节读出来才知道。这后续的三个字节是003826,这咋一看也不知道什么东东,但是,在我看conexant提供的驱动代码时,发现其fireware文件名为03826.h,这样我就猜出来了。你想想,这CIS里不放些这样的信息,放什么信息呢?后来的操作,证明我的猜测是正确的,在探索真理的过程中,需要摸着石头过河,既然是探索,就要边走边看,柳暗花明的好事是常有的!

   终于把如何读ID号写完,我要听听音乐了,上上网了。

作者:下家山

五.多字节传输

 ID号已经读出来了,

CMD52只是对单个寄存器进行读写操作,而SDIO的优势是多字节传输。SDIO的协议规范专门定义了一个命令CMD53来实现。

 多字节传输又分流方式和块方式。(Stream Mode or Block Mode)

 因为,要挂接DMA,所以我这里先介绍BlockMode。

 

 5.1 如何着手

       调试这类设备,一般是先写,然后读,看读出来的是否与写进去的相等。但,有时对一个全新的东西没有一点把握,此时可先读,看读出来的是不是那么回事。(如何把SDIO挂接到DMA上去,我这里就不介绍了)

 

 

 5.2对CMD53的理解

    S,D,Command Index,R/W Flag,CRC7,E这些域应该不用解释了;

    Function Number:在实际配置命令参数时,应该设置为多少呢?还记得发送CMD后的响应值吗,你这里的值要根据它来设置,在我的例子中,CMD5返回值中Function Number为1(即可支持到FN0和FN1),因为FN0中存放的是common CIS,所以,要读写卡内存,应该用FN1,故这里设置到1.

 Block Mode:       设置到1;

 OP code:           设置到0(固定地址);(我还没有完全搞懂 )

 RegisterAddress:     设置到0;(我还没有完全搞懂 )

 Byte/BlockCount:    设置到2,表示只传输2个块。

                     注意:如果BlockMode设置到0,表示以流方式(Stream)传输,Byte/BlockCount就应该是要传输的字节数;如果BlockMode设置到1,表示以块方式(Block)传输,Byte/BlockCount就应该设置为要传输的块的数目。

5.3 以块方式读10个字节

    5.3.1    CMD53配置

                  rSDICARG == 0x18000002;

                     rSDICCON == 0x00000B75;

                 响应

                     rSDICSTA == 0x00000A35;

                     rSDIRSP0 == 0x00001300;

 

                  解读0x00000B75(略)

                     解读0x00000A35(略)

                     解读0x00001300:参照R5可知发生了command out of range!   invalid function number!两个错误。对于这两个问题,因Function Number错误只涉及到一个位,所以先解决这个问题。根据参考代码(我这里有一份Marvell-wifi-sdio-card代码)发现有操作CCCR的02寄存器,但当时也没有去在意这个操作,后来细读SDIO规范,发现I/O enable这个寄存器是个非常重要的寄存器。

8.jpg
9.jpg

看到了吗?I/O Enable控制着IOE1~IOE7,这七个IOE对应着FN1—FN7,

所以要用FN1功能就必须使能IOE1。

       对I/O Enable的操作是通过CMD52来实现的。

5.3.2 对CCCR I/O Enable的操作

              CMD52配置

rSDICARG == 0x80000402;

                     rSDICCON == 0x00000B74;

                 响应

                     rSDICSTA == 0x00000A34;

                     rSDIRSP0 == 0x00001002;

                 解读

                  0x00000B74(略)

                     0x00000A34(略)

                0x00001002: 低8位表示写到I/O Enable寄存器的值为2。

      回到5.3.1,再次发送CMD53(内容略)。

      这次响应值为

                   rSDIRSP0 == 0x00001100;

     说明invalid function number错误已解决;还剩下command out of range错误,造成这个错误的

原因比较多,所以很难定位。这个地方花了我比较长的时间,后来同事提醒我块的尺寸设置没有(他

当时也在帮我看着部分),我突然想起参考代码有这个动作,只不过他放在写块中,而我调试的是读

块动作。所以,我马上把这个动作加进去了,果然得到了回应码0x00001000;

 

5.3.3 对FN1的I/O block size的操作

           CMD52配置

               设置block size低8位

rSDICARG == 0x8002200A;

                     rSDICCON == 0x00000B74;

                 响应

                     rSDICSTA == 0x00000A34;

                     rSDIRSP0 == 0x0000100a;

                 解读 0x00000B74(略)

                     0x00000A34(略)  0x0000100a: 低8位表示设置到FN1 Block Size大小的低字节为0x0a。

                设置block size高8位

rSDICARG == 0x80022200;

                     rSDICCON == 0x00000B74;

                 响应

                     rSDICSTA == 0x00000A34;

                     rSDIRSP0 == 0x00001000;

                 解读 0x00000B74(略)

                     0x00000A34(略)  0x00001000: 低8位表示设置到FN1 Block Size大小的高8位为0x00。回到5.3.1,再次发送CMD53(内容略)。这次响应值为

                   rSDIRSP0 == 0x00001000; OK!                

        而且,DMA中断发生了,并且得到了读出来的值。但,因不知道这读出来的20个字节为何物,所以还得先写,如果都以块操作应该没什么问题。

作者:下家山 

5.3 以块方式写10个字节

    5.3.1    CMD53配置

                  rSDICARG == 0x98000002;

                     rSDICCON == 0x00000B75;

                 响应

                     rSDICSTA == 0x00000A35;

                     rSDIRSP0 == 0x00001000;

                     rSDIDSTA == 0x00000010;

                    

                  解读0x00000B75(略)

                     解读0x00000A35(略)

                     解读0x00001000(OK)

解读0x00000010(发送完成)

   5.4 Stream Mode存在的问题(具体操作略

       其实,最开始我以简单起见,一直都是以Stream Mode方式操作的。

先写20个字节,好像也没发现什么异常,但,发现读时DMA中断不能发生。这是何故呢?

      在传送数据时还有个数据状态寄存器rSDIDSTA(其实,我每发送一个命令把所有的状态寄存器读打印出来了),发现在写块后,其值老为0x00000002,表示数据正在发送。明明发送完了,命令也正确响应,为什么还在发送呢?再后来,我又去掉写动作,只读,发现虽然把数据读出来,但数据状态寄存器rSDIDSTA老是0x00000001,表示正在接收。

        在此,我徘徊了很久,而且百思不得其解!

        一次偶然,我从Block Mode转到Stream Mode时忘了清S3c2410 SDIO 的数据控制寄存器rSDIDCON的【17】位,即Block Mode位,发现竟然读出了我想要的20个数据。我茫然,怎么会这样呢?既然是以Stream Mode方式,为什么S3C2410 SDIO数据控制寄存器要设成Block Mode方式呢?这难道是sumsung s3c2410 datasheet对SDIO部分介绍不够专业的原因?

 

  5.5  s3c2410 sdio 块传输相关寄存器设置

       只需注意rSDIDCON(数据控制寄存器)的设置:

       写时设置为rSDIDCON = 0x0033b002;

       读时设置为rSDIDCON = 0x002ba002;

六  SDIO协议规范—与—S3C2410寄存器对应关系

   6.1  CMD5剖析  

                        Cmd5 协议规范

 

S

D

Command Index

000101b

Stuff

bits

I/O OCR

 

CRC7

E

1   1        6              8              24                 7    1

S(tart bit):         Start bit. Always 0

D(irection):        Direction. Always 1 indicates transfer from host to card

Command Index:    Identifies the CMD5 command with a value of 000101b

Stuff Bits:          Not used, shall be set to 0

I/O OCR:         Operation Conditions Register. The supported minimum and maximum values for VDD. The layout of the OCR is shown follow

         

 

I/O OCR bit

  position

VDD voltage window

     (in Volts)

    0-3

    Reserved

     4

    Reserved

     5

    Reserved

     6

    Reserved

     7

    Reserved

     8

    2.0-2.1

     9

    2.1-2.2

     10

    2.2-2.3

     11

    2.3-2.4

     12

    2.4-2.5

     13

    2.5-2.6

     14

    2.6-2.7

     15

    2.7-2.8

     16

    2.8-2.9

     17

    2.9-3.0

     18

    3.0-3.1

     19

    3.1-3.2

     20

    3.2-3.3

     21

    3.3-3.4

     22

    3.4-3.5

     23

    3.5-3.6

                                             Table 1

CRC7:          7bits of CRC data

E(nd bit):        End bit, always 1

在S3C2410中要发送CMD5需要设置rSDICARG ,rSDICCON ,两个寄存器。

rSDICARG:SDI 命令参数寄存器;

rSDICCON:SDI 命令控制寄存器;

这两个寄存器合起来构成SDIO协议规范中的CMD5命令。其中:

    rSDICARG[24:0]=====================CMD5[31:8]       高8bit无效

    rSDICCON[7:0]======================CMD5[47:40]

个人观点: CMD5的stuff bit ,CRC7bit ,Endbit可以不管。因为他们的值固定,s3c2410已把他们做到SDIO控制器里面去了,实际发送命令时,这些位都传过去了,只是我们看不到而已。

作者:下家山

CMD5命令响应—与—S3C2410寄存器的对应关系

协议规定CMD5命令响应为R4,其响应格式为:

                            R4 响应格式

S

D

Reserved

C

Number

 Of I/O

functions

Memory

present

Stuff

Bits

I/O OCR

Reserved

E

1  1     6      1      3          1       3            24            7       1       

S(tart bit):         Start bit. Always 0

D(irection):        Direction. Always 0 indicates transfer from card to host

Reserved:         Bits Reserved for future use. These bits shall be set to 1.

C(omplete):       Set to 1 if card is ready to operate after initialization.

I/ OCR :          See Table 1

Memory Present:   Set to 1 if the card also contains SD memory . Set to 0 if the card is I/O only.Number of I/O Functions:Indicates the total number of I/O functions supported by this card. The range is 0-7. Note that the common area present on all I/O cards at Function 0 is not included in this count. The I/O functions shall be implemented sequentially beginning at function 1.

Stuff Bits :         Not used ,shall be set to 0.

个人观点: R4的长度为48bit,因为很多位是固定的,因此,S3C2410把它做到了一个响应

寄存器中,即rSDIRSP0(响应寄存器0)。

     发送CMD5命令后,通过Polling或interrupt方式读取rSDIRSP0中的值。我发

送CMD5(0x00000345)后得到的响应寄存器0的值为90FF8000。下面对90FF8000进行解码分析。

 1     001          0       000     1111 1111 1000 0000 0000 0000

 

C

Number

Of I/O

functions

Memory

Present

Stuff

Bits

    I/O  OCR

1      3           1        3            24

C(omplete) == 1 表示初始化完成;

Number Of I/O functions == 001 表示此SDIO card所支持的功能号为0~1;

Memory Present == 0 表示 此卡仅为I/O卡;

Stuff Bits == 000 (本应该为000)

I/O OCR == FF8000对应到Table1 ,即此卡支持的电压范围为【2.7v~3.6v】

6.2  CMD52及响应剖析

10.jpg

rSDICARG[7:0]=====================CMD52[15:8](Write Data or Stuff Bits)      

rSDICARG[8]=====================CMD52[16]  (Stuff)

rSDICARG[25:9]=====================CMD52[33:17]  (Register Address)

rSDICARG[26]=====================CMD52[34]  (Stuff)

rSDICARG[27]=====================CMD52[35]  (RAW flag)

rSDICARG[30:28]=====================CMD52[38:36]  (FunctionNumber)

rSDICARG[31]=====================CMD52[39]  (R/W flag)

 rSDICCON[7:0]======================CMD5[47:40](S/D/command index)

 

 
11.jpg
12.jpg

 

13.jpg

 

6.2.1 在S3c2410中,如何解读发送CMD52后的结果

     在s3c2410中,解读任何一个命令发送后的状态是通过读取rSDICSTA(命令状态寄存器), rSDIRSP0-3(命令响应寄存器),然后分析的。以我读取conexant wifi SDIO card 出厂ID号为例,发送CMD52后,得到的这两个寄存器的值为:

     rSDICSTA == 0x00000A34 

rSDIRSP0 == 0x00001013

                     解码0x00000A34 

0………..0      0          1         0           1           0        0011  0100

 

undefine

Response CRC Fail

Command Sent

Command Time Out

Response Receive End

CMD line progress

RspIndex

18            1         1         1           1          1             8

Command Sent == 1 表示命令已发送;

ResponseReceiveEnd == 1 表示命令响应结束;

RspIndex == 0x34 表示命令号为52(0x34)

这表明命令状态OK。

解码0x00001013

0……0      0       0       01       0    0    0         0       0001 0011

 

undefine

COM_CRC_ERROR

illegal_COMMAND

IO_CURRENT_STATE

ERROR

RFU

FUNCTION_NUMBER

OUT_OF_RANGE

Read or Write Data

16        1        1        2      1    1     1        1          8

IO_CURRENT_STATE == 01 表示 Execution CMD52 in CMD State;

Read or Write Data == 0x13 表示读出来的出厂ID号为0x13;

     个人观点:CMD52 Response (R5)中的stuff域,E域因其值固定而在S3c2410中没有表现出来,而CRC7在rSDICSTA中有专门的crc位指示。而,S域,D域,CommandIndex域也在rSDICSTA中的【7:0】显示出来了,所以在rSDIRSP0中没有必要再显示这些值

6.3  CMD53及响应剖析

14.jpg

 

15.jpg

rSDICARG[8:0]=====================CMD53[16:8]  (Byte/Block Count)

rSDICARG[25:9]=====================CMD53[33:17]  (Register Address)

rSDICARG[26]=====================CMD53[34]  (OP Code)

rSDICARG[27]=====================CMD53[35]  (Block Mode)

rSDICARG[30:28]=====================CMD53[38:36]  (FunctionNumber)

rSDICARG[31]=====================CMD53[39]  (R/W flag)

 rSDICCON[7:0]======================CMD5[47:40](S/D/command index)

 

   注意:CMD53的响应与CMD52一样为R5。

  

 关于SD Group:

     MEI(Matsu****a Electric Industrial Co.,LTD美国MEI公司,是无人值守自动支付电子交易系统,包括纸币器,硬币器,无现金支付系统,自动售货机管理解决方案的全球最大制造商之一),SanDisk Corporation(SanDisk, SanDisk 由 Dr. Eli Harari 在 1988 年创立,是一家在非易失性存储器技术方面享誉全球的国际性知名公司,已发展成为全球最大的闪存数据存储产品供应商。

 

同时为消费者(通过全球接近 200,000 个零售店面)和原始设备制造商 (OEM) 提供服务,SanDisk 设计、开发、制造和销售适用于各种电子系统和数字设备的闪存卡和其它产品。另外,SanDisk 还授权其它多个业界领先的公司使用其技术。

 

凭借闪存以紧凑、活动格式存储大量数据的功能,SanDisk 的产品已帮助推动数码相机、多功能移动电话、USB 闪存盘、MP3 音乐播放器和其它数字消费性设备的销售呈级数增长。

SanDisk 当前在美国拥有大约 720 项专利,在其它国家或地区拥有大约 400 项专利,而且是全球唯一一家有权制造和销售各种主要闪存卡格式的公司,这些格式包括 CompactFlash®、SD™、miniSD™、Micro SD、MultiMediaCard™、小型 MultiMediaCard (RS-MMC™ )、Memory Stick PRO™ 及相关的 Memory Stick™ 产品、xD-Picture 卡和™ USB 闪存盘。

),Toshiba Couporation(Toshiba,日本东芝)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值