sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据

新闻资讯2026-04-21 00:37:06

  安全数字(SD)卡用于在许多电子设备中存储信息,尤其是智能手机和数码相机。但是您知道您可以借助一个简单的 8 位微控制器在SD 卡上读取和写入信息吗?你没听错,这样做是可能的,这为嵌入式系统和设计打开了一个充满机会的袋子。由于 SD 卡的价格远优于任何其他存储选项,因此它可以用于存储和记录数天的数据。这使得日志记录功能更加简单。这是一个例子,你可以用一张 SD 卡做更多的事情。

  因此,在本文中,我们将向您展示如何简单地将 SD 卡模块与 PIC 微控制器连接并在其中存储数据。

  了解不同类型的 SD 卡?

  安全数字卡或 SD 卡是一种由 SD 协会 (SDA) 开发的用于便携式设备的非易失性存储卡格式。Secure Digital 卡可细分为四类,如下所示。

  SDSC(安全数字标准容量):

  您可以在市场上找到的最基本和最常见的卡是SDSC卡。它代表安全数字标准容量;这种类型的卡最大容量为 2GB,它使用 FAT16 文件系统。除此之外,此类卡的最大传输容量为 12.5MB/s 。

  SDHC(安全数字大容量):

  接下来,列表中还有另一种最常见的卡,称为SDHC或安全数字大容量卡。此卡最大容量为 32GB,支持升级后的 FAT32 文件系统。在一般情况下,此卡支持的总线速度为 12.5MB/s 至 25MB/s,但根据总线接口(UHS-I、UHS-II、UHS-III、SD-表达)。

  SDXC(安全数字扩展容量):

  接下来,我们有我们的SDXC卡或Secure Digital eXtended-Capacity, 此卡的最大容量为 2TB,它可以同时支持 FAT32 和 exFAT 文件系统。此卡的默认总线速度为 12.5MB/s 至 25MB/s,但它支持高达 3938MB/s 取决于总线接口(UHS-I、UHS-II、UHS-III、SD-Express)

  SDUC(安全数字超容量):

  接下来,在线上,我们有我们最近升级的卡或SDUC卡,它代表安全数字超容量。此卡最大容量为 128TB,仅支持 exFAT 文件系统。它还具有 12.5MB/s 到 25MB/s 的默认总线速度,但根据总线类型,它可以支持高达 3938MB/s(UHS-I、UHS-II、UHS-III、SD-Express)。

  SDIO(安全数字输入输出):

  SDIO是一种安全数字卡接口。根据容量和总线速度,它可以用作输入或输出设备的接口。

  SD卡也按“写入速度”和“物理尺寸”分类

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第1张

  2.按“物理尺寸”分类

  标准(32 毫米 × 24 毫米 × 2.1 毫米)

  miniSD(21.5 毫米 × 20 毫米 × 1.4 毫米)

  microSD(15 毫米 × 11 毫米 × 1 毫米)

  了解 SD 卡不同引脚的功能

  一般来说,SD 卡有 9 个引脚,但其中只有 7 个引脚用于与 SPI 模式下的 SD 卡通信。SD 卡 MicroSD 卡和 SD 卡模块的图像如下所示。

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第2张

  标准 SD 卡可以在 3 种模式下运行:

  1. SPI 模式引脚配置

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第3张

  2.一位 SD 模式引脚配置

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第4张

  3.四位 SD 模式引脚配置

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第5张

  在这个项目中,我们将通过 SPI 与 SD 卡进行通信。工作频率在 100kHz 至 400kHz 之间。

  将 SD 卡与 PIC 微控制器通信所需的组件

  构建此项目所需的组件非常通用,其中大部分都可以在您当地的爱好商店中找到。下面给出了所需组件的列表。

  PIC单片机(PIC18F46K22)

  SD卡模块(带3.3稳压器和逻辑电平转换器)

  降压电阻(3x3.3K 和 3x2.2k)(如果直接使用 SD 卡)

  20MHz晶振

  33pf 电容 - 2Nos

  4.7k, 100E 电阻

  PicKit3

  带领任何颜色

  按钮

  面包板

  跳线

  为 PIC 和 SD 卡模块供电的 12V 适配器

  用于将 SD 与 PIC 微控制器连接的示意图

  下面给出了基于 PIC 微控制器的数据记录器的电路图。

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第6张

  我们使用 PIC18F46K22 作为大脑与 SD 卡模块进行通信。我们已经知道PIC单片机的工作电压是5V,不适合SD卡。由于 SD 卡工作在 3.3v 电压范围内,因此我们使用了一些分压器来降低 SD 卡输入电压。

  我们使用 2.2k 和 3.3k 电阻器来创建分压器电路。

  SD卡输入电压 = 5v x (3.3k/ (2.2k+3.3k)) = 3v

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第7张

SD卡和PIC单片机之间建立通信的程序

在这个项目中,我们使用Chan 的 FatFs 通用 FAT 文件系统模块库在 SD 卡上读取和写入数据,并使用 Microchip 代码配置器 (MCC) 为 (PIC18F46K22) 配置程序。完整的程序可以在本页底部找到。

上面提到的那些库包含在代码的开头。

 

#include "mcc_generated_files/mcc.h"
#包括“ff.h”

 

接下来,定义2个变量fatFs和file用于访问SD卡的区域。

 

FATFS FATF;/* 每个卷需要的 FatFs 工作区 */
文件;/* 每个打开的文件需要的文件对象 */

 

接下来,我们定义一个回调函数来让 LED 闪烁,我们在 Timer0 的帮助下做到这一点。我们计算它,以便 LED 每 1 秒闪烁一次。

 

无效闪烁_led(){
            IO_RA1_Toggle();
}

 

在main()循环中,我们调用SYSTEM_Initialize()函数来初始化系统外围设备,如(INTERRUPT、Pin、Timer0、Uart、SPI1)。并启用全局和外围中断。

 

无效主要(无效)
别的{
            printf("创建文件失败
");
            SD_LED_SetLow();
            }
    }别的{
            printf("SD卡挂载失败
 ------ FRESULT %d ------
");
            }
            printf("
=============完成与SD卡的接口=============


 
");

 

这就是我们如何将 SD 卡与 PIC 微控制器连接以将数据存储到 SD 卡中。

  测试和调试通信过程

  电路和代码完成后,我们在我们放入代码中的调试日志的帮助下测试了电路。如您所见,我们使用 USB 到 UART 转换器在我们使用 PuTTY 的串行监视器窗口中记录调试数据。

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第8张

  看到“创建文件成功”信息后,我们从SD卡模块中取出SD卡,直接放入PC中验证文件是否创建,果然文件创建成功。

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第9张

  我们打开文件并检查我们输入的消息是否存在。它就在那里,这证明我们的代码工作正常。

sdz-v怎么用如何将SD卡模块与PIC微控制器连接并在其中存储数据_https://www.jmylbn.com_新闻资讯_第10张
 

#include "mcc_generated_files/mcc.h"

#包括“ff.h”

FATFS FATF;/* 每个卷需要的 FatFs 工作区 */

文件;/* 每个打开的文件需要的文件对象 */

无效闪烁_led(){

IO_RA1_Toggle();

}

/*

主要应用

*/

无效主要(无效)

别的{

printf("创建文件失败
");

SD_LED_SetLow();

}

}别的{

printf("SD卡挂载失败
------ FRESULT %d ------
");

}

printf("
=============完成与SD卡的接口=============

");

而(1){

// 添加您的应用程序代码

}

}

/**

文件结束

*/