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

I2S 总线 ——声音的专用传送带

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

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

你好,我是吴老师。

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

读完之后,你应该能:说出 I2S 每根线的角色;解释声音为什么要有专用传送带;说清 ES8311 用 I2C 管什么、用 I2S 运什么。

用时:45–60 分钟。准备:板子、数据线、已经接入板卡 Skill 的 WorkBuddy。


一、两条你已经偷偷用过的总线

前两课放声音、收声音,那些数字是怎么在板子和 ES8311 之间跑的?我们把初始化代码整段借来用,没打开看。今天打开盖子。

声音数据走 I2S;ES8311 还有一根线走 I2C(第 8 课触摸芯片也走 I2C)。

奇怪:同一颗芯片,为什么声音走 I2S,配置走 I2C?先记结论:

  • I2C 是点播:问一句答一句,用来"告诉芯片怎么干活"
  • I2S 是直播:声音数据一刻不停地流,用来"搬声音本身"

二、拆开 I2S 这条传送带

I2S = Inter-IC Sound,专为数字声音设计。最少三根线,有的板子多一根:

线名字比喻干什么
BCK位时钟打拍子每送一位"嗒"一下,对齐节奏
WS声道选择红绿灯现在走左声道还是右声道
DOUT/DIN数据线传送带把声音数字送出去 / 接进来
MCK主时钟总指挥让节奏更稳定

为什么送数字要专门配一根打拍子的线?

因为声音是直播。画面卡一下没关系,声音时快时慢就变调了。声音必须严格按固定节奏到达,所以要一根时钟线专门卡节奏。

💡 这是 I2S 和普通数据总线最大的不同:它有"专职打拍子"的线。

三、为什么声音不能挤 I2C 的线

I2C 只有两根线,能挂很多设备,靠地址点名。特点是省线、灵活、一次传一点

问题就在"一次传一点"。我们录音一秒 16000 个采样,每个 32 位(立体声)——光声音就把 I2C 塞满了,它还要服务触摸屏呢。

I2S 干脆不省线,专门拿几根线,只为声音持续跑。把最好的路,留给最赶时间的货。

⚠️ 比喻有边界:I2S 不是无限快,它只是不抢道、不回头,把带宽全花在声音上。

四、ES8311 的分工

ES8311 要"听"两件事:

  1. 怎么干活:采样率多少、音量多大 → 偶尔说一次 → I2C
  2. 声音本身:每秒 16000 个采样 → 一刻不停 → I2S

一句话:I2C 管事儿,I2S 送货。

所以初始化代码总是两段:先 I2C 配置好 ES8311,再 I2S 跑数据。配置错一档声音就不对,数据线断一根声音直接没。

五、实验一:改配置,不改数据

请用本课的音频封装做程序:
循环播放 440Hz 音调,屏幕上显示当前音量等级。
按一次 BOOT 就把 ES8311 音量调低一档(走 I2C 改配置),
按到最轻再按恢复最大。播放不用停。
我按了几次预测实际
0 次
3 次
到最低

关键:程序没碰声音数据,只改一个配置数字,声音立刻变小。 音调变了吗?应该没变——音调由数据决定,音量由配置决定。

六、实验二:改"声道"参数

第二个程序:正常播放一小段旋律,
播到一半把 I2S 临时改成"只用左声道",再播,再改回来。
屏幕提示现在是立体声还是只左声道。

听声音变化——如果本板喇叭少听不出明显差别,就把它当解剖练习:你能说出哪个参数管左右声道吗?(答案是 WS 和声道掩码。)

七、一条线都不白给

回头看第 11 课的"播放 = 按节奏送数字":

  • 数字走 DOUT/DIN
  • 节奏由 BCK/MCK 掐着
  • 左右由 WS 分
  • 配置由 I2C 管

以后声音出问题,照这个表猜:变调 → 查节奏(采样率/时钟);一边没声 → 查 WS/声道;完全没声 → 查数据线和功放。

八、过关检查

  1. I2S 最少几根线?各管什么?(用比喻)
  2. 声音为什么需要专用传送带?
  3. ES8311 用 I2C、I2S 各听什么?举例。
  4. 改音量为什么立刻生效?数据线动了吗?
  5. 声音变调先怀疑什么?

九、还能玩什么

  • 双声道实验:播放切换左/右/立体声
  • 变速变调:把回声做成机器人音
  • 采样率地图:8k/16k/32k 播同一段音乐,讨论"够用就好"

下一课离开声音,去认识板子的"长期记忆"——SD 卡。

本节配套资源 · 在线烧录

查看全部固件 →

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

第 13 课 · 音量阶梯
可烧录

440Hz 音调持续播放,按 BOOT 把 ES8311 音量调低一档再调回来。改的是 I2C 配置,I2S 数据流一刻不停——音量变、音调不变。

13 I2S总线
第 13 课 · 声道切换
可烧录

播放旋律时按 BOOT 切换双声道 / 只左 / 只右。一帧数据分左右两格,填 0 就是静音那一侧。

13 I2S总线