背景知识:

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 - IO12DAT3 - IO13CMD - IO15CLK - IO14DAT0 - IO2DAT1 - 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卡

  1. //引用相关库
  2. //#include "FS.h"
  3. #include "SD_MMC.h"
  4.  
  5. // 接口连接如下:
  6. // SD卡 - ESP32
  7. // ------------
  8. // DAT2 - IO12
  9. // DAT3 - IO13
  10. // CMD - IO15
  11. // CLK - IO14
  12. // DAT0 - IO2
  13. // DAT1 - IO4
  14.  
  15. void setup()
  16. {
  17. Serial.begin(115200);
  18. Serial.println();
  19.  
  20. //挂载文件系统
  21. if (!SD_MMC.begin())
  22. {
  23. Serial.println("存储卡挂载失败");
  24. return;
  25. }
  26. uint8_t cardType = SD_MMC.cardType();
  27.  
  28. if (cardType == CARD_NONE)
  29. {
  30. Serial.println("未连接存储卡");
  31. return;
  32. }
  33. else if (cardType == CARD_MMC)
  34. {
  35. Serial.println("挂载了MMC卡");
  36. }
  37. else if (cardType == CARD_SD)
  38. {
  39. Serial.println("挂载了SDSC卡");
  40. }
  41. else if (cardType == CARD_SDHC)
  42. {
  43. Serial.println("挂载了SDHC卡");
  44. }
  45. else
  46. {
  47. Serial.println("挂载了未知存储卡");
  48. }
  49.  
  50. //打开/建立 并写入数据
  51. File file = SD_MMC.open("/test.txt", FILE_WRITE);
  52. if (file)
  53. {
  54. Serial.println("打开/建立 根目录下 test.txt 文件!");
  55. }
  56.  
  57. char data[] = "hello world\r\n";
  58. file.write((uint8_t *)data, strlen(data));
  59. file.close();
  60.  
  61. //重命名文件
  62. if (SD_MMC.rename("/test.txt", "/retest.txt"))
  63. {
  64. Serial.println("test.txt 重命名为 retest.txt !");
  65. }
  66.  
  67. //读取文件数据
  68. file = SD_MMC.open("/retest.txt", FILE_READ);
  69. if (file)
  70. {
  71. Serial.print("文件内容是:");
  72. while (file.available())
  73. {
  74. Serial.print((char)file.read());
  75. }
  76. }
  77.  
  78. //打印存储卡信息
  79. Serial.printf("存储卡总大小是: %lluMB \n", SD_MMC.cardSize() / (1024 * 1024)); // "/ (1024 * 1024)"可以换成">> 20"
  80. Serial.printf("文件系统总大小是: %lluB \n", SD_MMC.totalBytes());
  81. Serial.printf("文件系统已用大小是: %lluB \n", SD_MMC.usedBytes());
  82. }
  83.  
  84. void loop()
  85. {
  86. }

4. 实验效果

5.补充,如果不追求读写SD卡的速率,那么可以SPI方式来进行SD卡的读写,那么这样就可以省下ESP32宝贵的2个GPIO作其他用途。

其实,这些例程在我们安装好Arduino的ESP32支持包以后,我们电脑本地已经有了,参考下面的路径可以找到这些例程。

.

Arduino+ESP32 之 SD卡读写的更多相关文章

  1. 第36章 SDIO—SD卡读写测试

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

  2. 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

  3. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  4. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  5. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(七)-准备移植FatFs

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  6. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-FatFs使用的思路介绍

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  7. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  8. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡

    由于一张SD卡要能读写,涉及到的技术有些多,我打算分以下几篇博客 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含 ...

  9. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

随机推荐

  1. 【LeetCode】498. Diagonal Traverse 解题报告(Python)

    [LeetCode]498. Diagonal Traverse 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: htt ...

  2. 【LeetCode】355. Design Twitter 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  3. 【LeetCode】767. Reorganize String 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 题目地址:https://leetcode.com/problems/reorganiz ...

  4. 第四个知识点 P类复杂问题

    第四个知识点 P类复杂问题 原文地址:http://bristolcrypto.blogspot.com/2014/10/52-things-number-4-complexity-class-p.h ...

  5. Java Web程序设计笔记 • 【第1章 Web应用程序】

    全部章节   >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...

  6. Pytest_钩子方法setup、teardown、setup_class、teardown_class(8)

    pytest提供了以下 4 种钩子方法: 方法 说明 setup 在每一个测试用例执行之前,会执行此方法.一般用于每个用例相同的初始化工作. teardown 在每一个测试用例执行之后,会执行此方法. ...

  7. git 生成忽略文件

    一.在.git的同级目录下打开git bash 二.在命令行输入 三.在生成的文件中添加忽略提交的文件夹名称 来自为知笔记(Wiz)

  8. cnetos7安装字体

    1 先下载字体 链接:https://pan.baidu.com/s/1FEV7K8c8S6o3gBukkSGp4w 提取码:font 2 安装字体脚本 vi font.sh #!/bin/bash ...

  9. [Flask] Flask问题集(后端模板渲染项目)

    1.redirect和render_template的区别? redirect:重定向,会改变url render_template:模板渲染,用模板来渲染当前页,不会改变url 2.关于 'g' 对 ...

  10. Git 的配置 config

    Git 的配置 config Git 的配置 config config 文件简述 config 文件位置 信息查询 修改 config 文件 编辑配置文件 增加指定配置项 删除指定配置项 自助餐   ...