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

        SD存储卡是一种可移动存储介质,通常用于相机、手机、平板电脑等设备中存储照片、视频、音乐等数据。SD存储卡的全称为Secure Digital Memory Card,是由SD Card Association制定的一种标准格式。它具有体积小、存储容量大、读写速度快、价格低廉等优点。目前,市场上常见的SD存储卡有SD、SDHC、SDXC等不同类型,其存储容量也从几百MB到几十GB不等。

图 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寄存器置为Ox28,从而使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操作后,必须按此类似方式移入6个或更多 0. 这一过程称作扩张并完成多项式除法运算。此时,CRC-7 值可从移位寄存器直接读出。

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

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

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

SD 命令格式

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

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

表 1. 部分 SD 存储卡命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/194368.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java游戏制作-拼图游戏

一.制作主界面 首先创建一个Java项目命名为puzzlegame。 再在src中创建一个包,用来制作主界面 代码: 结果: 二.设置界面 代码: 三.初始化界面 代码: 优化代码: 结果: 四.添加图片 先在Java项…

三相异步电机动态数学模型及矢量控制仿真

文章目录 三相异步电机动态数学模型及矢量控制仿真1、异步电机三相方程2、坐标变换3、磁链3/2变换推导4、两相静止坐标系下的方程5、两相旋转坐标系下的方程6、以 ω-is-Ψr 为状态变量的状态方程7、矢量控制及 matlab 仿真 原文链接需要仿真的同学请关注【Qin的学习营地】 三相…

c++ list容器使用详解

list容器概念 list是一个双向链表容器,可高效地进行插入删除元素。 List 特点: list不可以随机存取元素,所以不支持at.(position)函数与[]操作符。可以对其迭代器执行,但是不能这样操作迭代器:it3使用时包含 #includ…

AcWing 3. 完全背包问题 学习笔记

有 N� 种物品和一个容量是 V� 的背包,每种物品都有无限件可用。 第 i� 种物品的体积是 vi��,价值是 wi��。 求解将哪些物品装入背包,可使这些物品的总体积不…

iOS_折叠展开 FoldTextView

1. 显示效果 Test1:直接使用: Test2:在 cell 里使用: 2. 使用 2.1 直接使用 // 1.1 init view private lazy var mooFoldTextView: MOOFoldTextView {let view MOOFoldTextView(frame: .zero)view.backgroundColor .cyanvie…

模块化Common JS 和 ES Module

目录 历程 1.几个函数:全局变量的污染,模块间没有联系 2.对象:暴露成员,外部可修改 3.立即执行函数:闭包实现模块私有作用域 common JS module和Module 过程 模块依赖:深度优先遍历、父 -> 子 -…

Python基础:错误和异常

在Python中的错误可(至少)被分为两种:语法错误和 异常,均是指在程序中发生的问题和意外情况。Python提供了异常处理机制,使程序能够更容易地应对这些问题。 1. 语法错误(Syntax Error) 语法错误…

YOLOv8优化策略:轻量级Backbone改进 | VanillaNet极简神经网络模型 | 华为诺亚2023

🚀🚀🚀本文改进:一种极简的神经网络模型 VanillaNet,支持vanillanet_5, vanillanet_6, vanillanet_7, vanillanet_8, vanillanet_9, vanillanet_10, vanillanet_11等版本 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,…

ubuntu20.04在docker下运行ros-noetic进行开发

经常折腾虚拟机各双系统 , 想着不如把docker利用起来,下面算是一个初学者使用docker运行ros的记录: 1. 安装 使用官方安装脚本自动安装 curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh验证是否安装成功 doc…

命令执行相关函数及各类命令执行绕过技巧

相关函数 (命令注入) 命令执行的绕过

【LeetCode刷题日志】232.用栈实现队列

🎈个人主页:库库的里昂 🎐C/C领域新星创作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:LeetCode 刷题日志🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,…

公网访问全能知识库工具AFFINE,Notion的免费开源替代

文章目录 公网访问全能知识库工具AFFINE,Notion的免费开源替代品前言1. 使用Docker安装AFFINE2. 安装cpolar内网穿透工具3. 配置AFFINE公网访问地址4. 实现公网远程访问AFFINE 公网访问全能知识库工具AFFINE,Notion的免费开源替代品 前言 AFFiNE 是一个…