电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章嵌入式系统利用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)媒体格式扩展MAXQ2000的非易失数据存储器。

低功耗、低噪声的MAXQ2000微控制器适合于多种应用。MAXQ2000在闪存中存储非易失性数据,并和用户代码空间共享32k字(64kB)的闪存容量。但如果你的应用需要更多的非易失性存储器怎么办呢?这篇文章说明了如何使用安全数码(SD™)存储介质来扩展MAXQ2000的非易失性数据存储器。

外部存储器的设计考虑

对于你的应用设计来说,首要应该考虑电源电压和电流的要求。在典型的MAXQ2000应用中,可采用一个双路线性稳压器,从而在所选的时钟频率下使处理器工作于尽可能低的核心电压(VDD)下。MAXQ2000的VDD电压可低至1.8V。VDDIO为MAXQ2000的I/O引脚供电,允许的电压范围最低至VDD,最高可达3.6V。可接受的外部存储器电流消耗受限于电源的额定电流,对于电池供电设备,则电流消耗受限于电池系统的容量。

其次,在保证能为目标应用提供足够带宽的前提下,应将连接外部存储器的MAXQ2000 I/O数限制到最少。例如,Atmel的AT29LV512闪存芯片与一个主机微控制器连接时,需要15条地址线、8条数据线和3条控制线。由于MAXQ2000没有外部地址/数据总线,在上述例子中,就需要由软件来控制总线事务。对于某些应用来说,这种方法不能很有效地利用MAXQ2000的I/O引脚。

然而,基于SPI™和I²C的外部闪存器件只需要3到4个接口引脚。MAXQ2000具有一个硬件SPI模块,而I²C在MAXQ2000上必须由用户通过软件实现(即"位模拟")。这种集成功能使得SPI接口成为访问外部非易失性存储器的主要途径。

SD存储卡

SD存储介质是一种非易失性外部存储器,可满足许多应用的上述要求。SD格式是"多媒体卡" (MMC)格式的继任产品。SD卡存储器一般工作于3.3V电压,具有适度的电流要求。SD卡的容量从几兆字节到最高4GB不等。容量范围如此之宽,可为众多应用提供充足的外部存储空间。

由于SD卡采用专有的共享总线,乍一看,似乎很难与MAXQ2000接口。然而,SD继承了MMC的第二总线格式-SPI。由于MAXQ2000提供SPI硬件支持,连接非常容易。

图1. MAXQ2000与SD存储卡的接口非常简单。
图1. MAXQ2000与SD存储卡的接口非常简单。

图1的电路图给出了一个典型应用电路。SD卡要求全双工、8位SPI操作。数据从MAXQ2000的MOSI引脚同步输入SD卡的DI引脚,并由SD卡的DO线同步输入MAXQ2000的MISO引脚。数据在CLK信号的上升沿同步输入和输出。在每次数据传输的末尾还必须提供8个额外的时钟,以允许SD完成任何未完结的操作。对应这些额外时钟的输入数据必须全为1。识别阶段的时钟频率必须限定在400kHz以内,但SD卡一经识别后,时钟频率便可提高到25MHz。

MAXQ2000的SPI模块

MAXQ2000包含一个硬件SPI模块,可以方便地针对SD卡接口进行配置。为了配置时钟极性和数据长度,需将SPICF寄存器置为全零。这种SPI模块配置在时钟的上升沿锁存数据,并将数据长度设置为8位。对于本应用,MAXQ2000的系统时钟频率为16MHz。在这种情况下,需要将SPICK寄存器置为0x28,从而使SPI时钟频率接近380kHz。必须将SPICN寄存器的低2位置位,以使能SPI主机模式。

SD SPI数据格式

