[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,MIC8
	rockchip,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中添加以上属性


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

个人怎么交易现货黄金:加速形态

我们作为普通个人&#xff0c;在现货黄金市场中交易就需要掌握相应的现货黄金投资技巧。下面我们就来介绍一个&#xff0c;个人怎么交易现货黄金的形态——加速形态。 加速形态是用于判断市场趋势力竭的情况&#xff0c;这种趋势可以是上升&#xff0c;也可以是下跌。但是要注意…

【后端开发实习】用Nodejs操作mongodb结合Mongoose实现数据库操作

用Nodejs操作mongodb结合Schema实现数据库操作 Mongoose创建Schema定义Schema对象并映射到数据库Model的使用创建文档内容删除文档内容修改文档内容查询文档内容 Document的使用创建并保存将文档对象转换为JSON对象 模块化数据库连接模型初始化 项目部署路由定义后端操作定义启…

探索大模型:袋鼠云在 Text To SQL 上的实践与优化

Text To SQL 指的是将自然语言转化为能够在关系型数据库中执行的结构化查询语言&#xff08;简称 SQL&#xff09;。近年来&#xff0c;伴随人工智能大模型技术的不断进步&#xff0c;Text To SQL 任务的成功率显著提升&#xff0c;这得益于大模型的推理、理解以及指令遵循等能…

智能未来已来:纷享AI携手企业共赴AI+CRM新征途

大模型的风潮席卷各类型应用&#xff0c;“AI CRM”的概念并不算新&#xff0c;但真正好用、能用在业务流程中的AI工具并不多&#xff0c;而客户关系和旅程的复杂性不断变化&#xff0c;业务团队的压力不断增加&#xff0c;买家期望不断增高&#xff0c;这些都在推动CRM的人工智…

在Ubuntu下安装samba实现和Windows系统文件共享

一、安装 apt install -y samba samba-clientSamba is not being run as an AD Domain Controller: Masking samba-ad-dc.service Please ignore the following error about deb-systemd-helper not finding those services. (samba-ad-dc.service masked) Created symlink /et…

确保智慧校园安全,充分利用操作日志功能

智慧校园基础平台系统的操作日志功能是确保整个平台运行透明、安全及可追溯的核心组件。它自动且详尽地记录下系统内的每一次关键操作细节&#xff0c;涵盖操作的具体时间、执行操作的用户账号、涉及的数据对象&#xff08;例如学生信息更新、课程调度变动等&#xff09;、操作…

Facebook的未来蓝图:从元宇宙到虚拟现实的跨越

随着科技的不断演进和社会的数字化转型&#xff0c;虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;作为下一代计算平台正逐渐走进人们的视野。作为全球领先的科技公司之一&#xff0c;Facebook正在积极探索并推动这一领域的发展&#xff0c;以实现其…

跑分器(made in 蒟蒻)(内附代码)

#题外话&#xff1a;这里也能免费获取代码&#xff0c;不用买会员&#xff1a;洛谷剪贴板 #直逼正文&#xff1a; 最近看到这个东西…… 据说它有个跑分功能&#xff0c;想逝逝。 但…… 所以我决定&#xff0c;用自己编一个低端的…… #思路 感觉跑分就是测试中央处理器的…

鸿蒙语言基础类库:【@ohos.worker (启动一个Worker)】

启动一个Worker 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Work…

棋牌室计时收费系统怎么接电源线 佳易王棋牌计时灯控版管理系统教程

前言&#xff1a; 棋牌室计时收费系统怎么接电源线 佳易王棋牌计时灯控版管理系统教程 以下软件操作教程以&#xff0c;佳易王棋牌计时计费管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件操作教程 1、软件在点击计时按钮…

【Linux】常见指令收官权限理解

tar指令 上一篇博客已经介绍了zip/unzip指令&#xff0c;接下来我们来看一下另一个关于压缩和解压的指令&#xff1a;tar指令tar指令&#xff1a;打包/解包&#xff0c;不打开它&#xff0c;直接看内容 关于tar的指令有太多了&#xff1a; tar [-cxtzjvf] 文件与目录 ...…

怎样在 C 语言中进行结构体的内存布局控制?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&…

Doris安装部署

Doris安装部署 1、 MPP概念Doris简要介绍 1、 MPP概念 MPP (Massively Parallel Processing)&#xff0c;即大规模并行处理&#xff0c;在数据库非共享集群中&#xff0c;每个节点都有独立的磁盘存储系统和内存系统&#xff0c;业务数据根据数据库模型和应用特点划分到各个节点…

免费录制视频的软件,推荐3款,总有一款适合你!

在数字化时代&#xff0c;视频录制与分享已成为日常生活和工作中的重要组成部分。无论是录制游戏过程、教程讲解还是网络会议&#xff0c;一款好用的录制视频软件能够帮助我们更便捷地实现这个目标。然而&#xff0c;许多录制视频的软件都是收费的&#xff0c;这对于很多人来说…

定时器TIM配置微妙延时函数

定时器TIM配置微妙延时函数 文章目录 定时器TIM配置微妙延时函数开胃小菜&#xff08;BOOT0、BOOT1&#xff09;Boot0Boot1&#xff08;如果有&#xff09; 三种定时器高级控制定时器&#xff08;TIM1&#xff0c;TIM8&#xff09;通用定时器&#xff08;TIM2, TIM3, TIM4, TIM…

dxf数据结构

DXF&#xff08;Drawing Exchange Format&#xff0c;绘图交换格式&#xff09;是Autodesk公司开发的一种CAD&#xff08;计算机辅助设计&#xff09;文件格式&#xff0c;用于实现AutoCAD与其他软件之间的CAD数据交换。DXF格式文件是一种开放的矢量数据格式&#xff0c;具有多…

怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~

怎么办&#xff1f;我的C盘又爆红了&#xff01;别慌&#xff01;博主手把手带你管理你的C盘空间~ 文章目录 怎么办&#xff1f;我的C盘又爆红了&#xff01;别慌&#xff01;博主手把手带你管理你的C盘空间~0. 在开始清理之前1. 推荐执行的操作1.1 清理系统缓存文件1.2 磁盘清…

爱秀国际英语公信力怎么样?靠谱吗?

同爱秀国际英语公信力怎么样&#xff1f; ①爱秀国际英语成立于09年&#xff0c;已经有15年的教学积累&#xff0c;专门针对大学生研发的英语口语课程。 ②历年来不仅教学效果显著&#xff0c;在社会上也获得过很多荣誉&#xff0c;在历年的教育大会上也荣获过诸多认可&…

maven私有镜像仓库nexus部署使用

maven私有镜像仓库nexus部署使用 1、Nexus部署 #查找镜像 docker search sonatype/nexus3 #拉取镜像 docker pull sonatype/nexus3 #持久化目录 mkdir -p /data/nexus/data chmod 777 -R /data/nexus/data #启动服务 docker run -d --name nexus3 -p 8081:8081 --restart alw…