0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SD介质格式扩展了MAXQ2000的非易失性数据存储空间

星星科技指导员 来源:ADI 作者:ADI 2023-03-03 13:51 次阅读

本文演示如何使用安全数字(SD)介质格式扩展MAXQ2000的非易失性数据存储。

低功耗、低噪声MAXQ2000微控制器适用于多种应用。MAXQ2000将非易失数据存储在闪存中,具有32k字(64kB)闪存容量,与用户代码空间共享。但是,如果您的应用程序需要更多非易失性存储,该怎么办?本文演示如何使用安全数字 (SD™)介质格式,以扩展MAXQ2000的非易失性数据存储。

外部存储的设计注意事项

应用的首要设计考虑因素是电源电压和电流要求。在典型的MAXQ2000应用中,采用双通道线性稳压器来运行处理器内核电压(VDD) 以所选设计时钟速率所需的最低电压。The MAXQ2000 VDD电源可低至 1.8V。MAXQ2000上的I/O引脚由V供电迪奥,其允许的较低范围为 VDD上限为3.6V。外部存储的可接受电流消耗取决于电源的额定电流,如果是电池供电设备,则取决于电池系统的容量。

其次,用于连接外部存储器的MAXQ2000 I/O线数量必须保持在最低限度,同时仍能为预期应用提供足够的带宽。例如,Atmel AT29LV512 闪存芯片在与主机微控制器连接时需要 15 条地址线、2000 条数据线和 2000 条控制线。由于MAXQ<>没有外部地址/数据总线,因此在该示例中需要软件控制总线事务。对于某些应用,该方法不能有效利用MAXQ<>的I/O引脚。

SPI™和我2然而,基于 C 的外部闪存设备只需要三个或四个接口引脚。MAXQ2000具有硬件SPI模块,而2C必须由用户在MAXQ2000上软件中实现(即“位敲击”)。这种集成功能意味着SPI接口是访问外部非易失性存储器的主要途径。

SD 存储卡格式

SD介质格式是一种非易失性外部存储器,可满足许多应用的上述考虑因素。SD格式是“多媒体卡”格式或MMC的继承者。SD卡存储器通常采用3.3V电源供电,电流要求适中。SD卡容量范围从几兆字节到最大容量4GB。这种广泛的可用尺寸为许多应用提供了充足的外部存储空间。

乍一看,SD似乎不能轻易与MAXQ2000连接,因为前者专有的共享总线。但是,SD继承了MMC的辅助总线格式SPI。因此接口很简单,因为MAXQ2000包含对SPI的硬件支持。

poYBAGQBituAdu5lAAARMjmhcOU719.gif

图1.MAXQ2000可轻松连接至SD存储卡。

图1所示为典型应用电路。SD 卡需要全双工 8 位 SPI 操作。数据从MAXQ2000的MOSI引脚输入卡的DI引脚,从卡的DO线进入MAXQ2000的MISO引脚。数据在CLK线的上升沿同时输入和传出卡。每笔交易结束时必须提供八个额外的时钟,以允许SD卡完成任何未完成的操作。这些额外时钟期间的输入数据必须全部为 400。在识别阶段,时钟速率必须限制为最大25kHz,但一旦识别SD卡,时钟速率可以增加到<>MHz。

MAXQ2000 SPI模块

MAXQ2000包含一个硬件SPI模块,易于配置为SD卡接口。为了配置时钟极性和数据长度,SPICF寄存器编程为全零。这将SPI模块配置为在上升时钟边沿锁存数据,并将数据长度设置为2000位。对于该应用,MAXQ16的系统时钟频率为0MHz。在这种情况下,SPICK寄存器被编程为28x380,从而产生大约<>kHz的SPI时钟。必须通过设置 SPICN 寄存器的两个较低位来启用 SPI 主模式。

标清 SPI 数据格式

