一起玩儿物联网人工智能小车(ESP32)——63 SD和TF卡模块的使用

news2024/11/28 18:40:51

摘要:本文介绍SD和TF卡模块的使用方法

前面介绍了非易失性存储的使用方法,由于空间和本身只支持键值对的限制,非易失性存储只适用于少量数据的记录。而不适用于各种声音、图片、大量数据等情况的使用。这时候就需要有文件系统或者更大容量存储空间的支持。SD卡(Secure Digital Memory Card)和TF卡(Trans-flash Card,也叫Micro SD卡)就是扩展存储空间的不错的选择,因为这两种卡都支持SPI模式,也就是可以通过SPI通信协议直接访问,因此这两种卡成了很多移动设备扩展存储空间的不二选择。

SD卡通常有两种工作模式:SDIO模式和SPI模式。其实这也是两种通信协议,也就是说SD卡支持SDIO和SPI两种通信方式。SPI通信协议在前面已经介绍过了。SDIO是安全数字输入输出接口(Secure Digital Input and Output)的缩写,是从SD内存卡接口的基础上演化出来的一种外设接口。SDIO接口兼容以前的SD内存卡,并且可以连接支持SDIO接口的设备。SDIO接口有4根数据线,数据传输速度非常快。有兴趣的可以进一步的了解SDIO的详细信息。

下面来看一下SD卡和TF卡的接口定义:

通过上面的接口可知,应该有两种方法用来读取SD卡上的数据,一种是通过SDIO接口,一种是SPI接口,为了简单方便,现在大部分访问SD卡都使用SPI的方式,市面上能买到的SD开模块,也都是SPI接口的。

虽然可以直接把SD卡与ESP32单片机相连接来进行数据的读写操作,但接线不是那么方便,因此还是使用的功能模块来进行实验,通常的功能模块都是只支持SPI模式的,将SD卡的SPI数据线引出到了接线排针上。因为现在TF卡更普遍一些,因此这次使用的是TF卡模块,其使用方法与SD卡功能模块没有任何区别。模块的样子如下图所示:

熟悉SPI协议的应该对上图中的引脚非常的属性了,应该不需要再进一步的解释了,不了解的可以看之前关于SPI通信协议的文章。下面就把TF卡模块连接到我们的ESP32单片机引脚上。

ESP32芯片共有3个SPI接口,其中一个被用作片上SPI Flash使用,另外两个可以给开发人员使用,其引脚定义如下:

Pin Name

HSPI(GPIO Number)

VSPI(GPIO Number)

CSO*

15

5

SCLK

14

18

MISO

12

19

MOSI

13

23

QUADWP

2

22

QUADHD

4

21

其中的QUADWP为写保护信号,QUADHD为保持信号。这两个引脚只用于4位传输。

在设计电路的时候,可以尽量使用默认的引脚,这样在开发中就不需要再进行额外的配置了。当然,ESP32在强大的GPIO交换矩阵的支持下,基本上可以用任意的引脚来连接到SPI控制器,实现使用任意引脚与外部SPI设备的连接。我所使用的连接方法如下表所示:

TF卡模块

ESP32扩展板

GND

GND

VCC

+5V

MISO

P19

MOSI

P23

SCK

P18

CS

P5

这是使用VSPI默认引脚的连接方法。SPI通信协议中有明显的主从设备定义,因此收发引脚也明确了主从,这样连接起来就非常的方便,不容易接错。回想前面UART通信协议中,收发引脚都是站在自身的角度来说的,因此在与其他设备通信的时候,就应该自己的接收与对方的发送相连接,对方的接收与自己的发送相连接。这点不同之处要关注一下,很容易搞错了。

接下来就来看一下在Arduino IDE中,如何读写SD卡中的内容,这其中会包含非默认引脚的处理方法。下面来看一下主要的操作过程。

1. 引入头文件

#include "SD.h"

#include "SPI.h"

2. 配置SPI通信引脚

如果使用HSPI的默认引脚,那么可以忽略本步骤,直接进入到下一步。否则,就需要使用这里列举的几种方法来配置SPI的通信引脚。通常有下面两种方法:

(1)调用SPI实例的begin()方法来指定SPI通信的引脚,该方法的定义如下:

void begin(int8_t sck = -1, int8_t miso = -1, int8_t mosi = -1, int8_t ss = -1)

这个方法有4个参数,依次是:sck、miso、mosi和ss。

(2)创建一个新的SPIClass的实例

SPIClass spi = SPIClass(VSPI);

