Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9784
  • 博文数量: 5
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-12 02:02
文章分类
文章存档

2010年(5)

我的朋友
最近访客

分类: 嵌入式

2010-01-13 03:16:00

4 数据传输模式

直到主机知道所有CSD寄存器的内容,fpp时钟速率必须保持在fOD,因为一些卡有操作频率限制。主机发送SEND_CSDCMD9)获取卡定义数据(Card Specific DataCSD寄存器),如块大小、卡存储容量、最大时钟速率等。

 

CMD7用来选择一个卡并将它置于传输状态(Transfer state),在任何时间只能有一个卡处于传输状态。如果已有一个卡处于传输状态,它和主机的连接将释放,并返回到Stand-by状态。当CMD7以保留相对地址“0x0000发送时,所有卡将返回到Stand-by状态。这可以用来识别新的卡而不重置其他已注册的卡。在这种状态下已有一个RCA地址的卡不响应识别命令(ACMD41,CMD2,CMD3)。

注意:当卡接收到一个带有不匹配RCACMD7时,卡将取消选中。在公用CMD线时,选中一个卡时将自动不选中其他卡。因此,在SD卡系统中,主机具有如下功能:

l        初始化完成后,在公用CMD线时,不选中卡是自动完成的。

l        如果使用单独的CMD线,需要关注不选中卡的操作

在主机和选择的SD卡之间的所有数据通信是点对点的方式。所有寻址命令都需要响应。

不同数据传输模式的关系如图4-8所示,使用如下步骤:

l        所有读数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。数据传输将中止,卡回到传输状态(Transfer State)。读命令有:块读命令(CMD17),多块读命令(CMD18),发送读保护(CMD30),发送scr(ACMD51),以及读模式的通用命令(CMD56)

l        所有写数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。在不选中卡命令CMD7前写命令必须停止。写命令有:块写命令 (CMD24 and CMD25), CID (CMD26), CSD(CMD27), lock/unlock 命令(CMD42) 以及写模式通用命令(CMD56)

l        一旦数据传输完成,卡将退出数据写状态并进入Programming State(传输成功)Transfer State(传输失败)。

l        如果一个快写操作停止,而且最后一块块长度和CRC是有效的,那么数据可以被操作(programmed)。

l        卡可能提供块写缓冲。这意味着在前一块数据被操作时,下一块数据可以传送给卡。如果所有卡写缓冲已满,只要卡在Programming StateDAT0将保持低电平(BUSY)。

l        CSDCID、写保护和擦除时没有缓冲。这表明在卡因这些命令而处于忙时,不再接收其他数据传输命令。在卡忙时DAT0保持低电平,并处于Programming State。实际上如果CMDDAT0线分离,而且主机占有的忙DAT0线和其他DAT0线分开,那么在卡忙时,主机可以访问其他卡。

l        在卡被编程(programming)时,禁止参数设置命令。参数设置命令包括:设置块长度(CMD16),擦除块开始(CMD32)和擦除块结束(CMD33)。

l        卡在操作时不允许读命令。

l        使用CMD7指令把另一个卡从Stand-by状态转移到Transfer状态不会中止擦除和编程(programming)操作。卡将切换到Disconnect状态并释放DAT线。

l        使用CMD7指令可以不选中处于Disconnect状态的卡。卡将进入Programming状态,重新激活忙指示。

l        使用CMD0CMD15重置卡将中止所有挂起和活动的编程(programming)操作。这可能会破坏卡上的数据内容,需要主机保证避免这样的操作。

 

4.1 宽总线选择/不选择

宽总线(4位总线宽度)操作模式通过ACMD6选择和不选择。在上电后或GO_IDLECMD0)命令后默认的总线宽度是1位。ACMD6命令只在“tran state”有效,即只有在卡选中后(CMD7)总线宽度才能修改。

4.2 读数据格式

DAT总线在没有数据传输时处于高电平。一个传输数据块包含一个起始位(LOW),接着连续的数据流。数据流包含有效数据(如果使用了ECC了还包括错误纠正位)。数据流以一个结束位(HIGH)结束。数据传输和时钟信号同步。

以块传输的有效数据包含CRC校验和。产生多项式是标准 CCITT多项式。

采用了缩短的BCH码,d=4,有效数据长度最长为2048字节。CRC校验和对每个DAT线单独计算并附加在每个数据块后。在宽总线模式操作(DAT0-DAT3)中,16位的CRC校验对每个DAT分别计算。

数据块读

传输的基本单位是数据块,最大尺寸在CSD中定义(READ_BL_LEN)。开始和结束地址完全包含在一个物理数据快(如READ_BL_LEN定义)中的较小的块也可以传递。CRC附加在每个数据块的尾部用来保证数据传输的完整性。CMD17READ_SINGLE_BLOCK)开始一个块读操作,然后传输完成后进入Transfer状态。CMD18(READ_MULTIPLE_BLOCK)开始连续的块传输,直到停止命令。停止命令有一个执行延迟。在停止命令最后一位发送完以后数据传输停止。

如果主机使用累计长度不是块对齐的部分块,在第一个不对齐块的开始,卡会发现一个块未对齐错误,在状态寄存器中设置ADDRESS_ERR错误,中止传输并等待(在Data状态)停止命令。

4.3 数据写格式

数据写传输格式类似于读格式。对于以块为单位的写数据传输,CRC检验位附加到每个数据块。卡的每根数据线在接收到数据并在写操作前,执行CRC校验。

