利用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 存储卡命令

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线随机字符串生成工具

具体请前往:在线随机字符串生成器--通过该工具生成动态复杂随机密码,随机字符串等,加密盐等

PC业务校验(已有该名称,已有该编码)

rules: {name: [{ required: true, message: "部门名称不能为空", trigger: "blur" },{min: 2,max: 10,message: "部门名称的长度为2-10个字符",trigger: "blur",},{trigger: "blur",validator: async (rule, value, callba…

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

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

DSP2335的LED工程笔记

首先是确定时钟 在技术参考中,找到时钟章节 只能观察每个寄存器,才能看到寄存器控制那个外设的时钟 第二找到对应GPIO以及寄存器; 在我板子里面的原理图是 但是TI的提供的库函数是分ABC的,刚开始就不知道怎麽分。GPIO68到GPIO6…

4.Pod详解【四】

文章目录 4. Pod详解4.1 Pod介绍4.1.1 Pod结构4.1.2 Pod定义 4.2 Pod配置4.2.1 基本配置4.2.2 镜像拉取4.2.3 启动命令4.2.4 环境变量4.2.5 端口设置4.2.6 资源配额 4.3 Pod生命周期4.3.1 创建和终止4.3.2 初始化容器4.3.3 钩子函数4.3.4 容器探测4.3.5 重启策略 4.4 Pod调度4.…

支持4KHz回报还能无线充电,简约不简单的雷柏VT3S游戏鼠标上手

这两年国产鼠标的表现很让人惊喜,不仅外观做工越来越精细,配置也越来越强大,当然价格依然亲民。现在很容易找到一款搭载高端传感器、响应速度快、电池续航时间长,并且还支持无线充电的全能型鼠标。 我之前用雷柏的鼠标比较多&…

Hive 定义变量 变量赋值 引用变量

Hive 定义变量 变量赋值 引用变量 变量 hive 中变量和属性命名空间 命名空间权限描述hivevar读写用户自定义变量hiveconf读写hive相关配置属性system读写java定义额配置属性env只读shell环境定义的环境变量 语法 Java对这个除env命名空间内容具有可读可写权利; …

【STM32】ADC(模拟/数字转换)

一、ADC的简介 1.什么是ADC 1)将【电信号】-->【电压】-->【数字量】 2)ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字量,建立模拟电路到数字电路的桥梁。 3)12位逐次逼近型ADC,1us转换时间&#xf…

内容运营策略:个性化推荐

一、推荐系统流程 典型的推荐系统包括3个部分,即召回层( Recall )、排序层( Rank )和重排层( ReRank )。 1.召回层( Recall ) 召回层主要是从全量库中首先获取用户可能感兴趣的候选集,是推荐系…

【Qt开发流程之】窗口部件

qt类关系图 创建Qt项目时,发现提供的窗体默认 基类有:QMainWindow、QDialog、QWidget这三种。 之后,你会发现,这3中窗体在UI交互中,用的也是最多的。 以下是Qt类关系图: 基础窗口控件QWidget 由上图可以…

Swin Transformer

Swin Transformer 简介 下采样的层级设计,能够逐渐增大感受野。采用window进行注意力计算,极大降低了内存消耗,避免了整张图像尺寸大小的qkv矩阵滑窗操作包括不重叠的 local window,和重叠的 cross-window。不重叠的local window…

volatile 无法保证原子性 案例展示

volatile 无法保证原子性 在 Java 中,原子性是指一个操作是不可中断的,要么都执行要么都不执行。 但是 volatile 修饰的变量,只是保证了从主内存加载到工作内存的值是最新的,并不能保证对变量的操作是原子性的 变量的写操作和读…

关于缓存和数据库一致性问题的深入研究

如何保证缓存和数据库一致性,这是一个老生常谈的话题了。 但很多人对这个问题,依旧有很多疑惑: 到底是更新缓存还是删缓存?到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库&…

Spring Boot中实现支付宝、微信和银联支付的功能

Spring Boot中实现支付宝、微信和银联支付的功能 在Spring Boot中实现支付宝、微信和银联支付的功能,通常需要使用它们各自的SDK(Software Development Kit)。以下是一个简单的示例代码,演示了如何在Spring Boot项目中集成支付宝…

操作系统:操作系统教程第六版(骆斌、葛季栋、费翔林)习题一计算机操作系统概述

目录 前言1. 思考题2. 应用题 前言 本系列文章是针对操作系统教程第六版(骆斌、葛季栋、费翔林)的习题解答,其中简答题部分为博主自己搜索整理的,错漏之处在所难免。应用题部分有答案为依据。 1. 思考题 (1&#xf…

vscode设置代码模板

一键生成vue3模板代码 效果演示 输入vue3 显示快捷键 按回车键 一键生成自定义模板 实现方法 进入用户代码片段设置 选择片段语言 vue.json输入自定义的代码片段 prefix是触发的内容,按自己的喜好来就行; body是模板代码,写入自己需要的…

java springboot 在测试类中声明临时Bean对象

上文 java springboot在当前测试类中添加临时属性 不影响application和其他范围 中 我们讲了怎么在测试类中设置临时属性 但是 如果我们想设置临时的Bean呢? 其实做过几个项目的人都会理解 我们很多功能 需要一些第三方bean才能完成 那么 我们可能存在需要用第三方b…

MySQL 的执行原理(四)

5.5. MySQL 的查询重写规则 对于一些执行起来十分耗费性能的语句,MySQL 还是依据一些规则,竭尽全力的把这个很糟糕的语句转换成某种可以比较高效执行的形式,这个过程也可以 被称作查询重写。 5.5.1. 条件化简 我们编写的查询语句的搜索条件…

SpringMVC总结

SpringMVC简介 简介 SpringMVC是一款基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。 调用流程 接收数…

清华 ChatGLM-6B 中文对话模型部署简易教程

本文目录 一、前言二、下载三、部署3.1 配置环境3.2 启动 demo 程序3.2.1 启动 cli_demo.py3.2.2 启动 web_demo.py 四、【最新】ChatGLM-6B-int4 版本教程4.1 下载4.2 配置环境4.3 启动 demo 程序 五、华为 CodeLab 免费 GPU 平台部署 ChatGLM-6B-int4(CPU版&#…