如何将SD卡模块与PIC微控制器连接并在其中存储数据

如何将SD卡模块与PIC微控制器连接并在其中存储数据,第1张

  安全数字(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卡也按“写入速度”和“物理尺寸”分类

如何将SD卡模块与PIC微控制器连接并在其中存储数据,poYBAGLqNdqAE1fnAADpdZORb4g908.png,第2张

  2.按“物理尺寸”分类

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

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

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

  了解 SD 卡不同引脚的功能

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

如何将SD卡模块与PIC微控制器连接并在其中存储数据,pYYBAGLqNdWAJ1Z8AAXKSnEt91Q493.png,第3张

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

  1. SPI 模式引脚配置

如何将SD卡模块与PIC微控制器连接并在其中存储数据,pYYBAGLqNdGAAqS5AAFw8Wj-ubE862.png,第4张

  2.一位 SD 模式引脚配置

如何将SD卡模块与PIC微控制器连接并在其中存储数据,pYYBAGLqNc2AXnhBAAGLHBxewyM570.png,第5张

  3.四位 SD 模式引脚配置

如何将SD卡模块与PIC微控制器连接并在其中存储数据,poYBAGLqNcqAHeZTAAFyg_Aam9E034.png,第6张

  在这个项目中,我们将通过 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 微控制器的数据记录器的电路图。

如何将SD卡模块与PIC微控制器连接并在其中存储数据,poYBAGLqNcWAdGxBAAFPRbVHZNg474.png,第7张

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

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

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

如何将SD卡模块与PIC微控制器连接并在其中存储数据,pYYBAGLqNcKANTsBAAVdAJmPsn0495.png,第8张

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)。并启用全局和外围中断。

 