创建的时候可以指定使用VSPI控制器,也可以使用默认的HSPI控制器。如果这个时候恰好使用的就是VSPI的默认引脚,那么就不用再进行任何操作了,如果是自己随意选择的几个引脚,那么同样可以调用begin()方法来指定每一个引脚。具体方法同前一种一样,默认的SPI实例就是SPIClass类型的。

3. 初始化SD实例

SD是SDFS类的实例。其初始化方法begin()的定义如下:

bool begin(uint8_t ssPin = SS, SPIClass &spi = SPI,
uint32_t frequency = 4000000, const char *mountpoint = "/sd",
uint8_t max_files = 5, bool format_if_empty = false)

这个begin()方法的参数比较多,重点关注前两个,第一个是片选引脚。第二个就是前面创建的SPIClass类的配置信息。默认值是SPI,如果自己生成了新的SPIClass对象的实例,那么把它作为第二个参数传递给begin()方法。

这个begin()方法返回值位布尔类型的,true表示成功,false表示初始化失败。这时,应检查接线是否牢固、正确。前边的初始化配置与接线是否相符合。

4. 得到卡的类型

调用SD.cardType()方法可以得到卡的类型。该方法返回一个枚举类型的变量,该枚举类型可以有以下几个数值:

    CARD_NONE 无卡

    CARD_MMC MMC卡

    CARD_SD SD卡

    CARD_SDHC SDHC卡

    CARD_UNKNOWN 未知

下面再说一下SD卡类型的小知识。目前SD卡分为三种,分别是SD、SDHC和SDXC卡。这三者的区别是容量上限的不同,其次在传输速度上有的有些差别,但传输速度不是划分的标准。SD卡是由MMC卡发展而来的,最早的SD卡由于FAT16文件系统的限制,其最大容量只有2GB,所以在开发中,小于2GB容量的SD卡,就叫SD卡。容量在2GB至32GB之间的称为SDHC(Secure Digital High Capacity),也就是高容量的SD卡。它使用了FAT32文件系统,能够支持大于2G的文件。相比之下,SDXC(Secure Digital eXtended Capacity)卡的容量更大,可以达到2TB(2048GB)。它是为需要更高容量的设备设计的,并且支持更快的读写速度。SDXC使用了FAT32或者EXFAT文件系统。

设备读取SD卡是向下兼容的,支持高容量的设备是可以读取低容量SD卡的,只支持低容量SD卡的设备,则无法读写高容量SD卡中的内容。这里所说的容量的高低是以2GB和32GB为分界线的。

之后,利用SD实例就可以对SD卡中的目录和文件进行各种操作了。这将在下一篇中进行介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机数据链技术,无人机数据链路系统技术详解,无人机数传技术

早期的无人机更多的为军事应用服务,如军事任务侦查等,随着技术和社会的发展,工业级无人机和民用无人机得到快速的发展,工业级无人机用于农业植保、地理测绘、电力巡检、救灾援助等;民用无人机用于航拍、物流等等领域。…

Unity之闪电侠大战蓝毒兽

目录 🎨一、创建地形 🎮二、创建角色 🏃2.1 动画 🏃2.2 拖尾 🏃2.3 角色控制 ​🏃2.4 技能释放 🏃2.5 准星 📱三、创建敌人 🐲3.1 选择模型 🐲3.…

GitLab安装配置

一、GitLab的简介 GitLab是开源的代码托管平台,提供版本控制功能、代码审查、持续集成等工具,帮助团队协作开发软件项目。用户可以创建仓库存储代码,管理问题追踪,部署自动化流程等。 二、GitLab的安装 1、Rocky_Linux 下载安装 …

使用RK3588开发板使用 SFTP 互传-windows与开发板互传

MobaXterm 软件网盘下载路径:“iTOP-3588 开发板\02_【iTOP-RK3588 开发板】开发资料\04_iTOP-3588 开发板所需 PC 软件(工具)\02-MobaXterm”。 打开 MobaXterm 创建一个 SFTP 会话,如下图所示: 输入密码 topeet 进入…

《UE5_C++多人TPS完整教程》学习笔记19 ——《P20 我们子系统的回调函数(Callbacks to Our Subsystem)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P20 我们子系统的回调函数(Callbacks to Our Subsystem)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主&…

外汇天眼:小白开始实盘之前,必须知道的7件事

在进行外汇交易时,保持松弛的心态和学习外汇知识是一件很重要的事情,但对于缺乏交易经验的交易小白来说,想保持松弛的心态和学习外汇知识比较困难,考虑到这一点,天眼给大家总结了7件在交易前必须知道的事情。 1、实现财…

