零知开源增强板教程 SD卡使用 SDIO接口 FATFS

本文主要介绍SDIO接口的SD卡模块使用,应用了FATFS文件系统,主要演示SD卡读和写文件的操作。

1、连接

硬件按照零知增强板的SDIO口与SD卡模块连接即可,如下图:

实物连接:

2、程序

我们打开零知开源开发工具,然后新建项目,在代码编辑器中复制下面代码:


											
	/**********************************************************
	*    文件: readWrite.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
	*    -^^- 零知开源,让电子制作变得更简单! -^^-
	*    时间: 2019年3月7日15:11:28
	*    说明:
	************************************************************/
	 
	#include <STM32SD.h>
	 
	//我这里模块没有使用 SD_DETECT_PIN 引脚,因此定义为NONE
	 
	#define SD_DETECT_PIN SD_DETECT_NONE
	 
	File myFile;
	 
	// 复位或上电后运行一次:
	void setup() {
	        //在这里加入初始化相关代码,只运行一次:
	        Serial.begin(9600);
	         
	        delay(4000);//等串口打开,以便观察LOG
	         
	        Serial.println("######  开始SD卡读写测试  ######");
	        Serial.print("初始化 SD 卡...");
	 
	        while (SD.begin(SD_DETECT_PIN) != TRUE)
	        {
	                Serial.println("没有SD卡!!");
	                delay(100);
	        }
	        Serial.println("SD卡初始化完成.");
	         
	        // 打开/创建文件
	        myFile = SD.open("test.txt", FILE_WRITE);
	         
	        // 写入数据
	        if (myFile) {
	                Serial.println("向文件写入数据...");
	 
	                myFile.println("零知开源,让电子制作变得更简单。 [url=http://www.lingzhilab.com]www.lingzhilab.com[/url]  2019年3月7日15:19:16");
	                // 关闭文件
	                myFile.close();
	                Serial.println("写入完成.");
	 
	        } else {
	                // 打开文件失败了
	                Serial.println("打开文件失败!!");
	        }
	         
	        // 再次打开文件用于读取操作
	        myFile = SD.open("test.txt");
	        if (myFile) {
	                Serial.println("从文件读取数据,读取的内容:");
	                 
	                // 从文件读取数据
	                while (myFile.available()) {
	                        Serial.write(myFile.read());
	                }
	                // 关闭文件
	                myFile.close();
	        } else {
	                // 文件打开失败了
	                Serial.println("文件打开失败!!");
	        }
	 
	        Serial.println("######  SD卡读写测试完成  ######");
	}
	 
	//一直循环执行:
	void loop() {
	        // 在这里加入主要程序代码,重复执行:
	         
	}
					

代码有中文注释,很清楚各个函数的功能,还有其他的示例可以查看软件自带示例 12.SDIO(SD卡):

将上述代码【验证】后【上传】到零知-增强板,打开串口工具可以看到以下结果:

可以看到写入的和读取的内容相同,我们再把SD卡拔出来放在电脑上看看写入的内容:

写入的数据和我们预期的一致。

完整工程代码