[RK3308H_Linux] 关于8+2(8路模拟麦克风 + 2路es7243e回采)的调试心得

问题描述

RK3308H 使用8路个模拟麦克风录音,2路用es7243e做回采


解决方案:

首先先调8路模拟麦克风,根据原理图确定使用的是哪路I2S。
以下为dts配置,acodec的属性注释附上。

&acodec {status = "okay";rockchip,micbias1;rockchip,micbias2;// 该属性表明在系统休眠的时候 CODEC 不进入低功耗模式,以适应更快速的响应需求,// 适合对功耗不是很在意的场景。rockchip,no-deep-low-power;// 该属性可以让指定的 ADC group 打开一次之后就常开,主要应用于与 VAD 配合的场// 景,即在休眠的时候不关闭与 VAD 相关的 ADC,达到快速响应的功能。rockchip,en-always-grps = <0 1 2 3>;// 0 MIC1,MIC2// 1 MIC3,MIC4// 2 MIC5,MIC6// 3 MIC7,MIC8rockchip,adc-grps-route = <0 1 2 3>;// CODEC 就不会去使能 hp-det 的功能。如果目标板硬件上没有用 CODEC// 的耳机检测功能,CODEC hp-det pin 悬空,该属性强烈建议加上,否则会引起耳机插入// 误报的现象。rockchip,no-hp-det;// 选用的 PA 的启动时延不同。该属性指定了打开回采后,需要----// 等待的稳定时延才重新打开对应的 ADC,避免回采数据抖动。// rockchip,delay-loopback-handle-ms= <200>;rockchip,delay-start-play-ms = <200>;// 指定的是模拟 PA 对应的连接的 ADC group,通过这个属性,codec driver// 会在合适的时间打开回采,以节省功耗。// rockchip,loopback-grp = <1>;// 指定了控制喇叭通路的 gpio pin。在喇叭通路使能下,播放/关闭音乐的时候// #spk-ctl-gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
};acodec_sound: acodec-sound {compatible = "rockchip,multicodecs-card";rockchip,card-name = "rockchip,rk3308-acodec";rockchip,codec-hp-det;rockchip,mclk-fs = <256>;rockchip,cpu = <&i2s_8ch_2>;rockchip,codec = <&acodec>;status = "okay";
};&i2s_8ch_2 {status = "okay";
};

按照以上配置,使用cat /proc/asound/cards查看声卡是否注册成功,如果没有注册成功,使用dmesg | grep acodec进一步查询未注册成功的原因。
在这里插入图片描述
可以看到我这里是已经注册成功了。然后使用arecord -D hw:0,0 -c 8 -r 16000 -f S16_LE /oem/output.wav命令进行录音。将生成的wav文件通过adb pull出来。使用Audacity音频软件查看。
在这里插入图片描述
可以看到8个声道都能正常录制到声音。

调试过程中遇到问题有:
a.麦克风全是电流声音
b.1/3/5/7路麦克风无声音
c.8/路麦克风声音小
a问题需要让硬件检查麦克风小板的电路电阻
b/c问题是因为我们麦克风小板是手帖非机贴,贴坏了。更换之后就能正常录制到8路声音了

然后需要调试2路走es7243e_sound的回采通路,这里我按照其他dts相关配置配置es7243e_sound,