SD卡的SPI协议与SD总线协议相似。如果一片SD卡没有数据要发送,则将DO引脚保持在全1的空闲状态,因此不是在每个时钟沿都从SD卡的DO引脚接收有效数据。当SD卡有数据要回送给主机时,要在数据之前先发送一些以0为起始位的特定令牌。当这些令牌发送完毕之后,SD卡要发送的所有定长数据立即被发送出去。由于接收器事先已经知道要接收的字节数,因而响应中不包含表征长度的字节。此外,由于在起始令牌和数据都发送完毕后才会进入空闲状态,所以全部数据字节都以不带前缀的原始形式发送。和总线上其它所有通信过程一样,令牌大小也要和SPI传输的8位边界对齐。主机发送给SD卡的指令和数据都遵循类似的格式,以全1指示总线空闲。除了状态令牌以外,所有传输都由附加在数据末尾的循环冗余校验(CRC)码进行保护。系统提供两种CRC算法:CRC-7用于小数据块,CRC-16则用于大数据块。CRC是SD SPI接口的可选部分,但除非应用系统限制它的使用,否则应该使用CRC来确保数据的完整性。

循环冗余校验

CRC算法通常用于检测由不可靠的通信通道引起的误差。特定CRC类型的选择根据需要保护的数据长度来决定。对于基于SD存储介质的数据,采用CRC-7和CRC-16编码方式。

CRC算法将被保护的数据用选中的除数进行除法运算,产生一个余数。因为该算法中用得的是多项式,所以该除法运算不含进位逻辑。无需考虑进位时,除法运算可通过逻辑XOR操作来实现。所选中的除数通常用CRC的多项式来表示。接着,计算出的余数和数据一起传输,接收器用此余数来检查确认数据在传输过程中是否正常。

对于CRC-7,余数可通过一个7位移位寄存器在软件中计算。计算开始时,将该移位寄存器初始化置为全零。当受保护数据的每一位(MSB在先)被移入移位寄存器的LSB时,移出移位寄存器的MSB,并进行检查。如果移出的位为1,则用CRC-7多项式系数0x09进行异或运算,以此来修正移位寄存器的内容。如果从移位寄存器中移出的位为0,则无需XOR操作。受保护数据的最后一位被移入移位寄存器且完成了条件XOR操作后,必须按此类似方式移入7个或更多0。这一过程称作扩张并完成多项式除法运算。此时,CRC-7值可从移位寄存器直接读出。

图2. 通过移位寄存器架构计算CRC-7。
图2. 通过移位寄存器架构计算CRC-7。

当接收器收到所有受保护的数据后,接收器可计算基于受保护数据的CRC-7值并将改值与接收到的CRC-7值进行比较。如果这两个值不同,接收器就能判断出受保护数据在传输过程中出现错误。如果这两个值相同,则接收器可完全判定通信通道上的数据是完整的。

CRC-16算法可用同样的方式来构建。在这种情况下,移位寄存器长度为16位而不是7位;多项式系数改为0x1021,且输入数据通过16个0位来扩张。

SD命令格式

发送给SD卡的命令采用6字节的格式(图3)。命令的第1个字节可通过将6位命令码与16进制码0x40进行或运算得到。如果命令需要,则在接下来的4个字节中提供一个32位的参数;最后1个字节包含了从第1个字节到第5个字节的CRC-7校验和。表1列出了一些重要的SD命令。

图3. 发送给存储卡的SPI模式SD命令采用6字节格式。
图3. 发送给存储卡的SPI模式SD命令采用6字节格式。

表1. 部分SD存储卡命令
Command Mnemonic Argument Reply Description
0 (0x00) GO_IDLE_STATE none R1 Resets the SD card.
9 (0x09) SEND_CSD none R1 Sends card-specific data.
10 (0x0a) SEND_CID none R1 Sends card identification.
17 (0x11) READ_SINGLE_BLOCK address R1 Reads a block at byte address.
24 (0x18) WRITE_BLOCK address R1 Writes a block at byte address.
55 (0x37) APP_CMD none R1 Prefix for application command.
59 (0x3b) CRC_ON_OFF Only Bit 0 R1 Argument sets CRC on (1) or off (0).
41 (0x29) SEND_OP_COND none R1 Starts card initialization.

[1] [2]  下一页

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