哪些ESP32系列芯片具有双道通I2S和PDM RX?

ESP32芯片选择:

需要使用2个通道IIS的,只能选择ESP32、ESP32-S3、ESP32-P4三种之一,需要适应PDM RX时也只能选择这3个芯片系列。

芯片I2S 标准PDM TXPDM RXTDMADC/DACLCD/摄像头
ESP32I2S 0/1I2S 0I2S 0I2S 0I2S 0
ESP32-S2I2S 0I2S 0
ESP32-C3I2S 0I2S 0I2S 0
ESP32-C6I2S 0I2S 0I2S 0
ESP32-S3I2S 0/1I2S 0I2S 0I2S 0/1
ESP32-H2I2S 0I2S 0I2S 0
ESP32-P4I2S 0~2I2S 0I2S 0I2S 0~2

I2S简介

I2S架构

I2S(Inter-IC Sound,集成电路内置音频总线)是一种同步串行通信协议,通常用于在两个数字音频设备之间传输音频数据。
ESP32-S3 包含 2 个 I2S 外设。通过配置这些外设,可以借助 I2S 驱动来输入和输出采样数据。
标准或 TDM 通信模式下的 I2S 总线包含以下几条线路:
MCLK:主时钟线。该信号线可选,具体取决于从机,主要用于向 I2S 从机提供参考时钟。
BCLK:位时钟线。用于数据线的位时钟。
WS:字(声道)选择线。通常用于识别声道(除 PDM 模式外)。
DIN/DOUT:串行数据输入/输出线。如果 DIN 和 DOUT 被配置到相同的 GPIO,数据将在内部回环。
PDM 通信模式下的 I2S 总线包含以下几条线路:
CLK:PDM 时钟线。
DIN/DOUT:串行数据输入/输出线。
每个 I2S 控制器都具备以下功能,可由 I2S 驱动进行配置:
可用作系统主机或从机
可用作发射器或接收器
DMA 控制器支持流数据采样,CPU 无需单独复制每个采样数据

每个控制器都有独立的 RX 和 TX 通道,连接到不同 GPIO 管脚,能够在不同的时钟和声道配置下工作。注意,尽管在一个控制器上 TX 通道和 RX 通道的内部 MCLK 相互独立,但输出的 MCLK 信号只能连接到一个通道。如果需要两个互相独立的 MCLK 输出,必须将其分配到不同的 I2S 控制器上。

I2S 文件结构

需要包含在 I2S 应用中的公共头文件如下所示:

i2s.h:提供原有 I2S API(用于使用原有驱动的应用)。
i2s_std.h:提供标准通信模式的 API(用于使用标准模式的新驱动程序的应用)。
i2s_pdm.h:提供 PDM 通信模式的 API(用于使用 PDM 模式的新驱动程序的应用)。
i2s_tdm.h:提供 TDM 通信模式的 API(用于使用 TDM 模式的新驱动的应用)。

备注
原有驱动与新驱动无法共存。包含 i2s.h 以使用原有驱动,或包含其他三个头文件以使用新驱动。原有驱动未来可能会被删除。
已包含在上述头文件中的公共头文件如下所示:
i2s_types_legacy.h:提供只在原有驱动中使用的原有公共类型。
i2s_types.h:提供公共类型。
i2s_common.h:提供所有通信模式通用的 API。

I2S 时钟

时钟源

i2s_clock_src_t::I2S_CLK_SRC_DEFAULT:默认 PLL 时钟。
i2s_clock_src_t::I2S_CLK_SRC_PLL_160M:160 MHz PLL 时钟。

时钟术语

采样率:单声道每秒采样数据数量。
SCLK:源时钟频率,即时钟源的频率。
MCLK:主时钟频率,BCLK 由其产生。MCLK 信号通常作为参考时钟,用于同步 I2S 主机和从机之间的 BCLK 和 WS。
BCLK:位时钟频率,一个 BCLK 时钟周期代表数据管脚上的一个数据位。通过 i2s_std_slot_config_t::slot_bit_width 配置的通道位宽即为一个声道中的 BCLK 时钟周期数量,因此一个声道中可以有 8/16/24/32 个 BCLK 时钟周期。
LRCK / WS:左/右时钟或字选择时钟。在非 PDM 模式下,其频率等于采样率。