SD 卡的 SPI 协议类似于其 SD 总线协议。没有数据要发送的卡不会在每个时钟边沿从SD卡的DO引脚接收有效数据,而是将DO引脚保持在所有时钟边沿的空闲状态。当卡有数据要发送回主机时,在数据之前发送起始位为零的专用令牌。从SD卡传输的所有数据都会在这些令牌之后立即发送,并且长度固定。由于接收方事先知道预期的字节数,因此响应中不包含长度字节。此外,由于在发送启动令牌和数据之前不会发生空闲状态,因此所有数据字节都将原封不动地传输,并且没有前缀。与总线上的所有其他流量一样,令牌在 SPI 事务的 8 位边界上对齐。从主机到卡的命令和数据遵循类似的格式,所有 7 都表示空闲总线。除状态令牌之外的所有事务都受附加到数据末尾的循环冗余校验 (CRC) 代码的保护。提供了两种CRC算法:CRC-16用于短数据块,CRC-<>用于较长的数据块。CRC 是 SD SPI 接口的可选部分,但应用于保证数据完整性,除非应用限制阻止其使用。

循环冗余校验

CRC算法通常用于检测由不可靠的通信信道引起的错误。特定CRC的选择取决于要保护的数据大小。对于标清介质,指定了CRC-7和CRC-16。

CRC算法将受保护的数据除以选定的除数并产生余数。由于算法中使用的多项式数学,这种除法是在没有进位逻辑的情况下完成的。由于不需要进位,因此可以通过逻辑异或运算完成除法。选定的除数通常称为CRC多项式。然后,生成的余数与数据一起传输,接收器可以使用该余数来检查数据在传输过程中是否未损坏。

对于CRC-7,余数可以使用软件中的7位移位寄存器进行计算。此移位寄存器在计算开始时初始化为所有零。当受保护数据的每个位(MSB优先)移入移位寄存器的LSB时,移位寄存器的MSB被移出并检查。如果刚刚移出的位是 7,则移位寄存器的内容通过 XOR 与 CRC-0 多项式值 09x7 进行修改。如果移出移位寄存器的位为零,则不执行异或。一旦受保护数据的最后一位被移入并且条件异或完成,就必须以类似的方式再移入七个零。此过程称为增强,并完成多项式除法。此时,可以直接从移位寄存器读取CRC-<>值。

pYYBAGQBityAZAy_AAAr5x-FJls590.gif

图2.CRC-7可以使用移位寄存器架构进行计算。

当接收器拥有所有受保护的数据时,接收器可以计算受保护数据的CRC-7值,并将其与接收到的CRC-7值进行比较。如果值不同,接收方知道受保护的数据在传输过程中已损坏。如果值匹配,接收方可以高度确定地知道数据完整性不会受到通信信道的影响。

CRC-16算法可以用同样的方式构建。在这种情况下,移位寄存器的长度为16位而不是7位,多项式值更改为0x1021,输入数据增加了16个零位。

SD 命令格式

命令以6字节格式发送到卡(图3)。命令的第一个字节可以通过使用十六进制6x0对 40 位命令代码进行 OR 运算来构造。接下来的四个字节提供单个 32 位参数(如果命令需要);最后一个字节包含字节 7 到 1 的 CRC-5 校验和。表 1 列出了重要的 SD 命令。

poYBAGQBit2AaCllAAATmG9Of-8513.gif

图3.SPI 模式 SD 命令以 6 字节格式发送到卡。

命令 记忆 论点 描述
0 (0x00) GO_IDLE_STATE 没有 R1 重置 SD 卡。
9 (0x09) SEND_CSD 没有 R1 发送特定于卡的数据。
10 (0x0a) SEND_CID 没有 R1 发送卡标识。
17 (0x11) READ_SINGLE_BLOCK 地址 R1 读取字节地址处的块。
24 (0x18) WRITE_BLOCK 地址 R1 在字节地址处写入块。
55 (0x37) APP_CMD 没有 R1 应用程序命令的前缀。
59 (0x3b) CRC_ON_OFF 仅位 0 R1 参数将 CRC 设置为 (1) 或关闭 (0)。
41 (0x29) SEND_OP_COND 没有 R1 启动卡初始化。

在 SPI 模式下初始化 SD 卡

上电时,SD 卡默认采用专有的 SD 总线协议。要将卡切换到 SPI 模式,主机发出命令 0 (GO_IDLE_STATE)。SD 卡通过观察卡选择 (CS) 引脚在GO_IDLE_STATE命令期间保持低电平来检测 SPI 模式选择。卡以响应格式R1响应(图4)。空闲状态位设置为高,表示卡已进入空闲状态。为了保持与MMC卡的兼容性,在此阶段SPI时钟速率不得超过400kHz。