数据块写

数据块写(CMD24-27,42,56(W),一个或多个数据块从主机发送给卡,主机在每个数据块后附加CRC校验。数据块长度WRITE_BL_LEN512B)。如果CRC校验失败,卡将在DAT数据线上指示错误。传输的数据将被抛弃,而且后续传输的数据块(在多数据块写模式)也都会被忽略。

多数据块写命令比连续的单数据块写命令速度快。不允许部分块写(小于512B)。

当主机试图在写保护区域写数据时写操作将中止。在这种情况下,卡在状态寄存器设置WP_VIOLATION位,并忽略所有后续数据传输,并在Receive-data状态下等待停止命令。

CIDCSD寄存器进行编程操作不需要实现设置块长度,传输的数据也是CRC保护的。如果CSDCID寄存器一部分存储于ROM中,那么不可改变部分必须和接收缓冲中的相应部分内容保持一致。如果匹配失败,卡将报告一个错误,而且不改变任何寄存器内容。

接收到一个数据块并完成CRC校验后,卡将开始写,如果写缓冲满而且不能从一个新的WRITE_BLOCK命令接收新数据时, DAT0线保持为低电平。任何时候主机都可以通过SEND_STATUS(CMD13)命令获取卡的状态。状态位READY_FOR_DATA指示卡是否可以接收新数据或写操作还在进行中。主机通过CMD7(选中另一个卡)不选中卡,这个操作可以把卡的状态编程Disconnect并释放DAT线而不中断写操作。当不选中卡时,如果编程还在进行而且写缓冲不可用时,将通过下拉DAT为低电平来重新激活忙信号。实际上,主机通过interleaving可以实现多个卡同时写操作,interleaving过程可以通过在卡忙时访问其他卡实现。

预擦除设置优先于多数据块写操作

设置多个写数据块的预擦除(ACMD23)可以使得接下来的多个数据块写操作比没有预先执行ACMD23的相同操作更快。主机可以通过该命令设置多少个数据块将在接下来的写操作中发送。如果在所有数据块发送给卡时中止了写操作(使用停止传输命令),残余写数据块的内容(指要写入新内容的数据块?)将变得不确定(可能已擦除或还是原来的数据)。如果主机发送了超过ACMD23中定义的数据块数目的数据,卡将逐个擦除数据块(在收到新数据时)。多数据块写操作完成后值将重新设置为默认值1

建议在CMD25命令前使用该命令以加速写操作。如果需要预擦除主机在写命令前发送ACMD23。如果不发送ACMD23命令,设置的预擦除数将在其他指令执行时自动清除。

发送写数据块数目

系统使用管道机制进行数据缓冲管理,有时候在多数据块写操作过程中发生错误,使得无法确定哪一个数据块是最后成功写入的数据块。卡可以把正常写入的数据块数(the number of well-written blocks)作为对命令ACMD22的响应。

擦除

同时擦除多个写数据块可以提高数据吞吐量。通过ERASE_WR_BLK_START(CMD32)ERASE_WR_BLK_END(CMD33)实现写数据块的识别。

主机必须严格按照下列的命令操作顺序:ERASE_WR_BLK_STARTRASE_WR_BLK_ENDand ERASE (CMD38)

如果不按顺序接收到擦除指令(CMD38)或地址设置指令(CMD32,33),卡将在状态寄存器中设置ERASE_SEQ_ERROR位,并重置整个顺序(sequence)。

如果接收到一个不顺序的命令(除了SEND_STATUS),卡将在状态寄存器设置ERASE_RESET状态位,重置擦除顺序和执行最后的命令。

如果擦除范围包括写保护扇区,将不被擦除,擦除命令只擦除无保护的扇区。状态寄存器的WP_ERASE_SKIP位将设置。

地址设置命令中的地址是以字节为单位的块写地址。卡将忽略所有小于WRITE_BLK_LENCSDLSB(最低有效位)。

如上所述的块写操作,卡通过保持DAT0为低电平指示擦除操作正在进行中。实际的擦除操作时间可能会很长,主机可以通过CMD7不选中卡或执行卡断开操作。

卡上擦除操作后的数据为“0”或“1”,由卡制造商确定。SCR寄存器的DATA_STAT_AFTER_ERASE(bit55)定义了是“0”或“1”。

4.4 写保护管理

写保护方法如下:

l         机械写保护开关(由主机负责)

l         卡内部写保护(由卡负责)

l         密码保护锁操作

4.4.1 机械写保护开关 4.4.2 卡内部写保护 4.4.3 密码保护锁操作

 

5 时钟控制

SD卡主机可以使用SD卡总线时钟信号设置卡进入节能模式或控制总线上的数据流。主机可以降低时钟频率或直接关闭。

SD卡主机必须遵循下列约束:

l         总线频率可以在任何时候改变(满足最大和最小值的约束)。

l         ACMD41(SD_APP_OP_COND)是一个例外。发送ACMD41命令后,主机将执行下面步骤1和步骤2直到卡进入就绪状态:

1)        持续发送100KHZ-400KHZ之间的时钟频率。

2)        如果主机要停止时钟,通过ACMD41命令以小于50ms的间隔设置busy位。

 

6 CRC
7
错误条件

7.1 CRC
和非法命令
阅读(975) | 评论(0) | 转发(0) |
0

上一篇:SD操作学习(转)

下一篇:没有了

给主人留下些什么吧!~~