备注
通常,MCLK 应该同时是 采样率 和 BCLK 的倍数。字段 i2s_std_clk_config_t::mclk_multiple 表示 MCLK 相对于 采样率 的倍数。在大多数情况下,将其设置为 I2S_MCLK_MULTIPLE_256 即可。但如果 slot_bit_width 被设置为 I2S_SLOT_BIT_WIDTH_24BIT,为了保证 MCLK 是 BCLK 的整数倍,应该将 i2s_std_clk_config_t::mclk_multiple 设置为能被 3 整除的倍数,如 I2S_MCLK_MULTIPLE_384,否则 WS 会不精准。

I2S 通信模式

标准模式

标准模式中有且仅有左右两个声道,驱动中将声道称为 slot。这些声道可以支持 8/16/24/32 位宽的采样数据,声道的通信格式主要包括以下几种:

Philips 格式:数据信号与 WS 信号相比有一个位的位移。WS 信号的占空比为 50%。

MSB 格式:与 Philips 格式基本相同,但其数据没有位移。
PCM 帧同步:数据有一个位的位移,同时 WS 信号变成脉冲,持续一个 BCLK 周期。

PDM 模式 (TX)

在 PDM(Pulse-density Modulation,脉冲密度调制)模式下,TX 通道可以将 PCM 数据转换为 PDM 格式,该格式始终有左右两个声道。PDM TX 只在 I2S0 中受支持,且只支持 16 位宽的采样数据。PDM TX 至少需要一个 CLK 管脚用于时钟信号,一个 DOUT 管脚用于数据信号(即下图中的 WS 和 SD 信号。BCK 信号为内部位采样时钟,在 PDM 设备之间不需要)。PDM 模式允许用户配置上采样参数 i2s_pdm_tx_clk_config_t::up_sample_fp 和 i2s_pdm_tx_clk_config_t::up_sample_fs,上采样率可以通过公式 up_sample_rate = i2s_pdm_tx_clk_config_t::up_sample_fp / i2s_pdm_tx_clk_config_t::up_sample_fs 来计算。在 PDM TX 中有以下两种上采样模式:

固定时钟频率模式:在这种模式下,上采样率将根据采样率的变化而变化。设置 fp = 960、 fs = sample_rate / 100,则 CLK 管脚上的时钟频率 (Fpdm) 将固定为 128 * 48 KHz = 6.144 MHz。注意此频率不等于采样率 (Fpcm)。

固定上采样率模式:在这种模式下,上采样率固定为 2。设置 fp = 960、 fs = 480,则 CLK 管脚上的时钟频率 (Fpdm) 将为 128 * sample_rate。

PDM 模式 (RX)

在 PDM(Pulse-density Modulation,脉冲密度调制)模式下,RX 通道可以接收 PDM 格式的数据并将数据转换成 PCM 格式。PDM RX 只在 I2S0 中受支持,且只支持 16 位宽的采样数据。PDM RX 至少需要一个 CLK 管脚用于时钟信号,一个 DIN 管脚用于数据信号。此模式允许用户配置下采样参数 i2s_pdm_rx_clk_config_t::dn_sample_mode。在 PDM RX 中有以下两种下采样模式:

i2s_pdm_dsr_t::I2S_PDM_DSR_8S:在这种模式下,WS 管脚的时钟频率 (Fpdm) 将为 sample_rate (Fpcm) * 64。

i2s_pdm_dsr_t::I2S_PDM_DSR_16S: 在这种模式下,WS 管脚的时钟频率 (Fpdm) 将为 sample_rate (Fpcm) * 128。

TDM 模式

TDM(Time Division Multiplexing,时分多路复用)模式最多支持 16 个声道,可通过 i2s_tdm_slot_config_t::slot_mask 启用通道。

但由于硬件限制,声道设置为 32 位宽时最多只能支持 4 个声道,16 位宽时最多只能支持 8 个声道,8 位宽时最多只能支持 16 个声道。TDM 的声道通信格式与标准模式基本相同,但有一些细微差别。

