Arduino+ESP32 之 SD卡读写
背景知识:
ESP32有两种使用SD卡的方法,一种是使用SPI接口访问SD卡,另一种是使用SDMMC接口访问SD卡 。
Arduino core for the ESP32中SPI方式占用4个IO口,SDMMC方式占用6个IO口,一般来说SDMMC方式速度要比SPI方式快。
1. SDMMC方式
ESP32虽然有两组SDMMC接口,但Arduino core for the ESP32中只用到了其中一组,IO口连接为:DAT2 - IO12
、DAT3 - IO13
、CMD - IO15
、CLK - IO14
、DAT0 - IO2
、DAT1 - IO4
;
bool begin(const char * mountpoint="/sdcard", bool mode1bit=false)
挂载存储卡,输入参数分别为挂载点、是否使用一线模式;
void end()
取消挂载;
sdcard_type_t cardType() 返回存储卡类型,0、1、2、3、4,分别如下:
CARD_NONE 未连接存储卡;
CARD_MMC mmc卡;
CARD_SD sd卡,最大2G;
CARD_SDHC sdhc卡,最大32G;
CARD_UNKNOWN 未知存储卡;
uint64_t cardSize() 返回存储卡大小字节数;
uint64_t totalBytes() 返回文件系统总字节数;
uint64_t usedBytes() 返回文件系统已用字节数;
2. SPI方式
bool begin(uint8_t ssPin=SS, SPIClass &spi=SPI, uint32_t frequency=4000000, const char * mountpoint="/sd", uint8_t max_files=5)
挂载存储卡,输入参数分别为SS引脚号、SPI对象、时钟频率、挂载点、文件最大同时打开数;
默认IO口连接为:CS - IO5、DI - IO23、SCLK - IO18、DO - IO19;
void end()
取消挂载;
sdcard_type_t cardType() 返回存储卡类型,0、1、2、3、4,分别如下:
CARD_NONE 未连接存储卡;
CARD_MMC mmc卡;
CARD_SD sd卡,最大2G;
CARD_SDHC sdhc卡,最大32G;
CARD_UNKNOWN 未知存储卡;
uint64_t cardSize() 返回存储卡大小字节数;
uint64_t totalBytes() 返回文件系统总字节数;
uint64_t usedBytes(); 返回文件系统已用字节数
3. 我的实验
我手头的ESP32_CAM板子的原理图
右图可知,我的SD卡接到了ESP32的GPIO12 13 14 15 2 4 这6个脚上,根据前述,这符合SDMMC方式的IO连接。所以,我在软件上需要使用SDMMC方式来驱动SD卡。
新建arduino项目文件,复制黏贴如下代码,即可以SDMMC方式驱动SD卡
//引用相关库
//#include "FS.h"
#include "SD_MMC.h" // 接口连接如下:
// SD卡 - ESP32
// ------------
// DAT2 - IO12
// DAT3 - IO13
// CMD - IO15
// CLK - IO14
// DAT0 - IO2
// DAT1 - IO4 void setup()
{
Serial.begin(115200);
Serial.println(); //挂载文件系统
if (!SD_MMC.begin())
{
Serial.println("存储卡挂载失败");
return;
}
uint8_t cardType = SD_MMC.cardType(); if (cardType == CARD_NONE)
{
Serial.println("未连接存储卡");
return;
}
else if (cardType == CARD_MMC)
{
Serial.println("挂载了MMC卡");
}
else if (cardType == CARD_SD)
{
Serial.println("挂载了SDSC卡");
}
else if (cardType == CARD_SDHC)
{
Serial.println("挂载了SDHC卡");
}
else
{
Serial.println("挂载了未知存储卡");
} //打开/建立 并写入数据
File file = SD_MMC.open("/test.txt", FILE_WRITE);
if (file)
{
Serial.println("打开/建立 根目录下 test.txt 文件!");
} char data[] = "hello world\r\n";
file.write((uint8_t *)data, strlen(data));
file.close(); //重命名文件
if (SD_MMC.rename("/test.txt", "/retest.txt"))
{
Serial.println("test.txt 重命名为 retest.txt !");
} //读取文件数据
file = SD_MMC.open("/retest.txt", FILE_READ);
if (file)
{
Serial.print("文件内容是:");
while (file.available())
{
Serial.print((char)file.read());
}
} //打印存储卡信息
Serial.printf("存储卡总大小是: %lluMB \n", SD_MMC.cardSize() / (1024 * 1024)); // "/ (1024 * 1024)"可以换成">> 20"
Serial.printf("文件系统总大小是: %lluB \n", SD_MMC.totalBytes());
Serial.printf("文件系统已用大小是: %lluB \n", SD_MMC.usedBytes());
} void loop()
{
}
4. 实验效果
5.补充,如果不追求读写SD卡的速率,那么可以SPI方式来进行SD卡的读写,那么这样就可以省下ESP32宝贵的2个GPIO作其他用途。
其实,这些例程在我们安装好Arduino的ESP32支持包以后,我们电脑本地已经有了,参考下面的路径可以找到这些例程。
.
Arduino+ESP32 之 SD卡读写的更多相关文章
- 第36章 SDIO—SD卡读写测试
第36章 SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列
第36章 SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡
[STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理
[STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(七)-准备移植FatFs
[STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-FatFs使用的思路介绍
[STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡
由于一张SD卡要能读写,涉及到的技术有些多,我打算分以下几篇博客 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
随机推荐
- P1599 货币
背景 又是一道水题 描述 在某个神秘的星球上有一种货币,它有一种奇怪的兑换规则 你有且仅有一枚面值为n的金币,你可以去银行进行兑换,也可以不兑换 如果去银行兑换,兑换的规则是这样的:用面值为a的金币去 ...
- Consistency Regularization for GANs
目录 概 主要内容 Zhang H., Zhang Z., Odena A. and Lee H. CONSISTENCY REGULARIZATION FOR GENERATIVE ADVERSAR ...
- CS5211|CS5211参数|eDP转LVDS转换器芯片
CS5211概述 CS5211是一个eDP到LVDS转换器,配置灵活,适用于低成本显示系统.CS5211与eDP 1.2兼容,支持1车道和2车道模式,每车道速度为1.62Gbps和2.7Gbps.CS ...
- 使用所学Spring知识,实现简易的图书查询系统功能。实现查询全部图书。 根据书籍编号查询信息。 根据书名查询书籍信息。 根据状态查询书籍信息。
相关 知识 >>> 相关 练习 >>> 实现要求: 使用所学Spring知识,实现简易的图书查询系统功能. 要求如下: 查询全部图书. 根据书籍编号查询信息. 根据 ...
- 使用 windows bat 脚本命令 一键启动MySQL服务
@echo off rem Copyright (c) 2019 Moses and/or its affiliates. rem Get Administrator Rights >nul 2 ...
- 简单的制作ssl证书,并在nginx和IIS中使用
2020年最后一篇博文收官,提前祝各位园友新年快乐 现在的后端开发,动不动就是需要https,或者说是需要ssl证书,既然没有正版的证书,那么我们只能自己制作ssl的证书了. 说明:证书的制作采用的是 ...
- 深入 Laravel 内核之外观模式(门面模式)
门面模式核心内容: 客户端与子系统的通信通过外观对象进行: 外观对象封装一系列子系统的具体对应方法,对客户端只需暴露一个单一的入口方法: 客户端通过访问外观对象即可调用子系统的基础方法,无需关心子系统 ...
- 发布 vscode 插件 Cnblogs Client For VSCode 预览版
为了方便大家使用 vscode 发布博文,我们做了一个小插件,今天发布预览版,欢迎大家试用并反馈问题与建议. 插件的英文名称是 Cnblogs Client For VSCode,简称是 vscode ...
- SpringBootAdmin-使用踩坑
一.版本选择 目前项目中使用的springcloud版本为 Hoxton.SR3,使用的spring-cloud-alibaba版本为2.2.1.RELEASE, 使用的springboot版本为2. ...
- Linux登录时,下游回显非常慢
问题现象 登录linux时,远程连接正常,[root@...]回显非常慢,在执行脚本时,很容易导致命令下发错乱 原因分析 家目录下的.bash_history文件太大,导致每次登陆时读取这个文件耗时太 ...