无效主要(无效)
{
            单位体重;
            //初始化设备
            SYSTEM_IniTIalize();
            // 如果在 PIC18 高/低优先级模式下使用中断,则需要启用全局高和低中断
            // 如果在 PIC 中档兼容模式下使用中断,则需要启用全局和外设中断
            // 使用以下宏:
            // 启用全局中断
            INTERRUPT_GlobalInterruptEnable();
            // 禁用全局中断
            //INTERRUPT_GlobalInterruptDisable();
            // 启用外设中断
            INTERRUPT_PeripheralInterruptEnable();
            //禁用外设中断
            //INTERRUPT_PeripheralInterruptDisable();

 

系统初始化后,调用TMR0_SetInterruptHandler()函数,设置回调函数,然后启动 Timer0。

 

TMR0_SetInterruptHandler(blink_led);
TMR0_StartTimer();

 

完成所有初始化后,现在我们使用 SD 卡启动主进程。首先,我们需要调用函数f_mount()来挂载 SD 卡,并将返回值存储到名为FRESULT的变量中。通过检查该stat变量,我们可以进一步进行。所以,如果stat结果为FR_OK,则表示SD卡挂载成功,否则挂载失败。所以,在 SD 卡挂载成功后,我们现在调用f_open()创建一个名为“ test.txt ”的文件,然后使用 f_lseek()函数将光标指向文件末尾。现在,我们可以调用f_write()函数将数据写入该文件,最后,我们调用f_close()来关闭 SD 卡中打开的文件。这就是我们在之前创建的文本文件中写入的方式。

 

printf("\r\n=============开始与SD卡接口=============\r\n");
            FRESULT stat = f_mount(&fatFs, "", 1);
            if (stat == FR_OK) { /* 挂载 SD */             
            printf("SD卡挂载成功\r\n");
            SD_LED_SetHigh();
             if (f_open(&file, "Sd_test.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE) == FR_OK) { /* 打开或创建文件 */            
            printf("创建文件成功\r\n");            
                         if ((file.fsize != 0) && (f_lseek(&file, file.fsize) != FR_OK)) 转到 endSD; /* 跳转到文件末尾 */
                         f_write(&file, "大家好!\r\n", 13, &bw);
            f_write(&file, "这是写入SD卡的短信。更多信息请访问www.circuitdigest.com\r\n", 99, &bw);
                         endSD: f_close(&file); /* 关闭文件 */
            SD_LED_SetLow();
             }别的{
            printf("创建文件失败\r\n");
            SD_LED_SetLow();
            }
    }别的{
            printf("SD卡挂载失败\r\n ------ FRESULT %d ------\r\n");
            }
            printf("\r\n=============完成与SD卡的接口=============\r\n\r\n\r\n \r\n");

 

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

  测试和调试通信过程

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

如何将SD卡模块与PIC微控制器连接并在其中存储数据,pYYBAGLqNbqAXgcoAAE5SSva7Jg649.png,第9张

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

如何将SD卡模块与PIC微控制器连接并在其中存储数据,pYYBAGLqNbaAMzmRAAE_cOvIfeM018.png,第10张

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

如何将SD卡模块与PIC微控制器连接并在其中存储数据,pYYBAGLqNbKAD1P9AACTBXBPfsI345.png,第11张
 

#include "mcc_generated_files/mcc.h"

#包括“ff.h”

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

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

无效闪烁_led(){

IO_RA1_Toggle();

}

/*

主要应用

*/

无效主要(无效)

{

单位体重;

//初始化设备

SYSTEM_Initialize();

// 如果在 PIC18 高/低优先级模式下使用中断,则需要启用全局高和低中断

// 如果在 PIC 中档兼容模式下使用中断,则需要启用全局和外设中断

// 使用以下宏:

// 启用全局中断

INTERRUPT_GlobalInterruptEnable();

// 禁用全局中断

//INTERRUPT_GlobalInterruptDisable();

// 启用外设中断

INTERRUPT_PeripheralInterruptEnable();

//禁用外设中断

//INTERRUPT_PeripheralInterruptDisable();

TMR0_SetInterruptHandler(blink_led);

TMR0_StartTimer();

SD_LED_SetLow();

printf("############################################## ###########\r\n");

printf("与 PIC18 的 SD 接口\r\n");

printf("############################################## ###########\r\n");

printf("系统设置完成\r\n");

printf("\r\n=============开始与SD卡接口=============\r\n");

FRESULT stat = f_mount(&fatFs, "", 1);

if (stat == FR_OK) { /* 挂载 SD */

printf("SD卡挂载成功\r\n");

SD_LED_SetHigh();

if (f_open(&file, "Sd_test.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE) == FR_OK) { /* 打开或创建文件 */

printf("创建文件成功\r\n");

if ((file.fsize != 0) && (f_lseek(&file, file.fsize) != FR_OK)) 转到 endSD; /* 跳转到文件末尾 */

f_write(&file, "大家好!\r\n", 13, &bw);

f_write(&file, "这是写入 SD 卡的短信。更多信息请访问www.circuitdigest.com \r\n", 99, &bw);

endSD: f_close(&file); /* 关闭文件 */

SD_LED_SetLow();

}别的{

printf("创建文件失败\r\n");

SD_LED_SetLow();

}

}别的{

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

}

printf("\r\n=============完成与SD卡的接口=============\r\n\r\n\r\n \r\n");

而(1){

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

}

}

/**

文件结束

*/

欢迎分享,转载请注明来源:内存溢出

原文地址:https://outofmemory.cn/dianzi/2718607.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-08-17
下一篇2022-08-17

随机推荐

  • 5岁宝宝报口才班有用么

    5岁宝宝报口才班是有用的。学习语言表演至关重要,因为它可以增强孩子的自信心、活跃孩子的思维、培养孩子口脑思维能力、语言组织能力与表达能力、培养与人交流、上台表演的能力、培养良好的语言艺术修养。一、5岁

    2022-12-10
    100
  • 琵琶入门指法

    琵琶入门指法包括:右手技法与左手技法,其中前者包括弹、挑、滚、分、摭、勾搭、轮、扫、拂、摇、凤点头等,后者包括按音、换把、跳把、过弦、打音、带音、吟、揉、推、拉、绰、注、绞弦、颤音、顿音、泛音等。这些

    2022-12-10
    000
  • 零基础的小白想要学插画,应该从哪开始练习

    零基础的小白想要学插画,应该从哪开始练习?很多人想通过插画培训来实现高薪就业,但具体怎么学呢?大多数人不太了解,零开始学插画,这是一个很漫长的过程,零基础自然得先从基础开始学习,步子大了容易扯到蛋,切

    2022-12-10
    000
  • 美术集训是什么样的过程

    美术集训是美术艺考前的高强度高密度训练。简单来说,艺考考什么,这个时间集训画室就会让你们练什么。例如素描考试,集训生活就是练习男青年男中年男老年女中年女青年女老年正侧各种面,各类静物。找准自身专业优势

  • 2021年辽宁驾驶员培训考试题考驾照科目四试题(118)

    *1.在泥泞路段行车,要怎样控制速度,匀速一次通过?A.使用驻车制动B.踏下离合器踏板C.踏制动踏板D.用加速踏板【参考答案】D【参考解析】注意关键:匀速一次性通过,因此要控制要油门,避免熄火等情况发

    2022-12-09
    400
  • 属鸡与属兔合不合

    属鸡的人性格中虽然存在不少的缺点,但是同样也有优点存在,如果属兔的人真的爱对方并且愿意和对方一生一世,那么就应该重视对方的优点忽视对方的缺点,毕竟属兔的人本身也存在一些缺点,所以没必要抓着对方的缺点不

  • 71年属猪的婚姻如何

    男属猪婚配女属鼠:美满的婚姻,只要女方不过于奔放。男属猪婚配女属牛:不会感到情和爱的温馨,因为双方都会向外发展。男属猪婚配女属虎:可融洽地共同生活,但女方要注意不能过分迷恋男方。男属猪婚配女属兔:会有

    2022-12-10
    000
  • 一克脂肪在体内氧化时平均产生多少的能量

    37 kJ。理论上,1克脂肪在人体内完全氧化能释放37 kJ的能量,约9卡路里。按照人体糖类转化为ATP的产能效率约为30%推算,含1000卡路里热量的糖类在体内完全转化最多能生成300卡路里左右A

  • 歪打正着的意思是什么

    歪打正着的意思是指方法使用错了之后没想到结果却是正确的。比喻原意本不在此,却凑巧得到了满意的答案。歪打正着是联合式;作宾语、补语、分句;指凑巧。歪打正着,读作wāi dǎ zhèng zháo。出自清

    2022-12-10
    000

发表评论

登录后才能评论

评论列表(0条)

    保存