基于PSO优化的GRU多输入分类(Matlab)粒子群优化门控循环单元神经网络分类预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、完整代码数据分享下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台…

167基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序

基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序,可显示承载能力、压强、刚度及温升等图谱.程序已调通,可直接运行。 167 显示承载能力、压强、刚度及温升 (xiaohongshu.com)https://www.xiaohongshu.com/explore/65d212b200000000…

element 表单提交图片(表单上传图片)

文章目录 使用场景页面效果前端代码 使用场景 vue2 element 表单提交图片   1.点击【上传图片】按钮择本地图片(只能选择一张图片)后。   2.点击图片,支持放大查看。   3.点击【保存】按钮,提交表单。 页面效果 前端代码…

新版本HC物联网系统

代码开源在 HC物联网平台: HC物联网系统用于小区,园区等设备管理,包括门禁,道闸,监控,充电桩,智能水电表,梯控和门锁等设备 HC 物联网系统 HC物联网系统专注于小区和园区内的设备管理&#xf…

辽宁博学优晨教育:视频剪辑培训新篇章,开启你的创意之旅

在数字化时代,视频剪辑已成为一项炙手可热的技能。辽宁博学优晨教育深知市场需求,特别推出视频剪辑培训专业,为广大爱好者和专业人士提供了一个学习和交流的平台。在这里,我们不仅传授技术,更致力于激发你的创意潜能&a…

Unity ScreenPointToRay 获取到的坐标不准确

👾奇奇怪怪的 🥙问题描述🥪解决方案🍿验证代码 🥙问题描述 使用:Camera.main.ScreenPointToRay 将鼠标坐标转换成射线,然后通过:Physics.Raycast 获取到射线碰撞到的坐标&#xff0…

单反sd卡照片突然没有了?原因+解决方案

在使用单反相机拍摄时,SD卡作为存储媒介,承担着存储照片的重要角色。然而,有时候我们会遇到SD卡中的照片突然消失的情况,给拍摄工作带来很大的困扰。本文将深入剖析导致这一问题的原因,并提供相应的解决方案&#xff0…

SMART信息——你的固态硬盘实时体检报告

SMART,或者严谨地说:S.M.A.R.T (Self-Monitoring Analysis and Reporting Technology),即“自我监测分析与报告技术”,在硬盘行业耳熟能详。无论是传统的机械硬盘,还是作为后起之秀的固态硬盘,它们都在使用…

C++面试宝典第28题:寻找丢失的数字

题目 给定一个包含n个整数的数组nums,其中nums[i]在区间[1, n]内。请找出所有在[1, n]范围内,但没有出现在nums中的数字,并以数组的形式返回结果。 示例1: 输入:nums = [4, 3, 2, 7, 8, 2, 3, 1] 输出:[5, 6] 示例2: 输入:nums = [1, 1] 输出:[2] 解析 初看这道题,…

【WEB环境】-LNTMP或LAMP结构搭建(记录)

一、手工安装搭建 1.1 LNTMP 【nginx:rpm安装】 安装根目录路径:/usr/local/nginx 启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 停止kill -QUIT 2072 ./nginx -s stop /usr/local/nginx/sbin/nginx -s stop 重启…

FPGA之移位寄存器

SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT 可以将串 行数据延迟 1 到 32 个时钟周期。移入D (DI1 LUT 引脚)和移出 Q31(MC31 LUT 引脚)线路将LUT级联,以形成更大…

物联网水域信息化:水质监测智慧云平台

行业背景 由于传统水务企业水质监测和管理技术不足,以及水源污染等问题,确保供水水质达标困难重重。 且传统水务行业信息化手段单一,缺乏对大数据等新技术的应用,一定程度上影响了水务工作的精细化和智能化程度。 系统特点 为…

Positive SSL 证书介绍

Positive SSL 是一种受欢迎的 SSL 证书,提供了卓越的安全性、性价比和品牌信任。以下是对 Positive SSL 在这些方面的简要介绍: 1. 安全性: Positive SSL 证书采用强大的加密技术,确保网站和用户之间的数据传输是安全的。它使用…

新版Java面试专题视频教程——准备篇、Redis篇

新版Java面试专题视频教程——准备篇、Redis篇 准备篇 准备篇-01-企业简历筛选规则准备篇-02-简历注意事项准备篇-03-应届生该如何找到合适的练手项目 Redis篇 01-redis开篇02-缓存穿透03-缓存击穿04-缓存雪崩05-双写一致性…