es7243_sound: es7243-sound {status = "okay";compatible = "simple-audio-card";simple-audio-card,name = "rockchip,es7243e";simple-audio-card,format = "i2s";simple-audio-card,mclk-fs = <256>;simple-audio-card,cpu {sound-dai = <&i2s_2ch_0>;};simple-audio-card,codec {sound-dai = <&es7243>;};
};&i2s_2ch_0{status = "okay";
};&i2c2 {status = "okay";es7243e: es7243e@10 {status = "okay";#sound-dai-cells = <0>;compatible = "ES7243E_MicArray_0";reg = <0x10>;};es7243e_11: es7243e@11 {status = "okay";#sound-dai-cells = <0>;compatible = "ES7243E_MicArray_1";reg = <0x11>;};es7243e_12: es7243e@12 {status = "okay";#sound-dai-cells = <0>;compatible = "ES7243E_MicArray_2";reg = <0x12>;};
};

使用 cat /proc/asound/cards发现声卡已经挂上
在这里插入图片描述
但是I2C2地址全是XX
在这里插入图片描述
这明显不对,从I2C错误码看,并没有识别到正常工作的设备或者从机地址。
然后经过曲折的示波器/逻辑分析仪排查,发现XX贴的是已经停产的es7243而非es7243e。这就很尴尬。然后等新的es7243e样品到了更换之后,I2C通信就正常了。
在这里插入图片描述
I2C通信就正常后,发现rockchip_es7243e声卡可以挂上,但是es7243e驱动在es7243e_read和es7243e_write时还是会报错误
在这里插入图片描述
这是需要找es7243e芯片顺芯FAE那边要5.10版本的7243驱动。按照提供的文档配置dts和es7243l.h。驱动一直打印找不到MCLK
在这里插入图片描述
这是在es7243l_probe里加上这个:
es7243l->sysclk = 12288000;
然后在这里加上system-clock-frequency这个属性,然后录音需要使用48k采样率。

    simple-audio-card,cpu {sound-dai = <&i2s3_2ch>;system-clock-frequency = <12288000>; };simple-audio-card,codec {sound-dai = <&dummy_codec>;system-clock-frequency = <12288000>;};

驱动不提示MCL错误了。使用arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE /oem/es7243.wav命令录制出来的音频无声音。然后各种排查,各种示波器量波形,发现录音时 I2S0压根没任何波形。

最后经过排查原来用的i2s_8ch_0而非i2s_2ch_0,一直以为2路用的是2ch,原来只是使用了8ch里面的2路而已,这里调试这个浪费了很多时间,也希望大家引以为戒,先根据原理图确定到底用的是哪个I2S0
最后附上可以成功使用的dts配置

    es7243e_sound: es7243e-sound {status = "okay";compatible = "rockchip,multicodecs-card";rockchip,card-name = "rockchip,es7243e";rockchip,mclk-fs = <256>;rockchip,format = "i2s";rockchip,cpu = <&i2s_8ch_0>;rockchip,codec = <&es7243l>;};// es7243_sound: es7243-sound {// 	status = "okay";// 	compatible = "simple-audio-card";// 	simple-audio-card,name = "rockchip,es7243e";// 	simple-audio-card,format = "i2s";// 	simple-audio-card,mclk-fs = <256>;// 	simple-audio-card,cpu {// 		sound-dai = <&i2s_8ch_0>;// 	};// 	simple-audio-card,codec {// 		sound-dai = <&es7243l>;// 	};// };&i2s_8ch_0 {status = "okay";#sound-dai-cells = <0>;assigned-clocks = <&cru SCLK_I2S0_8CH_RX>;assigned-clock-parents = <&cru SCLK_I2S0_8CH_TX_MUX>;rockchip,clk-trcm = <1>;pinctrl-names = "default";pinctrl-0 = <&i2s_8ch_0_sclktx&i2s_8ch_0_lrcktx&i2s_8ch_0_sdi0&i2s_8ch_0_sdo0>;
};&i2c2 {status = "okay";es7243l: es7243l@10 {status = "okay";#sound-dai-cells = <0>;compatible = "MicArray_0";reg = <0x10>;clocks = <&cru SCLK_I2S0_8CH_TX_OUT>;clock-names = "mclk";pinctrl-names = "default";pinctrl-0 = <&i2s_8ch_0_mclk>;};
};

其中simple-audio-card和multicodecs-card2个配置都是可以正常录音的。
用TDM格式,单line传输多通道数据的话,就用simple-audio-card
用I2S格式,多line同时使用,并且每条line传输2ch的话,就用multicodecs-card

最后es7243e驱动部分需要注意es7243l.h

#define ES7243l_CHANNELS_MAX    AIN_2_CH
#define VDDA_VOLTAGE	VDDA_3V3

ES7243l_CHANNELS_MAX属性需要根据自己的声道选择,不让会跑飞。
es7243e需要将VDDA_VOLTAGE 改为VDDA_3V3。

es7243l.c驱动部分需要修改

es7243l->sysclk = 12288000;

在es7243l_probe中添加以上属性


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springBoot(若依)集成camunda

1、下图为项目结构 2、最外层 pom引入依赖 <properties><!--camunda 标明版本&#xff0c;注意要个自己的Spring 版本匹配&#xff0c;匹配关系自行查询官网--><camunda.version>7.18.0</camunda.version> </properties> 3、common模块引入依赖 …

retrofit实现原理

Retrofit 是一个用于 Java 和 Kotlin 的类型安全的 HTTP 客户端&#xff0c;它将 RESTful API 的抽象转换为 Java 接口&#xff0c;使得网络请求变得更加简洁和可读。Retrofit 的实现主要依赖于注解处理器和动态代理机制。下面结合源码分析 Retrofit 的实现原理&#xff1a; R…

靖江美食元宇宙

汉堡是一种流行于世界各地的快餐食品&#xff0c;它的主要成分通常包括一个或多个肉饼&#xff08;最常见的是牛肉饼&#xff09;&#xff0c;放在圆形的面包中间&#xff0c;周围可以添加各种配料和调味品&#xff0c;如生菜、番茄、洋葱、酸黄瓜、奶酪以及各种酱汁&#xff0…

Python 开发植物大战僵尸杂交版辅助【全网最详细_查找 + 代码编写一体化零基础也能学会】

目录 辅助最终展示效果 一、文章介绍 二、工具介绍 三、基址搜索 3.1、寻找阳光基址 3.2、寻找卡槽冷却基址 3.3、寻找僵尸刷新时间基址 3.4、寻找大阳光刷新时间基址 3.5、寻找植物编号基址 3.6、寻找场上僵尸数量基址 3.7、寻找僵尸 X 坐标基址 3.8、通过找到的僵…

编制,傻傻分不清?

目录 01.什么是聘用合同? 02.事业单位如何取得编制 03.如何快速判断岗位否有编制? 1.看公告直接告知 2.看是否有权威依据 3.看合同期限与试用期期限 4.看岗位表 5.咨询招考单位 04.事业单位改革备案制编制(员额制) 05.事业编制 与备案制(员额制)的区别? 1.二…

初学者必看的 3 个 Python 小项目

我们都知道&#xff0c;将知识点融入实际操作是提高编程学习效率的关键。尤其对于初学者来说&#xff0c;通过学习一些涉及核心编程概念的简单项目&#xff0c;不仅可以深化对编程语言的理解&#xff0c;还能快速提高解决问题的能力。 下面将探讨三个基础的 Python 项目&#…

Bilibili Android一二面凉经(2024)

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

《昇思25天学习打卡营第1天|QuickStart》

说在前面 曾经接触过华为的910B服务级显卡&#xff0c;当时基于910B做了一些开发的工作&#xff0c;但是总感觉做的事情太低层&#xff0c;想要能自顶向下的了解下&#xff0c;因此开始了MindSpore的学习。另外也想给予提供的显卡&#xff0c;简单尝试下llm模型的训练&#xf…

GCN、GIN

# 使用TuDataset 中的PROTEINS数据集。 # 里边有1113个蛋白质图&#xff0c;区分是否为酶&#xff0c;即二分类问题。# 导包 from torch_geometric.datasets import TUDataset from torch_geometric.data import DataLoader import torch import torch.nn as nn import torch.…

Linux rpm和ssh损坏修复

背景介绍 我遇到的问题可能和你的不一样。但是如果遇到错误一样也可以按此方案尝试修复。 我是想在Linux上安装Oracle&#xff0c;因为必须在离线环境下安装。就在网上搜一篇文章linux离线安装oracle&#xff0c;然后安装教程走&#xff0c;进行到安装oracle依赖包的时候执行了…

数据库mysql-对数据库和表的DDL命令

文章目录 一、什么是DDL操作二、数据库编码集和数据库校验集三、使用步骤对数据库的增删查改1.创建数据库2.进入数据库3.显示数据库4.修改数据库mysqldump 5.删除数据库 对表的增删查改1.添加/创建表2.插入表内容3.查看表查看所有表查看表结构查看表内容 4.修改表修改表的名字修…

SpringBootWeb 篇-入门了解 Swagger 的具体使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Swagger 介绍 1.1 Swagger 和 Yapi 的使用场景 2.0 Swagger 的使用方式 2.1 导入 knife4j 的 maven 坐标 2.2 在配置类中加入 knife4j 相关配置 2.3 设置静态资源…

oracle控制文件详解以及新增控制文件

文章目录 oracle控制文件1、 控制文件包含的主要信息如下&#xff1a;2、查看目前系统的控制文件信息&#xff0c;主要是查看相关的字典视图 oracle新增控制文件 oracle控制文件 控制文件是一个很小的二进制文件(10MB左右)&#xff0c;含有数据库结构信息&#xff0c;包括数据…

Open3D 点云Kmeans聚类算法

目录 一、概述 1.1算法介绍 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2聚类后点云 前期试读&#xff0c;后续会将博客加入该专栏&#xff0c;欢迎订阅Open3D与点云深度学习的应用_白葵新的博客-CSDN博客 一、概述 1.1算法介绍 聚类是一种将数据集分组的方…

人工智能时代的转型与挑战:从就业替代到技术创新的新纪元

人工智能时代的转型与挑战&#xff1a;从就业替代到技术创新的新纪元 摘要 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;我们正步入一个前所未有的变革时代。本文旨在探讨当前人工智能领域的三大关键趋势——AI对工作岗位的潜在取代、ChatBot技术的厌倦…

redis的发布与订阅

与消息队列的差别 不做持久化 不是异步 不能保证可靠性 使用实例 发布者示例&#xff1a;连接到 Redis 服务器&#xff0c;使用 publish 方法发布消息到指定的频道。 订阅者示例&#xff1a;连接到 Redis 服务器&#xff0c;使用 subscribe 方法订阅指定的频道&#xff0c;并…

Next.js的静态生成和服务端渲染,你搞懂了吗?

Next.js的静态生成和服务端渲染&#xff0c;你搞懂了吗&#xff1f; 嘿&#xff0c;各位前端小伙伴们&#xff01;今天咱们来聊聊Next.js中那令人又爱又恨的静态生成&#xff08;Static Generation&#xff09;和服务端渲染&#xff08;Server-side Rendering&#xff09;。这…

软设之中介者模式

设计模式中&#xff0c;中介者模式的意图是:用一个中介对象来封装一系列的对象间的交互。它使各个对象不需要显式互相调用&#xff0c;从而达到低耦合&#xff0c;还可以独立改变对象间的交互。 比方&#xff0c;飞机与塔台之间&#xff0c;如果没有塔台&#xff0c;飞机就得需…

双语|如何给教授/教职员发送电子邮件

斯坦福大学提出建议&#xff0c;指导学生如何给教授或者教职员发送电子邮件&#xff0c;这些建议对于访问学者、博士后及联合培养博士也很适用&#xff0c;故知识人网小编用双语对照的形式进行节选转发。 Whether youre writing a professor to ask for an extension or to loo…

笔记:在Entity Framework Core中使用乐观并发控制来处理数据更新的冲突

一、目的&#xff1a; 在Entity Framework Core (EF Core) 中配置乐观并发控制主要涉及到使用并发令牌。并发令牌是在模型中定义的属性&#xff0c;用于在数据库操作期间检测并发冲突。当两个或更多用户尝试同时更新同一条记录时&#xff0c;EF Core 会使用这些令牌来确定是否有…