Philips 格式:数据信号与 WS 信号相比有一个位的位移。无论一帧中包含多少个声道,WS 信号的占空比将始终保持为 50%。

TDM Philips Timing Diagram

MSB 格式:与 Philips 格式基本相同,但数据没有位移。

PCM 短帧同步:数据有一个位的位移,同时 WS 信号变为脉冲,每帧持续一个 BCLK 周期。

PCM 长帧同步:数据有一个位的位移,同时 WS 信号将在每一帧持续一个声道的宽度。例如,如果启用了四个声道,那么 WS 的占空比将是 25%,如果启用了五个声道,则为 20%。

详情参阅链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3268166.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[C++实战]日期类的实现

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…

MySQL中不等于筛选时会漏掉null值的问题

一、问题描述 MySQL中使用不等于进行筛选数据时&#xff0c;若筛选值为null&#xff0c;则该条数据不会被选中&#xff0c;如何解决该问题&#xff1f; 表示不等于的方式如下&#xff1a; ! <> not in二、案例验证 1、创建数据表 -- ---------------------------- -…

20240725java的Controller、DAO、DO、Mapper、Service层、反射、AOP注解等内容的学习

在Java开发中&#xff0c;‌controller、‌dao、‌do、‌mapper等概念通常与MVC&#xff08;‌Model-View-Controller&#xff09;‌架构和分层设计相关。‌这些概念各自承担着不同的职责&#xff0c;‌共同协作以构建和运行一个应用程序。‌以下是这些概念的解释&#xff1a;‌…

Nestjs使用Redis的最佳实践

前几天在项目中有用到Redis JWT实现服务端对token的主动删除(退出登录功能)。故此介绍下如何在Nestjs中使用Redis&#xff0c;并做下总结。 知识准备 了解Redis - 网上很多简介。了解Nestjs如何使用jwt生成token - 可移步看下我之前的文章 效果展示 一、mac安装与使用 示…

Typora笔记上传到CSDN

1.Typora 安装 Typora链接&#xff1a;百度网盘 提取码&#xff1a;b6d1 旧版本是不需要破解的 后来的版本比如1.5.9把放在typora的根目录下就可以了 2.上传到CSDN 步骤 csdn 写文章-使用MD编辑器-导入本地md文件即可 问题 图片没法显示 原因 图片的链接是本地的 当然没法…

pyqt designer使用spliter

1、在designer界面需要使用spliter需要父界面不使用布局&#xff0c;减需要分割两个模块选中&#xff0c;再点击spliter分割 2、在分割后&#xff0c;再对父界面进行布局设置 3、对于两边需要不等比列放置的&#xff0c;需要套一层 group box在最外层进行分割

模板编程中二义性问题

前言 菱形继承是 一个常见的二义性问题&#xff0c;这个问题在模板元编程中也很容易隐晦的存在 错误示例代码 #include <iostream>template <int N> struct A {int getN() { return N; } };template <int N> struct B : A<N % 2>, B<N / 2> {…

创建文件到底发生了什么?

为什么要浅浅探究这个问题&#xff1f; 大家大部分时间的工作其实都是写业务层的”CURD“&#xff0c;而真正陪伴在我们身边的计算机底层原理则不再有那么多好奇心去探究了。这篇文章旨在抛砖引玉&#xff0c;也许大家在空闲的时间里&#xff0c;也能够去探求自己以前一直想知…

AcWing最长连续不重复子序列

哈希表就完事儿了&#xff0c;key是a[j],value是a[j]出现次数 i丢到前面&#xff0c;j丢到后面&#xff0c;然后j往后面遍历&#xff0c;每次记录a[j]出现次数 m a p [ a [ j ] ] map[a[j]] map[a[j]]&#xff0c;如果a[j]出现次数2次及其以上 m a p [ a [ j ] ] > 1 map[a[…

信号量的实例

