Arduino – SD库

Arduino-SD库资料制作:Dapenson

SD库

SD库简介
Arduino向SD卡读写数据
Arduino读取SD卡根目录内容
Arduino在SD卡上创建和删除文件
SD库函数

SD库简介

SD库实现了Arduino对SD卡的读取和写入。它基于William Greiman的SdFat 库进行开发。SD库在标准SD卡和SDHC卡上支持FAT16FAT32文件系统模式。

使用SD库中函数里参数可以包含以正斜杠/分隔的路径,例如" directory / filename.txt"。由于工作目录始终是SD卡的根目录,因此无论文件名是否包含斜杠,其名称都指向同一文件(例如," / file.txt"等同于" file.txt")。从1.0版开始,SD库支持打开多个文件。

开发板与SD卡之间的通信使用SPI,注意:
必须连接SS引脚来选择SD卡。在UNO上,SS默认是为引脚D10,在MEGA2560上SS默认为引脚53,
或着您也可以在SD.begin()函数中指定一个SS引脚并与之连接。请注意,在您自定义了SS引脚之后,请设置该引脚为输出模式,否则SD库无法正常工作(建议初学者根据太极创客提供的电路连线图进行连接)

1 硬件需求

SD卡读写模块(SPI)

SD卡读取模块 Arduino SD教程
SD卡读取模块

常用的SD卡读写模块根据SD卡和TF卡可分为以上两种,

一种是上图左边的模块( MicroSD Card Adapter), 它是 Micro sd卡读写模块,通过文件系统及SPI接口驱动
程序单片机系统即可完成 Microsd卡内的文件进行读写。 Arduino用户可直接使用 Arduino IDE自带的SD卡程序库即可完成卡的初始化和读写

模块特点
1. 支持 Micro sd卡、 Micro soho卡(高速卡)
2. 板载电平转换电路,即接口电平可为5V或3.3V
3. 供电电源为45V~5.5V,板载3.3V稳压电路
4. 通信接口为标准SPI接口
5. 4个M2螺丝定位孔,便于安装

控制接口:共6个引脚(GND、VCC、MOSI、MISO、SCK、CS)
GND为地,VCC为供电电源,MOSI、MISO、SCK为SPI总线
CS为片选信号脚;

详细参数:

SD卡读写模块A详细参数 Arduino SD卡读写模块 太极创客
SD卡读写模块A详细参数

另外一种是上图右边的模块( SD Card Module), 它是 SD卡读写模块,同样的也是通过文件系统及SPI接口驱动
程序单片机系统即可完成SD卡内的文件进行读写。 因此左右两个版本的模块虽然尺寸和支持的卡大小不同, 但是功能和性能是一样的 , 您可以根据自己的需求进行选购, 在某宝搜索 “SD卡模块” 即可找到这两种Sd卡模块.

2 电路连接

读写模块多采用SPI进行电路连接的,为了方便大家参考,下表列出了不同Arduino板上的SPI的连线:

Arduino SPI协议
各开发板SPI连线

您可以根据自己的开发板类型进行连线

下面以UNO和MEGA 2560为例,将SD卡读写模块连接在开发板对应的SPI引脚上

 

 

Arduino UNO通过SPI使用SD卡读取模块 SPI SD读取模块

UNO通过SPI使用SD卡读取模块

Arduino MEGA2560通过SPI使用SD卡读取模块 SPI SD读取模块

MEGA2560通过SPI使用SD卡读取模块

Arduino向SD卡读写数据

为了演示,我们这里使用开发板默认的SS引脚,电路示意图见上.太极创客(www.taichi-maker.com)

如果您需要使用自定义CS引脚,则需要在setup()中,使用SD.begin()将指定引脚定义为CS引脚,
定义之后一定要设置该引脚为输出模式,否则无法正常工作,具体参考SD.begin()函数页面.

在本示例,将在setup()中使用函数SD.open()创建一个名为" test.txt"
的新文件。其中参数FILE_WRITE意为将从结尾开始启用对文件的读写。如果卡上已经有文件" test.txt",则打开该文件。

将打开的文件的实例化对象命名为" myFile"

打开后,用myFile.println()函数将字符串写入SD卡。内容写入后,关闭文件。

为了验证是否写入成功,我们再次使用打开文件,使用SD.open()。打开以后,使用SD.read()读取信息然后通过串行监视器打印里面的数据。读取文件的所有内容后,请使用SD.close()关闭文件。

效果演示
Arduino向SD卡读写数据效果演示 SD读写模块 Arduino MEGA2560 UNO SPI
Arduino向SD卡读写数据效果演示

通过串口反馈的信息太极创客(www.taichi-maker.com)

Arduino向SD卡读写数据效果演示 SD读写模块 Arduino MEGA2560 UNO SPI
Arduino向SD卡读写数据效果演示

使用Arduino创建好的文件和数据示例

Arduino读取SD卡根目录内容

本示例说明如何列出SD卡目录中的有效的文件(文件名不可含中文字符)。
使用自定义的printDirectory函数扫描SD卡根目录,并通过串口监视器反馈的形式打印根目录下存在的每个文件和文件夹。对于单独文件,还将打印文件的大小。太极创客(www.taichi-maker.com)

效果演示

为了更好地读取根目录下的内容,我们事前在根目录下创建多个类型的文件以展示本程序的功能

Arduino读取SD卡根目录内容 SD读写模块 Arduino MEGA2560 UNO SPI
Arduino读取SD卡根目录内容

串口打印演示

Arduino读取SD卡根目录内容 SD读写模块 Arduino MEGA2560 UNO SPI
Arduino读取SD卡根目录内容

 

可以看到Arduino串口监视器打印出了SD卡内所有的文件及其文件大小,如果是文件夹则打印文件夹中的内容.

Arduino在SD卡上创建和删除文件

本示例说明如何在SD卡上新建和删除文件

在本示例,将在setup()中使用函数SD.open()创建一个名为" test.txt"
的新文件。使用FILE_WRITE模式启用对文件的读写。注意,读写完成后请通过myFile.close()函数关闭文件。

读写完成以后,请使用SD.exists()检查文件是否存在。

最后,使用SD.remove()从SD卡中删除文件。太极创客(www.taichi-maker.com)

 

效果演示太极创客(www.taichi-maker.com)
Arduino在SD卡上创建和删除文件1SD读写模块 Arduino MEGA2560 UNO SPI
Arduino在SD卡上创建和删除文件1SD读写模块

SD库函数

 

SD库函数结构 Arduino SPI SD读写模块
SD类函数

SD类的函数提供用户用于访问SD卡并处理其中文件和目录的功能。太极创客(www.taichi-maker.com)

begin()
exists()
mkdir()
open()
remove()
rmdir()

FILE类函数

File类的函数允许读取和写入SD卡上的单个文件。
注意:SD库中FILE类属于Stream类的子类。因此用法与Serial、WiFiClient等是一致的,
详情可查看太极创客Stream教程

name()
available()
close()
flush()太极创客(www.taichi-maker.com)
peek()
position()
print()
println()
seek()
size()
read()
write()
isDirectory()
openNextFile()
rewindDirectory()