电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章嵌入式系统利用SD存储介质扩展MAXQ2000的非易失性数据存储空间

利用SD存储介质扩展MAXQ2000的非易失性数据存储空间

11-20 17:12:19 | http://www.5idzw.com | 嵌入式系统 | 人气:458
标签:嵌入式系统开发,嵌入式开发,http://www.5idzw.com 利用SD存储介质扩展MAXQ2000的非易失性数据存储空间,http://www.5idzw.com

将SD卡初始化为SPI模式

刚上电时,SD卡缺省使用专有的SD总线协议。为了将SD卡切换到SPI模式,主机应发出命令0 (GO_IDLE_STATE)。SD卡会检测到SPI模式选择信息,因为卡选择(CS)引脚在该命令和其它所有SPI命令传送过程中都保持为低电平。SD卡以R1响应(图4)作为回应。空闲状态位被置为高电平,表明SD卡已进入空闲状态。为了保持与MMC卡的兼容性,此阶段的SPI时钟频率一定不能超过400kHz。

图4. R1响应指示发出的命令是否成功执行。
图4. R1响应指示发出的命令是否成功执行。

SD卡进入SPI模式后,SD规范要求主机在进行其它任何请求之前先发送一条初始化命令。为了能区分MMC卡和SD卡,SD卡采用了一种不同的初始化命令,MMC卡对该命令是不响应的。先向卡发送命令55 (APP_CMD),紧接着再发送应用命令41 (SEND_OP_COND),这样即完成了这个重要的步骤。MMC卡对命令55不做回应,通过这一点可鉴别出MMC卡,并将其视作无效介质而拒绝访问。这个命令序列要一直重复执行,直到来自存储卡的R1响应中所有位均为0 (也就是说,IDLE位变为低)才停止。

清单1. 代码必须用SEND_OP_COND来识别SD和MMC卡。
清单1. 代码必须用SEND_OP_COND来识别SD和MMC卡。

SD卡包含了一些重要的寄存器,用来提供SD卡的相关信息。最重要的寄存器是存储卡特定数据寄存器(CSD)。对于我们的应用示例而言,我们感兴趣的是存储器的数据块大小和总容量。我们还必须对存储卡标识数据寄存器(CID)加以注意,因为它包含了存储卡的制造商详细信息和序列号。图5显示了CSD寄存器和CID寄存器的配置结构。

图5. CSD寄存器和CID寄存器提供SD卡的相关信息。
图5. CSD寄存器和CID寄存器提供SD卡的相关信息。

检查SD卡的响应

要读取存储卡的寄存器或数据块,我们首先必须理解存储卡如何响应我们的请求。在SPI模式下,SD卡以R1应答SEND_CSD (9)、SEND_CID (10)和READ_SINGLE_BLOCK (17)命令。接着则是一个起始令牌,然后是所请求的数据,最后是数据的CRC-16校验和。我们不能想当然地认为数据起始令牌是紧接着R1响应即刻发出的,因为总线在这两个事件之间会进入空闲状态一段时间。图6显示了数据响应的细节。

图6. 从SD卡到主机的数据传输要加入一个起始令牌作为前缀。
图6. 从SD卡到主机的数据传输要加入一个起始令牌作为前缀。

读取CSD寄存器和CID寄存器的元数据

使用SEND_CSD和SEND_CID命令可返回寄存器的内容,以便确定SD卡的参数。这些命令分别返回与CSD或CID寄存器容量大小一致的固定数量的字节。SEND命令字节中包含的参数被SD卡忽略。

从SD卡中读取一个数据块

从SD卡中读取一个数据块是相当简单的。主机发出READ_SINGLE_BLOCK命令,并将起始字节地址作为参数。这个地址必须和介质上一个块的起始位置对齐。然后SD卡会验证这个字节地址,并以一个R1命令作为响应。如果命令中的地址越界,则会在命令响应中指示这种情况。

如果完成了SD介质的读取操作并且没有错误发生,则先发送一个起始数据令牌,接着是固定数量的数据,最后是两个字节的CRC-16校验和。如果SD卡碰到硬件故障或介质读取错误,则不会发送起始数据令牌。而是发送一个错误令牌,数据传输随之中止。

向SD卡中写入一个数据块

写入一个数据块和读取数据块类似,即主机必须提供一个与SD卡数据块边界对齐的字节地址。写入数据块的大小必须与READ_BL_LEN相同,一般为512字节。通过发出WRITE_BLOCK (24)命令启动写操作过程,SD卡将以R1命令响应格式进行应答。如果命令响应表明写操作可以进行,则主机发送数据起始令牌,接着是固定数量的数据字节,最后以发送数据的CRC-16校验和结束。SD卡返回一个数据响应令牌以指示待写入的数据是否被接受。

如果数据被接受,SD卡会在存储卡忙时始终将DO线保持为低电平。存储卡忙期间,主机不必始终将卡选择线保持为低电平,如果解除CS选择状态,SD卡将释放DO线。当多于一个的设备与SPI总线连接时,上述处理方式非常有用。主机可以一直等待SD卡释放忙指示标志,也可以定期触发片选信号以检查存储卡的工作状态。如果卡仍然处于忙状态,它会将DO线拉低以指示该状态。否则,存储卡会使DO线返回至空闲状态(见图7)。

图7. 从主机到SD卡的数据传输使用一套更为复杂的握手机制。
图7. 从主机到SD卡的数据传输使用一套更为复杂的握手机制。

SPI命令与数据错误检测

可利用CRC-7和CRC-16校验来检测主机与SD卡间的通信错误。如果因物理因素而导致错误发生,如在插入、移除时的触点抖动,或是可拆卸介质固有的接触不良状况,错误检测机制可实现坚固的错误恢复功能。我们强烈建议使用校验和机制,这可以通过发出CRC_ON_OFF (59)命令并将参数的最低位置为高来启动该功能。

清单2. 强烈推荐使能CRC校验和。
清单2. 强烈推荐使能CRC校验和。

结论

SD存储卡为嵌入式系统提供了一种紧凑和低功耗的非易失性存储器方案。利用MAXQ2000微控制器提供的硬件SPI模块,能以极少的开销访问SD介质卡。Maxim公司提供的参考软件(可由www.maxim-ic.com.cn/MAXQ2000_SD获取)演示了一个最小的实现方案,包括从SD卡读取数据块和向SD卡写入数据块所需的基本操作。

上一页  [1] [2] 

,利用SD存储介质扩展MAXQ2000的非易失性数据存储空间
上一篇:MAXQ揭密
关于《利用SD存储介质扩展MAXQ2000的非易失性数据存储空间》的更多文章