esp32 SD卡读写
编译环境:arduino 编写
开发板选择:esp32 cam开发板
手里恰好有一块esp32 cam的开发板,随使用了文件系统驱动SD卡,方便后期使用,使用SDMMC接口访问SD卡 。
在文件读取部分稍微处理了一下,读取SD卡wifi信息进行连接,这样避免配网或者修改wifi信息,示例代码读取WiFi并且连接。
使用这玩意,SD卡DATA1 和LED灯使用一个I/O口,这就有点离谱,只要有数据读写,灯就被点亮。
此原理图来源esp32 cam开发板:
外接47K上拉电阻。U0TXD和T0RXD用于烧录固件。
ESP-32S Module | SD |
---|---|
14(GPIO12) | HS2_DATA2(DATA2) |
16(GPIO13) | HS2_DATA2(CD/DATA3) |
23(SDI/SD1) | HS2_CMD(CMD) |
13(GPIO14) | HS2_CLK(CLK) |
24(GPIO2) | HS2_DATA0(DATA0) |
26(GPIO4) | HS2_DATA1(DATA1) |
1、文件操作常用API
包含在:FS.cpp 文件中,有意向可以查看。
打开文件:
File FS::open(const String& path, const char* mode)
File FS::open(const char* path, const char* mode)
path:为打开路径,mode:为打开方式,mode可选FILE_READ、FILE_WRITE、FILE_APPEND,即只读模式、写入模式、追加模式;
写入文件:
File print(const char * message)
message:要写入的信息
size_t File::write(uint8_t c)
size_t File::write(const uint8_t *buf, size_t size)
读取文件:
int File::available()
返回当前指针下可读取字节数;
int File::read()
size_t File::read(uint8_t* buf, size_t size)
size_t readBytes(char *buffer, size_t length)
读取数据,该操作会移动文件指针;
关闭当前文件:
void File::close()
在不移动文件指针的情况下读取一个字节数据:
int File::peek()
移动文件指针,mode可选SeekSet、SeekCur、SeekEnd,分别为正常移动、移动到文件头、移动到文件尾:
bool File::seek(uint32_t pos, SeekMode mode)
返回当前文件指针位置:
size_t File::position() const
返回当前文件的大小:
size_t File::size() const
返回当前文件是否有效:
File::operator bool() const
返回最后修改文件时间:
time_t File::getLastWrite()
返回当前文件名:
const char* File::name() const
返回当前文件是否为目录:
boolean File::isDirectory(void)
打开下一个文件:
File File::openNextFile(const char* mode)
返回到目录中首文件位置:
void File::rewindDirectory(void)
检查文件或路径是否存在:
bool FS::exists(const char* path)
bool FS::exists(const String& path)
移除文件:
bool FS::remove(const char* path)
bool FS::remove(const String& path)
重命名文件,依次输入旧的、新的包含完整文件名的路径:
bool FS::rename(const char* pathFrom, const char* pathTo)
bool FS::rename(const String& pathFrom, const String& pathTo)
创建目录:
bool FS::mkdir(const char *path)
bool FS::mkdir(const String &path)
删除目录:
bool FS::rmdir(const char *path)
bool FS::rmdir(const String &path)
判断指定的目录是否是加载点:
void FSImpl::mountpoint(const char * mp)
const char * FSImpl::mountpoint()
如果是挂载点返回0,如果不是就返回非0
2、SPIFFS文件系统
包含在:SD_MMC.h头文件
挂载文件系统:
bool begin(const char * mountpoint="/sdcard", bool mode1bit=false);
取消挂载文件系统:
void end()
检测SD卡大小:
uint64_t cardSize();
格式化文件系统:
bool format()
返回文件系统总字节数:
size_