本文主要介绍SDIO接口的SD卡模块使用,应用了FATFS文件系统,主要演示SD卡读和写文件的操作。
硬件按照零知增强板的SDIO口与SD卡模块连接即可,如下图:
实物连接:
我们打开零知开源开发工具,然后新建项目,在代码编辑器中复制下面代码:
/**********************************************************
* 文件: 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卡拔出来放在电脑上看看写入的内容:
写入的数据和我们预期的一致。
完整工程代码