pYYBAGQBit-ATb64AAAUa5qM8cM015.gif

图4.响应格式 R1 指示发出的命令成功或失败。

现在 SD 卡处于 SPI 模式,SD 规范要求主机先发出初始化命令,然后才能处理任何其他请求。为了区分 MMC 和 SD 卡,SD 卡实现了 MMC 卡不响应的备用初始化命令。向卡发送命令 55 (APP_CMD) 后跟应用程序命令 41 (SEND_OP_COND) 即可完成此重要步骤。MMC 卡不响应命令 55,该命令可用于拒绝 MMC 卡作为无效介质。重复此命令序列,直到来自卡的R1响应中的所有位都为零(即空闲位变低)。

poYBAGQBiuCAFL7IAAAmo-Vqiis742.gif

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

SD 卡包含几个重要的寄存器,这些寄存器提供有关 SD 卡的信息。最重要的寄存器是卡特定数据寄存器(CSD)。对于我们的示例应用程序,我们对内存的块大小和总大小感兴趣。我们还必须注意卡识别数据寄存器(CID),因为它包含有关卡制造商和序列号的详细信息。图 5 显示了 CSD 和 CID 寄存器的布局。

pYYBAGQBiuGAOpTZAABtc7pwkTQ236.gif

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

检查 SD 卡响应

要从卡中读取卡寄存器或块,我们必须首先了解卡如何响应我们的查询。在 SPI 模式下,SD 卡使用 R9 格式回复命令SEND_CSD (10)、SEND_CID (17) 和READ_SINGLE_BLOCK (1)。接下来是开始令牌、请求的数据,最后是数据的 CRC-16 校验和。我们不能假设 R1 回复和数据启动令牌一个接一个地立即发生,因为总线可以在这两个事件之间进入空闲状态一段时间。图 6 详细介绍了数据响应。

poYBAGQBiuKAbH6WAAAkj1avX1M985.gif

图6.从 SD 卡到主机的数据传输以启动令牌为前缀。

读取惩教署和国际舞蹈委员会寄存器元数据

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)。

pYYBAGQBiuOAOsjQAAAYbLFo8F4831.gif

图7.从主机到 SD 卡的数据传输涉及更复杂的握手。

SPI 命令和数据错误检测

CRC-7 和 CRC-16 校验和可用于检测主机和 SD 卡之间通信中的错误。错误检测允许在发生物理引起的错误时进行可靠的错误恢复,例如插入和移除过程中的触点反弹或可拆卸介质固有的不理想的触点配接情况。强烈建议使用校验和,方法是使用参数中设置的最低位发出 CRC_ON_OFF (59) 命令。

poYBAGQBiuSALjZ_AAAXc2kf4e0550.gif

清单 2.强烈建议启用 CRC 校验和。

结论

