当前位置:网站首页>【Arduino 连接 SD 卡模块实现数据读写】

【Arduino 连接 SD 卡模块实现数据读写】

2022-08-02 03:29:00 WENJIE科技

前言

SD 卡或 micro sd 卡,它可以打包千兆字节的数据,并且它的大小比硬币还小。本教程中,我们将 SD 卡模块与 Arduino 连接,实现数据读写。

Micro SD 卡模块引脚分配

Micro SD 卡模块有 6 个引脚;它们是 GND、VCC、MISO、MOSI、SCK 和 CS。这个传感器模块的所有引脚都是数字的,除了 VCC 和地。Micro SD 卡模块的引脚排列如下所示:
在这里插入图片描述在这里插入图片描述这是一种便宜且易于使用的传感器,可用于许多不同的应用。该传感器可用于通过微控制器读取 SD 卡数据。SD 卡模块的部件标记如下所示。
在这里插入图片描述如果您仔细查看 Micro SD 卡模块,PCB 本身并没有太多。只有三个重要的组件,首先是 Micro SD 卡座本身。这个支架使我们可以轻松地在不同的 SD 卡模块之间进行交换。第二个最重要的是电平转换器IC,因为SD卡模块仅在3.3V上运行,它的最大工作电压为3.6V,所以如果我们直接将SD卡连接到5V,它肯定会杀死SD卡。此外,该模块具有板载超低压差稳压器,可将电压从 5V 转换为 3.3V。这也是为什么这个模块可以在 3.3V 电源下工作的原因。

Micro SD卡模块电路图

该模块由非常通用且易于使用的组件制成。Micro SD 卡模块示意图如下所示。
在这里插入图片描述正如您在上面的示意图中看到的,我们有一个 Micro SD 卡连接器,它是一个推出型连接器,该连接器连接到一个逻辑电平转换器 IC。模块的最大工作电压为 3.6V,因此逻辑电平转换器 IC 变得非常重要。为了给 SD 卡和逻辑电平转换器供电,我们使用了 LM1117 LDO,这就是为什么这个模块可以在 3.3V 和 5V 逻辑电平下工作的原因。示意图底部的连接器 JP1 代表 micro SD 卡模块底部的连接器。

Arduino Micro SD卡模块电路连接图

现在我们已经完全了解了 Micro SD 卡模块的工作原理,我们可以将所有需要的电线连接到 Arduino 并编写代码以从传感器中获取所有数据。Micro SD卡模块与Arduino的连接图如下所示 -
在这里插入图片描述将 Micro SD 卡模块连接到 Arduino UNO 非常简单,我们只需将 SCK、MISO 和 MOSI 的 SPI 线连接到 SCK(D13)、MOSI(D12) 和 MISO( D11) 如果 SPI 总线上连接了多个设备,那么我们还需要将 CS 线连接到 Arduino。除此之外,VCC 和接地用于为设备供电。
在这里插入图片描述

Arduino 代码说明

Arduino 从 SD 卡模块读取和写入数据如下所示。代码非常简单易懂。代码检查是否存在文件名“data_log.txt” ,如果文件存在,则继续将给定信息写入 SD 卡,如果不存在,代码将在 SD 卡中创建文件,然后将数据写入SD卡。我们稍后可以打开文件并检查内容是否已写入。
我们通过定义 SD 库开始我们的代码,我们还声明了模块的chipSelect引脚,接下来我们定义一个文件类型变量并将其命名为myFile。

#include <SD.h>
const int chipSelect = 10;
File myFile;

接下来,我们有我们的设置功能;在 setup 函数中,我们初始化串口进行调试。我们还检查 SD 卡是否正确连接到 Arduino 的 SPI 引脚。

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  // wait for Serial Monitor to connect. Needed for native USB port boards only:
  while (!Serial);

接下来,我们创建了一个名为“check_and_create_file()”的函数。 在该函数中,我们检查 SD 卡中是否存在data_log.txt文件,如果该文件存在,我们将继续执行我们的代码,如果不存在,则我们将创建该文件。要在 SD 卡上创建文件,您只需非常快速地打开和关闭它,不会有任何延迟,文件就会被创建。

void check_and_create_file()
{
    
  Serial.print("Initializing SD card...");

  if (!SD.begin(chipSelect)) {
    
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  if (SD.exists("data_log.txt"))
    Serial.println("data_log.txt exists.");
  else
  {
    
    Serial.println("data_log.txt doesn't exist.");

    Serial.println("Creating data_log.txt...");
    myFile = SD.open("data_log.txt", FILE_WRITE);
    myFile.close();

    if (SD.exists("data_log.txt"))
      Serial.println("data_log.txt exists.");
    else
      Serial.println("data_log.txt doesn't exist.");
  }
}

接下来,我们将向 SD 卡写入一些文本,并将该文本读回串行监视器窗口。这样我们就知道文本已成功写入 SD 卡。我们创建了一个名为read_write_sd_text()的函数,它会自动执行此操作。只需调用此函数即可完成。
在函数内部,我们打开一个

void read_write_sd_text()
{
    
  myFile = SD.open("data_log.txt", FILE_WRITE);
  // if the file opened okay, write to it:
  if (myFile) {
    
    Serial.print("Writing to data_log.txt...");
    myFile.println("Testing Data Write 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    
    // if the file didn't open, print an error:
    Serial.println("error opening data_log.txt");
  }
  // re-open the file for reading:
  myFile = SD.open("data_log.txt");
  if (myFile) {
    
    Serial.println("data_log.txt:");
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
    
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    
    // if the file didn't open, print an error:
    Serial.println("error opening data_log.txt");
  }
}

模块的工作

我们编写了 arduino 代码,以便在 arduino 初始化后代码会检查它是否可以找到 SD 卡。如果找到 SD 卡,它将检查文本文件是否存在,如果文件存在,代码将继续,如果不存在,代码将简单地创建一个新的文本文件,一旦完成,它将编写测试 1、2、3 .里面的文本文件。接下来,代码将读取文本文件并将文本中的数据打印到串行监视器窗口中。

原网站

版权声明
本文为[WENJIE科技]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_46509684/article/details/126012577