AI 编程课
完整教案
自学课件
14 课 · 共 14/48

SD 卡原理 ——为什么板子断电不会忘

课时
待定
器材
ESP32-S3 触摸屏板 + USB 线
前置知识
配套代码
见项目 demo 目录

自学读本:跟着读、照着做,卡住就问 AI

你好,我是吴老师。

这份是给你自己读的——不用等我讲,你一段一段往下看,看到让你停下来的地方,就照着做一遍。看不懂的整段复制给 AI,加一句"请一次只解释一个概念,讲完问我一个小问题"。

读完之后,你应该能:说清内存和 SD 卡断电后为什么不一样;解释文件、扩展名、格式化是干嘛的;写出"打开→读写→关闭"三步并说清为什么 close() 不能省。

用时:60–90 分钟。准备:板子、MicroSD 卡(已格式化为 FAT32)、数据线、已经接入板卡 Skill 的 WorkBuddy。


一、一个会"失忆"的板子

第 6 课的弹球如果加个"最高分":你玩到 120 分,一按 RESET 重启——最高分归零。

因为分数存在**内存(RAM)**里。内存靠电"活着",断电全没。这就像电脑文档没保存就断电,白写了。

可你的手机照片、U 盘文件、板子上的 MicroSD 卡——断电后为什么还在?

这就是今天的问题。

目标一句话:让板子把自己的"经历"记下来,重启之后它还记得。

二、实验:重启也不清零的计数器

请使用课程的 esp32s3-touchboard-hardware-dev Skill,做"持久计数器":
每次开机,把 SD 卡里 count.txt 的数字读出来 +1 再写回去,
屏幕显示"这是第 N 次开机",串口也打印。
SD 卡用 SD_MMC,先 setPins(38,40,39,41,48,47) 再 begin。
如果 count.txt 不存在,就从 1 开始。帮我新建程序并烧录。

按几次 RESET 试试:

操作屏幕显示
第一次开机第 1 次
按 RESET第 2 次
再按第 3 次

板子记住了。 它把数字放在了断电也不丢的地方——MicroSD 卡。

三、内存靠"电"活着,闪存靠"锁"记住

内存(RAM):一个个小格子靠电流维持状态。像一张用发光颜料写的黑板——有光照着(供电)字就在,灯一灭字就消失。

闪存(Flash,SD 卡/U 盘/手机存储):电写进去后电荷被"锁"住,断电也跑不掉。像刻在石板上的字——不用电也一直在。

RAM闪存(SD 卡)
存东西靠电流维持电荷被锁
断电全丢还在
像什么发光黑板刻石板
用途临时算数(草稿纸)长期保存(保险箱)

⚠️ 比喻有边界:闪存不是真"永远"——它有写次数寿命(几十万次起),写太频繁会磨损;写入也不是瞬间的,要先擦后写,所以比内存慢。

一句话:RAM 是草稿纸,SD 卡是保险箱。

四、文件:打包 + 命名

SD 卡怎么分得清照片、音乐、文字?靠文件

  • 文件名 + 扩展名count.txt1.jpgnote.wav。扩展名是标签,告诉别人这是文字、图片还是声音
  • 目录(文件夹)+ 路径/photos/1.jpg = "photos 目录里的 1.jpg"
  • 格式化:新卡第一次用,把空柜子装好抽屉架、做一份"目录本"(哪个抽屉在哪、装了什么)

程序读写 = 打开(找抽屉)→ 读/写(拿/放)→ 关闭(合上并记目录本)

第 10 课(或稍后)你会读照片;今天学""。

五、写文件:那行不能省的 close()

计数器 +1 的核心:

打开 count.txt 用于写入
往里写当前数字
关闭文件      ← 千万别省!

板子写文件时,先把数据放在自己的临时缓冲,攒够了才真的往 SD 卡写close() 就是在说:"把攒的货真的放进保险箱,更新目录本。"

不 close 就断电 → 缓冲里的数据丢了——你写了,但没存上。

💡 写完文件,一定 close()。 这是工程习惯第一课。

六、只改一处:删掉 count.txt 会怎样

把 SD 卡里的 count.txt 删掉,再重启板子:

我改了什么我预测实际
删掉 count.txt 重启

程序遇不到文件,会按写好的"从 1 开始"处理 → 第 1 次。

再试试:把 count.txt 里的数字手动改成 100 再重启——程序"读文件"而不是"从零记忆",一切以文件里存的内容为准

七、为什么板子要自己插一张卡

板子身上也有一小块 Flash,能存数据。但:

  1. ,存不了多少
  2. 拿不出来——存在里面的数据不能插电脑看

SD 卡可以随时拔出来插电脑:把 count.txt 打开,亲眼看到那串数字。数据能带出来,数据才是你的。

八、下一课预告

本课存的是数字。第 12 课录的声音在内存里也是一串数字(一秒 16000 个)。把这串数字写进文件,声音就能存下来——下一课做"声音留言机",把录音存成 SD 卡里的 wav。

九、故障排查

现象先检查
读不到卡(mount failed)卡插紧了吗?格式化了吗(FAT)?setPinsbegin 前吗?
写了重启就没了close() 了吗?
能读不能写卡套写保护锁拨开没有?
打不开文件目录存在吗?路径对吗?

十、过关检查

  1. RAM 和 SD 卡断电后有什么区别?为什么?
  2. 格式化干什么?扩展名干嘛的?
  3. 写文件三步?close() 为什么不能省?
  4. 计数器重启接着涨,"记住"的是什么?存在哪?
  5. 删掉 count.txt 重启会怎样?为什么?
  6. 为什么数据要能带出来?

十一、还能玩什么

  • 开机日记:每次开机往 diary.txt 追加一行
  • 弹球最高分:撞墙最高分存 SD,重启不丢
  • 音量记录:每分钟把音量记一行
  • 我的档案卡:自我介绍.txt 开机读出来显示

下一课见——把声音也锁进保险箱。

本节配套资源 · 在线烧录

查看全部固件 →

下列演示程序已编译为可烧录固件。把你的 ESP32-S3 触摸屏板 用 USB 接上电脑(需 Chrome / Edge 浏览器),点「在线烧录」即可直接写入,无需安装任何软件。

第 14 课 · 重启不清零的计数器
可烧录

每次开机往 SD 卡 count.txt 加 1,重启接着涨——数据在卡上,不在芯片里。读 → 加 1 → 写 → close()。

14 SD卡
第 14 课 · 追加日记
可烧录

每次开机往 diary.txt 追加一行,拔卡插电脑就能看到。FILE_APPEND 追加、FILE_WRITE 覆盖,一字之差。

14 SD卡
第 14 课 · 列出 SD 卡文件
可烧录

屏幕列出 SD 根目录所有文件和文件夹,目录带标记。open("/") + openNextFile() 逐个翻。

14 SD卡
第 14 课 · 破纪录才写盘
可烧录

按 BOOT 随机得分,只有破纪录才写入 highscore.txt——挑对时机写文件,省得白写。

14 SD卡