SD介质卡格式代表了一种紧凑、低功耗的非易失性存储器解决方案,适用于嵌入式系统。通过使用MAXQ2000微控制器提供的硬件SPI支持,可以以很小的开销访问SD介质卡。Maxim提供的参考软件演示了最小实现,其中包括从SD卡读取模块和向SD卡写入模块所需的基本操作。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6812

    浏览量

    147653
  • 嵌入式
    +关注

    关注

    4983

    文章

    18291

    浏览量

    288538
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162002
收藏 人收藏

    评论

    相关推荐

    如何存储应用程序中使用的数据

    我应该用什么API来存储数据?我使用CYW43907,手册上说它支持外部闪存。我想知道我
    发表于 11-13 15:19

    CypressSRAM技术

    SRAM的单元基于SONOS技术。他们利用Fowler-Nordheim隧穿(FN隧穿)的优势通过将电荷捕获在夹层氮化物层中来存储
    发表于 04-08 14:58

    MAXQ2000 SPI模块与MAX6951/MAX6950怎么配合使用?

    本应用笔记提供MAXQ®汇编程序范例,说明MAXQ2000 SPI模块与MAX6951/MAX6950的配合使用。
    发表于 05-31 06:08

    MAXQ2000微控制器与MAX4397是如何连接的?

    MAX4397是什么?MAXQ2000微控制器与MAX4397是如何连接的?
    发表于 06-04 06:15

    IMX6UL如何从安全存储 (SNVS) 读取或写入?

    我目前正在使用 YOCTO sumo linux 内核 L4.14.98-2.3.1 和 imx6ul。在我的应用程序中,我们需要将安全数据(例如密钥)存储在安全
    发表于 04-14 07:38

    采用MAXQ2000进行音频滤波

    集成了乘累加单元(MAC)和单周期内核的MAXQ2000非常适合用作通用微控制器。MAXQ2000所具有的性能和I/O外设适合多种应用:如闹钟、手持医疗设备、数字读取器等需要低功耗、高性能
    发表于 12-25 23:24 34次下载

    MAXQ2000数据存储器中实现软堆栈

    摘要:本应用笔记介绍了汇编应用中在数据存储器内实现软堆栈的简单方法。该方法使用了MAXQ2000和其他基于MAXQ20的微控制器。采用了MAX-IDE的宏预处理特性,在Maxim的
    发表于 04-23 16:04 900次阅读

    利用MAXQ2000设计电压表

    摘要:本应用笔记演示了如何配置MAXQ2000微控制器实现简单的电压表设计。该应用采用MAXQ2000评估板,其中包括4½位段式LCD显示器和MAX1407数据采集系统(DAS)以及一对外部电阻。
    发表于 04-23 16:07 784次阅读
    利用<b class='flag-5'>MAXQ2000</b>设计电压表

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

    摘要:本文讨论如何使用安全数字(SD)媒体格式扩展MAXQ2000的非易失数据存储器。 低功耗、
    发表于 04-23 16:25 1095次阅读
    利用<b class='flag-5'>SD</b><b class='flag-5'>存储</b><b class='flag-5'>介质</b><b class='flag-5'>扩展</b><b class='flag-5'>MAXQ2000</b>的非易失性<b class='flag-5'>数据</b><b class='flag-5'>存储空间</b>

    采用MAXQ2000进行音频滤波

    摘要:集成了乘累加单元(MAC)和单周期内核的MAXQ2000非常适合用作通用微控制器(µC) 。MAXQ2000所具有的性能和I/O外设适合多种应用:如闹钟、手持医疗设备、数字读取器等需要低功
    发表于 04-23 17:27 904次阅读
    采用<b class='flag-5'>MAXQ2000</b>进行音频滤波

    利用SD存储介质扩展MAXQ2000数据存储空间

    本文讨论如何使用安全数字(SD)媒体格式打“展MAXQ2000的非易失数据存储器。
    发表于 04-08 09:59 4次下载

    MAXQ2000数据存储器中实现软堆栈

    本应用笔记演示了一种在数据存储器中实现软堆栈的简单方法,用于基于汇编的应用。该方法使用MAXQ2000和其他基于MAXQ20的微控制器。示例代码使用MAX-IDE的宏预处理功能编写,M
    的头像 发表于 01-11 11:20 485次阅读

    MAXQ2000数据存储器中实现软堆栈

    MAXQ2000微控制器与Maxim的RISC微控制器系列MAXQ器件一样,都是基于MAXQ20内核。基于MAXQ20的微控制器通常可实现一个16位宽硬堆栈,其深度固定不变(
    的头像 发表于 02-14 18:20 546次阅读

    使用MAXQ2000进行音频滤波

    乘法累加单元(MAC)和单周期内核的组合使MAXQ2000成为多功能微控制器(μC)。MAXQ2000具有性能和I/O外设,非常适合许多应用:闹钟、手持医疗设备、数字读数——任何需要低功耗、高性能和大量I/O的应用。通过集成MAC,MA
    的头像 发表于 03-02 14:13 591次阅读
    使用<b class='flag-5'>MAXQ2000</b>进行音频滤波

    如何将MAXQ2000用作电压表

    本应用笔记演示如何为简单的电压表应用配置MAXQ2000微控制器。应用使用MAXQ2000评估板,该评估板包括一个4/1407段LCD显示屏和一个MAX2000数据采集系统(DAS),
    的头像 发表于 03-03 14:27 551次阅读
    如何将<b class='flag-5'>MAXQ2000</b>用作电压表