例题&#xff1a; 进程 a 和进程 b 模拟访问打印机&#xff0c;进程 a 输出第一个字符‘ a’表示开始使用打印 机&#xff0c;输出第二个字符‘ a’表示结束使用&#xff0c; b 进程操作与 a 进程相同。&#xff08;由于打印机同一时刻 只能被一个进程使用&#xff0c;所以输出…

【数据结构--排序】

目录 一、排序概述1.1、排序的相关定义1.2、排序用到的结构与函数 二、常见排序算法2.1、冒泡算法&#xff08;交换顺序&#xff09;&#xff08;1&#xff09;算法&#xff08;2&#xff09;性能分析 2.2、简单选择排序&#xff08;1&#xff09;算法&#xff08;2&#xff09…

yolov5-7环境搭建训练自己的模型

1.下载代码 git clone https://github.com/ultralytics/yolov5 # clone可以切到5-7版本&#xff0c;也可以去github选标签下载 2.配置好conda环境&#xff0c;网上教程比较多&#xff0c;不做讲解&#xff0c;python3.8即可。 3.在环境里安装pyrtorch 按自己的需求选取&am…

C#初级——条件判断语句、循环语句和运算符

条件判断语句 简单的条件判断语句&#xff0c;if()里面进行条件判断&#xff0c;如果条件判断正确就执行语句块1&#xff0c;如果不符合就执行语句块2。 if (条件判断) { 语句块1 } else { 语句块2 } int age 18;if (age < 18){Console.WriteLine("未…

『 Linux 』信号的捕捉及部分子问题

文章目录 信号的捕捉sigaction函数未决信号集的置零时机信号处理过程的阻塞可重入函数volatile 关键字SIGCHLD 信号 信号的捕捉 该图为基于信号处理为用户自定义动作的图解; 信号的捕捉 当一个信号被递达时,如果该信号的处理动作是用户自定义的函数(如int sighandler(int))时就…

钉钉 钉钉打卡 钉钉定位 2024 免费试用 保用

打卡助手定位 如图&#xff0c;表示开启成功&#xff0c;软件已定位到钉钉打卡位置。 测试显示&#xff0c;高德地图位置已成功修改。 开启助手定位后&#xff0c;观察效果&#xff0c;打卡按钮由无法打卡变为可打卡状态&#xff0c;照片还显示打卡地点。 伙伴们担心作弊行为会…

Prometheus Pushgateway 协议上报观测云最佳实践

Pushgateway 介绍 Pushgateway 是 Prometheus 生态系统中的一个组件&#xff0c;主要用于解决 Prometheus 默认的 pull&#xff08;拉取&#xff09;模式在某些情况下无法获取数据的问题&#xff0c;如监控源位于防火墙之后&#xff0c;Prometheus 无法穿透防火墙&#xff0c;…

嵌入式C++、Raspberry Pi、LoRa和Wi-Fi技术、TensorFlow、ROS/ROS2:农业巡检数据导航机器人设计流程(代码示例)

随着科技的不断进步&#xff0c;农业领域也在逐渐向智能化发展。农业巡检机器人作为农业智能化的重要组成部分&#xff0c;能够自动化地监测农作物生长状况&#xff0c;提高农业管理的效率和精确度。本文将介绍一个基于Raspberry Pi和NVIDIA Jetson的农业巡检机器人&#xff0c…

3U/6U CPCI 系统核心模块,可应用于电力、轨道交通等领域

一、3U CPCI核心模块 提供CPCI系列产品&#xff0c;具有&#xff0c;高性能&#xff0c;应用扩展灵活&#xff0c;X86软件兼容&#xff0c;无风扇设计&#xff0c;宽工作温度范围&#xff0c;长嵌入式生命周期等特点&#xff0c;满足不同客户的需求。 产品特点 Intel Pentium …

微信Android一面凉经(2024)

微信Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《微信Android一面凉经(2024)》。 面试职位: 微信-客户端开发工程师-基础功能(广州) And…

力扣高频SQL 50 题(基础版)第四题

文章目录 力扣高频SQL 50 题&#xff08;基础版&#xff09;第四题584.寻找用户推荐人题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50 题&#xff08;基础版&#xff09;第四题 584.寻找用户推荐人 题目说明 表: Customer -------------------- | Colu…