第23章 SD卡读写实验

第二十三章 SD卡实验

1. SD卡介绍

在嵌入式系统中, 经常需要存储大量的数据和图片, 使用 SD 卡作为大容量存储设备是一个非常好的选择。 比如系统想要存储一天采集的温湿度数据, ESP32自带的存储容量是很小的, 无法保存大容量数据, 此时可使用外部 SD 卡, 通过ESP32 控制将采集的温湿度数据写入到 SD 卡文件内。 又比如, 使用 ESP32 制作一个电子相册或 MP3, 需要读取图片或音乐文件, 依靠 ESP32 自身内存是实现不了的, 此时可使用外部 SD 卡, 通过 ESP32 将图片或音频数据写入到彩屏上显示。

开发板已板载 TF 卡座, 可使用 TF 卡插入使用。 如下: (SD 卡容量大小可任意, 本实验测试使用的是 4G 内存)

ESP32-WROOM-32 可使用 SPI 口与 SD 卡通信, 这在 MicroPython 已集成 SPI模块可直接使用。

SPI 的全称是"Serial Peripheral Interface", 意为串行外围接口。 SPI 是一种高速的, 全双工, 同步的通信总线, 并且在芯片的管脚上只占用四根线, 节约了芯片的管脚, 同时为 PCB 的布局上节省空间, 提供方便, 正是出于这种简单易用的特性, 如今越来越多的芯片集成了这种通信协议。

SPI 接口一般使用 4 条线通信, 事实上只需 3 条线也可以进行 SPI 通信(单向传输时) , 其中 3 条为 SPI 总线(MISO、 MOSI、 SCLK) , 一条为 SPI 片选信号线(CS) 。

ESP32 有两个硬件 SPI 通道允许更高速率传输(到达 80MHz) 。 也可以配置成任意引脚, 但相关引脚要符合输入输出的方向性。 通过自定义引脚而非默认引脚, 会降低传输速度, 上限为 40MHz。 以下是硬件 SPI 总线默认引脚:

屏幕截图 2024 08 15 095801

id=1 的 HSPI 口已连接到模块 SPI-FLASH, 不要去使用。 因此可使用 id=2 的SPI 与 SD 通信。

2. 硬件设计

本实验使用到硬件资源如下:

  • TF卡模块

  • ESP32 GPIO

SD卡接口电路如下:

屏幕截图 2024 08 15 095948

从上图可知, SD 卡接口均连接到指定 IO。

本章实验使用 ESP32 的 IO18、 19、 23 和 4 引脚, 将预先准备好的 SD 卡进行格式化为 FAT32 格式, 然后在 SD 卡根目录下新建一个文件夹“EBOOK” , 在该文件夹下在新建一个文本文件“text.txt” 。 然后插到开发板 TF 卡座上即可。

屏幕截图 2024 08 15 100055

3. 软件设计

3.1 MicroPython函数使用

本实验需要使用到 MicroPython 的 machine 模块来定义 Pin 口和 SPI 初始化。 具体如下:

屏幕截图 2024 08 15 100150

定义好 SPI 后, 还需要驱动一下 SD 卡。

MicroPython 固件库内集成的 SD 卡模块为固定 IO, 无法修改, 考虑到片选CS 管脚能够更灵活使用, 因此需要我们自己实现, 对于不了解 SD 卡底层和命令的用户来说, 要编写出驱动是困难的。 MicroPython 拥有着庞大的用户群, 自然SD 模块也有开源的代码, 直接拿过来使用即可。

屏幕截图 2024 08 15 100442

操作 SD 卡, 可以按照 Python 文件相关方法来操作。

3.2 代码分析

#导入Pin模块
import machine, sdcard, os
from machine import SPI, Pin

sd = sdcard.SDCard(SPI(2, sck=Pin(18), mosi=Pin(23), miso=Pin(19)), Pin(4))
os.mount(sd,"/sd")

print(os.listdir("/sd"))

file_name="/sd/EBOOK/text.txt"

f=open(file_name,"w")  #打开文件,进行写操作
write_txt="大家好,欢迎使用普中-ESP32开发板,人生苦短,我选Python和MicroPython"
print(f.write(write_txt))  #写入
f.close()  #关闭文件

f=open(file_name)  #打开文件,进行读操作
read_txt=f.read()
print(read_txt)
f.close()  #关闭文件

#程序入口
if __name__=="__main__":
    
    while True:
        pass


2024.8.23 第一次修订,后期不再维护

posted @ 2024-08-23 09:21  hazy1k  阅读(12)  评论(0编辑  收藏  举报