[Linux Audio Driver] 高通平台MI2S总线配置

【QCA】基于高通平台简述DTS文件参数 DTS部分参数说明 阅读详情
AI摘要

本文详细记录了一位工程师在高通骁龙865平台上配置MI2S接口的过程,从初始的GPIO配置错误,到识别并解决与数字麦克风的冲突,再到最终成功配置QUIN_MI2S总线。通过设备树的修改和tinyalsa命令验证,逐步排查问题,最终实现音频总线的正确配置。过程中涉及到了GPIO配置、音频设备树的修改、冲突处理及波形验证等关键步骤。

0. 背景


hardware platform:骁龙865
android version:android10
Linux kernel version:msm-4.19

思维导图如下:

在这里插入图片描述

1. 遇到的一点坑


由于我没有拿到这个平台的MI2S高通配置文档,所以遇到了一点坑,同步也分享。

在这里插入图片描述
这个平台目前还没有具体codec器件的调试需求,但是我想验证下接口,于是找硬件,告诉我可以配置MI2S1,对应上面几个GPIO,然后我寻思,默认pri_mi2s应该是MI2S0,这个MI2S1不就应该是配置sec_mi2s嘛。
在这里插入图片描述

(我可真是大聪明,逃…)

/vendor/qcom/proprietary/devicetree-4.19/qcom/kona-pinctrl.dtsi

 		sec_mi2s_sck {
 			sec_mi2s_sck_sleep: sec_mi2s_sck_sleep {
 				mux {
-					pins = "gpio142";
+					pins = "gpio152";
 					function = "gpio";
 				};
 
 				config {
-					pins = "gpio142";
+					pins = "gpio152";
 					drive-strength = <2>;   /* 2 mA */
 					bias-pull-down;         /* PULL DOWN */
 					input-enable;
@@ -1871,12 +1871,12 @@
 
 			sec_mi2s_sck_active: sec_mi2s_sck_active {
 				mux {
-					pins = "gpio142";
+					pins = "gpio152";
 					function = "mi2s1_sck";
 				};
 
 				config {
-					pins = "gpio142";
+					pins = "gpio152";
 					drive-strength = <8>;   /* 8 mA */
 					bias-disable;           /* NO PULL */
 				};
@@ -1886,12 +1886,12 @@
 		sec_mi2s_ws {
 			sec_mi2s_ws_sleep: sec_mi2s_ws_sleep {
 				mux {
-					pins = "gpio145";
+					pins = "gpio153";
 					function = "gpio";
 				};
 
 				config {
-					pins = "gpio145";
+					pins = "gpio153";
 					drive-strength = <2>;   /* 2 mA */
 					bias-pull-down;         /* PULL DOWN */
 					input-enable;
@@ -1900,12 +1900,12 @@
 
 			sec_mi2s_ws_active: sec_mi2s_ws_active {
 				mux {
-					pins = "gpio145";
+					pins = "gpio153";
 					function = "mi2s1_ws";
 				};
 
 				config {
-					pins = "gpio145";
+					pins = "gpio153";
 					drive-strength = <8>;   /* 8 mA */
 					bias-disable;           /* NO PULL */
 				};
@@ -1915,12 +1915,12 @@
 		sec_mi2s_sd0 {
 			sec_mi2s_sd0_sleep: sec_mi2s_sd0_sleep {
 				mux {
-					pins = "gpio143";
+					pins = "gpio154";
 					function = "gpio";
 				};
 
 				config {
-					pins = "gpio143";
+					pins = "gpio154";
 					drive-strength = <2>;   /* 2 mA */
 					bias-pull-down;         /* PULL DOWN */
 					input-enable;
@@ -1929,12 +1929,12 @@
 
 			sec_mi2s_sd0_active: sec_mi2s_sd0_active {
 				mux {
-					pins = "gpio143";
+					pins = "gpio154";
 					function = "mi2s1_data0";
 				};
 
 				config {
-					pins = "gpio143";
+					pins = "gpio154";
 					drive-strength = <8>;   /* 8 mA */
 					bias-disable;           /* NO PULL */
 				};
@@ -1944,12 +1944,12 @@
 		sec_mi2s_sd1 {
 			sec_mi2s_sd1_sleep: sec_mi2s_sd1_sleep {
 				mux {
-					pins = "gpio144";
+					pins = "gpio155";
 					function = "gpio";
 				};
 
 				config {
-					pins = "gpio144";
+					pins = "gpio155";
 					drive-strength = <2>;   /* 2 mA */
 					bias-pull-down;         /* PULL DOWN */
 					input-enable;
@@ -1958,12 +1958,12 @@
 
 			sec_mi2s_sd1_active: sec_mi2s_sd1_active {
 				mux {
-					pins = "gpio144";
+					pins = "gpio155";
 					function = "mi2s1_data1";
 				};
 
 				config {
-					pins = "gpio144";
+					pins = "gpio155";
 					drive-strength = <8>;   /* 8 mA */
 					bias-disable;           /* NO PULL */
 				};

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-audio-overlay.dtsi

 	qcom,codec-aux-devs = <&wcd938x_codec>;
+	qcom,sec-mi2s-gpios = <&cdc_sec_mi2s_gpios>;
 	qcom,msm_audio_ssr_devs = <&audio_apr>, <&q6core>, <&lpi_tlmm>,
 				  <&bolero>;
 };
@@ -377,6 +378,17 @@
 		qcom,lpi-gpios;
 		qcom,tlmm-gpio = <147>;
 	};

+	cdc_sec_mi2s_gpios: cdc_sec_mi2s_clk_data_pinctrl {
+		compatible = "qcom,msm-cdc-pinctrl";
+		pinctrl-names = "aud_active", "aud_sleep";
+		pinctrl-0 = <&sec_mi2s_sck_active &sec_mi2s_ws_active &sec_mi2s_sd0_active
+			    &sec_mi2s_sd1_active>;
+		pinctrl-1 = <&sec_mi2s_sck_sleep &sec_mi2s_ws_sleep  &sec_mi2s_sd0_sleep
+			    &sec_mi2s_sd1_sleep>;
+		qcom,lpi-gpios;
+		qcom,tlmm-gpio = <152 153 154 155>;
+	};
 };

然后编译,烧录,adb shell执行tinyalsa命令录音:

tinymix "MultiMedia1 Mixer SEC_MI2S_TX" 1
tinycap /sdcard/rec.wav

发现终端录制不了:

 kona:/ # tinymix "MultiMedia1 Mixer SEC_MI2S_TX" 1
p /sdcard/rec.wavkona:/ # tinycap /sdcard/rec.wav
Unable to open PCM device (cannot set hw params: Invalid argument)
Captured 0 frames

然后串口报错log如下:

[  410.635747] bt_ioctl: BT_CMD_PWR_CTRL pwr_cntrl:1
[  410.641033] bt_vreg_enable: vreg_en successful for : qca,bt-vdd-aon
[  410.647820] bt_vreg_init: regulator_get(qca,bt-vdd-dig) failed. rc=-517
[  410.655571] bluetooth_power: bt_power vdddig config failed
[  410.661381] bt_vreg_disable: vreg_disable successful for : qca,bt-vdd-aon
[  412.117603] msm_dai_q6_mi2s_hw_params: dai_data->channels = 1 channel_mode = 0
[  412.125138] msm-dai-q6-mi2s soc:qcom,msm-dai-mi2s:qcom,msm-dai-q6-mi2s-sec:
 ASoC: can't set Secondary MI2S hw params: -22
[  412.137315]  SEC_MI2S_TX: ASoC: hw_params BE failed -22
[  412.142744]  KONA Media1: ASoC: hw_params BE failed -22
[  412.148442] q6asm_callback: cmd = 0x10bcd returned error = 0x1
[  412.155280] __q6asm_cmd: DSP returned error[ADSP_EFAILED] opcode 68557

这个报错看起来是平台info里面xml backend配置异常,但是我们当前是用tinyalsa命令抓数据,无须考虑那个info的配置,这里我怀疑是硬件搞错了MI2S GPIO(其实是我搞错了=_=)。

在这里插入图片描述

在我的再三请求下,硬件老哥帮我又检查了一遍,说gpio没有问题,我当时感觉自己麻了,没个文档都不知道gpio配的对不对,然后我问他有没有这个平台的PING定义啊,GPIO的那种表格。

在这里插入图片描述
(一番沟通之后,俺拿到了表格)

在这里插入图片描述
在这里插入图片描述

从表格里面拿到了两个重要的信息:这组MI2S是和数字麦克冲突的,gpio152对应LPI GPIO6。

这里说明下,类比已知的高通外部MI2S总线,按顺序依次是:Primary MI2S、Secondary MI2S、Tertiary MI2S、Quaternary MI2S、Quinary MI2S、 Senary MI2S。

其中,和DMIC1以及DMIC2冲突的总线应该是,quin_mi2s。

总之,之前是白捣鼓了,我们可以再看看lpi设备树来佐证想法:当前应该配置quin_mi2s。

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-lpi.dtsi

在这里插入图片描述
如我们所料,这个LPI GPIO6是QUAT总线的下一组MI2S的SCLK,即 QUIN总线的SCLK。

2. 按照上面的思维导图再进行一遍


● 获取到正确信息,明确要配置的MI2S。(已完成,明确是quin总线)

● 对应平台pinctrl dtsi里面添加MI2S相关的GPIO配置。

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-pinctrl.dtsi

+//add for test QUIN MI2S start
+
+               quin_mi2s_sck {
+                       quin_mi2s_sck_sleep: quin_mi2s_sck_sleep {
+                               mux {
+                                       pins = "gpio152";
+                                       function = "gpio";
+                               };
+
+                               config {
+                                       pins = "gpio152";
+                                       drive-strength = <2>;   /* 2 mA */
+                                       bias-pull-down;         /* PULL DOWN */
+                                       input-enable;
+                               };
+                       };
+
+                       quin_mi2s_sck_active: quin_mi2s_sck_active {
+                               mux {
+                                       pins = "gpio152";
+                                       function = "mi2s4_sck";
+                               };
+
+                               config {
+                                       pins = "gpio152";
+                                       drive-strength = <8>;   /* 8 mA */
+                                       bias-disable;           /* NO PULL */
+                               };
+                       };
+               };
+
+               quin_mi2s_ws {
+                       quin_mi2s_ws_sleep: quin_mi2s_ws_sleep {
+                               mux {
+                                       pins = "gpio153";
+                                       function = "gpio";
+                               };
+
+                               config {
+                                       pins = "gpio153";
+                                       drive-strength = <2>;   /* 2 mA */
+                                       bias-pull-down;         /* PULL DOWN */
+                                       input-enable;
+                               };
+                       };
+
+                       quin_mi2s_ws_active: quin_mi2s_ws_active {
+                               mux {
+                                       pins = "gpio153";
+                                       function = "mi2s4_ws";
+                               };
+
+                               config {
+                                       pins = "gpio153";
+                                       drive-strength = <8>;   /* 8 mA */
+                                       bias-disable;           /* NO PULL */
+                               };
+                       };
+               };
+
+               quin_mi2s_sd0 {
+                       quin_mi2s_sd0_sleep: quin_mi2s_sd0_sleep {
+                               mux {
+                                       pins = "gpio154";
+                                       function = "gpio";
+                               };
+
+                               config {
+                                       pins = "gpio154";
+                                       drive-strength = <2>;   /* 2 mA */
+                                       bias-pull-down;         /* PULL DOWN */
+                                       input-enable;
+                               };
+                       };
+
+                       quin_mi2s_sd0_active: quin_mi2s_sd0_active {
+                               mux {
+                                       pins = "gpio154";
+                                       function = "mi2s4_data0";
+                               };
+
+                               config {
+                                       pins = "gpio154";
+                                       drive-strength = <8>;   /* 8 mA */
+                                       bias-disable;           /* NO PULL */
+                               };
+                       };
+               };
+
+               quin_mi2s_sd1 {
+                       quin_mi2s_sd1_sleep: quin_mi2s_sd1_sleep {
+                               mux {
+                                       pins = "gpio155";
+                                       function = "gpio";
+                               };
+
+                               config {
+                                       pins = "gpio155";
+                                       drive-strength = <2>;   /* 2 mA */
+                                       bias-pull-down;         /* PULL DOWN */
+                                       input-enable;
+                               };
+                       };
+
+                       quin_mi2s_sd1_active: quin_mi2s_sd1_active {
+                               mux {
+                                       pins = "gpio155";
+                                       function = "mi2s4_data1";
+                               };
+
+                               config {
+                                       pins = "gpio155";
+                                       drive-strength = <8>;   /* 8 mA */
+                                       bias-disable;           /* NO PULL */
+                               };
+                       };
+               };
+
+//add for test QUIN MI2S end

● 对应平台主要的audio dtsi 里面添加调用MI2S。

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-audio-overlay.dtsi

+	qcom,codec-max-aux-devs = <0>;
+	qcom,quin-mi2s-gpios = <&cdc_quin_mi2s_gpios>;
 	qcom,codec-aux-devs = <&wcd938x_codec>;
 	qcom,msm_audio_ssr_devs = <&audio_apr>, <&q6core>, <&lpi_tlmm>,
 				  <&bolero>;
 };
 
 &q6core {
+
+
+	cdc_quin_mi2s_gpios: cdc_quin_mi2s_clk_data_pinctrl {
+		compatible = "qcom,msm-cdc-pinctrl";
+		pinctrl-names = "aud_active", "aud_sleep";
+		pinctrl-0 = <&quin_mi2s_sck_active &quin_mi2s_ws_active &quin_mi2s_sd0_active
+			    &quin_mi2s_sd1_active>;
+		pinctrl-1 = <&quin_mi2s_sck_sleep &quin_mi2s_ws_sleep  &quin_mi2s_sd0_sleep
+			    &quin_mi2s_sd1_sleep>;
+		qcom,lpi-gpios;
+		qcom,tlmm-gpio = <152 153 154 155>;
+	};

● 关闭设备树里面可能引起冲突的dtsi配置,正确启用MI2S总线,而不是其他总线,比如TDM总线。

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-audio-overlay.dtsi

 	cdc_dmic01_gpios: cdc_dmic01_pinctrl {
+		status = "disabled";
 		compatible = "qcom,msm-cdc-pinctrl";
 		pinctrl-names = "aud_active", "aud_sleep";
 		pinctrl-0 = <&cdc_dmic01_clk_active &cdc_dmic01_data_active>;
@@ -333,6 +349,7 @@
 	};
 
 	cdc_dmic23_gpios: cdc_dmic23_pinctrl {
+		status = "disabled";
 		compatible = "qcom,msm-cdc-pinctrl";
 		pinctrl-names = "aud_active", "aud_sleep";
 		pinctrl-0 = <&cdc_dmic23_clk_active &cdc_dmic23_data_active>;
@@ -341,6 +358,7 @@
 	};

 	cdc_dmic45_gpios: cdc_dmic45_pinctrl {
+		status = "disabled";
 		compatible = "qcom,msm-cdc-pinctrl";
 		pinctrl-names = "aud_active", "aud_sleep";
 		pinctrl-0 = <&cdc_dmic45_clk_active &cdc_dmic45_data_active>;
@@ -350,6 +368,7 @@
 	};

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-audio.dtsi

 		qcom,mi2s-audio-intf = <1>;
-		qcom,auxpcm-audio-intf = <1>;
-		qcom,tdm-audio-intf = <1>;
+		qcom,auxpcm-audio-intf = <0>;
+		qcom,tdm-audio-intf = <0>;

● tinyalsa命令起进程,抓波形。

编译烧录之后,adb root,adb shell,执行以下命令录音:

tinymix "MultiMedia1 Mixer QUIN_MI2S_TX" 1
tinycap /sdcard/rec.wav

在这里插入图片描述
波形一动不动=_=。

在这里插入图片描述

3. 终章


因为配置个总线就这几个步骤,没啥说的,到这步心里一点不慌(逃…),估计是哪里犯了个小错误。经过排查,发现是
gpio的引用方式不对,原因是检索dmic的配置:

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-audio-overlay.dtsi

cdc_dmic01_gpios: cdc_dmic01_pinctrl {
	status = "disabled";
	compatible = "qcom,msm-cdc-pinctrl";
	pinctrl-names = "aud_active", "aud_sleep";
	pinctrl-0 = <&cdc_dmic01_clk_active &cdc_dmic01_data_active>;
	pinctrl-1 = <&cdc_dmic01_clk_sleep &cdc_dmic01_data_sleep>;
	qcom,lpi-gpios;
};

grep -nrR “cdc_dmic01_clk_active” ./vendor/qcom/proprietary/devicetree-4.19/qcom/

在这里插入图片描述

发现dmic直接引用的平台lpi设备树的节点:kona-lpi.dtsi,那么依次类推,我们准备也直接引用lpi的节点即可。

补充以下修改:

./vendor/qcom/proprietary/devicetree-4.19/qcom/kona-audio-overlay.dtsi

+	//cdc_quin_mi2s_gpios: cdc_quin_mi2s_clk_data_pinctrl {
+	//	compatible = "qcom,msm-cdc-pinctrl";
+	//	pinctrl-names = "aud_active", "aud_sleep";
+	//	pinctrl-0 = <&quin_mi2s_sck_active &quin_mi2s_ws_active &quin_mi2s_sd0_active
+	//		    &quin_mi2s_sd1_active>;
+	//	pinctrl-1 = <&quin_mi2s_sck_sleep &quin_mi2s_ws_sleep  &quin_mi2s_sd0_sleep
+	//		    &quin_mi2s_sd1_sleep>;
+	//	qcom,lpi-gpios;
+	//	qcom,tlmm-gpio = <152 153 154 155>;
+	//};
+
+	cdc_quin_mi2s_gpios: cdc_quin_mi2s_clk_data_pinctrl {
+		compatible = "qcom,msm-cdc-pinctrl";
+		pinctrl-names = "aud_active", "aud_sleep";
+		pinctrl-0 = <&lpi_i2s1_sck_active &lpi_i2s1_ws_active &lpi_i2s1_sd0_active
+			    &lpi_i2s1_sd1_active>;
+		pinctrl-1 = <&lpi_i2s1_sck_sleep &lpi_i2s1_ws_sleep  &lpi_i2s1_sd0_sleep
+			    &lpi_i2s1_sd1_sleep>;
+		qcom,lpi-gpios;
+		//qcom,tlmm-gpio = <152 153 154 155>;
+	};

在这里插入图片描述

在这里插入图片描述
(小细节,SCLK为1.536MHz,那么周期应该为1us左右可以抓到 稳定波形)

这两个图片表明正确获取到了SCLK以及WS的波形,WS是48KHz,由于我没有在machine driver修改sclk,此时sclk应该为默认值1.536MHz :
在这里插入图片描述

总线至此配置OK,本文到此结束,篇幅过长,感谢阅读!

Qwen3-ASR音乐语音识别工作流:多语言高鲁棒性离线推理实战 语音识别(ASR)是将音频信号转化为文本的基础技术,其核心原理在于声学模型与语言模型的联合建模;在音乐场景下,传统ASR因伴奏干扰、语种混杂、低信噪比等挑战而失效,亟需面向高动态范围人声与多语言切换的专用解决方案。Qwen3-ASR通过Conformer音频编码器、Prompt驱动的音频-语言联合理解,以及vLLM优化的离线推理引擎,显著提升对抖音翻唱、B站鬼畜、海外播客等复杂音频的转录鲁棒性。本文聚焦Qwen3-ASR在真实音乐环境中的本地化部署,涵盖Spleeter人声分离、双路VAD精筛、多语言Pro 阅读详情

相关推荐

Android Qcom Audio入门学习

在devictree中可以发现有其实在PIL驱动并没有发生image加载过程,真正的加载有对应的子模块处理中,adsp就是在adsp-loader.c中通过init.qcom.rc启动时 write /sys/kernel/boot_adsp/boot 1 ,之后就会subsystem_get(“adsp”)获取并加载;其他例如slpi, 要看高通不同的平台子模块的组成,有些PIL是没有load slpi模块,sensor也是adsp中,

Android驱动开发 8623

【高通】audio bring up

一、确认硬件配置 reset、irq中断配置 I2S、I2C通信总线 二、codec调试 三、smartPA调试

weixin_42258461的博客 5137

Android audio 输出设备选择过程分析(下)

上篇的分析到audio_route,现在接个力,也算是7月的作业,再不交这个月就落下了。 audio_route_apply_and_update_path分两个过程,从函数名字都能看出来,一个是apply,一个是updata: audio_route_apply_path /* Apply an audio route path by name */ int audio_route_ap...

bberdong的专栏 1万+

高通sdm660 uart dts配置

高通sdm660平台配置uart dts配置如下 sdm660-mtp.dtsi中使能对应的uart &uartblsp2dm1 { status = “ok”; pinctrl-names = “default”; pinctrl-0 = <&psam_console_active>; }; sdm660-pinctrl.dtsi中配置对应的gpio,这边gpio使用...

weixin_32104133的博客 1885

高通开发系列 - 内核升级后音频驱动的开发和调试

高通开发系列 - 内核升级后音频驱动的开发和调试

fulinux的博客 1442

高通WLAN框架学习(11)-- 低功耗接口和Wi-Fi定位系统

本章主要介绍以下主题: ■软件架构 ■调试方法 12.1软件架构 低功耗接口及Wi-Fi定位系统软件架构如下图所示: ■LOWI:低功率Wi-Fi (WLAN)接口。 ■LPI:低功耗接口。 ■将扫描服务卸载到WLAN固件。 ■LOWI_LP (ADSP中的LOWI)直接通过QMI接口到WLAN固件,不唤醒应用程序 ■WLS提供WMI/QMI翻译 ■Wi-Fi定位系统(WLS)运行三个线程: a. wls_wlansvc_WLAN:提供WLAN服务的QMI服务器 b. wls

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 2207

linux修改dts更新到内核,kernel4.4.55内核的音频es8323驱动调试及dts配置

diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi b/arch/arm/boot/dts/rk3288-firefly.dtsiindex 1650f98455e2..9888f0816265 100644--- a/arch/arm/boot/dts/rk3288-firefly.dtsi+++ b/arch/arm/boot/dts/rk32...

weixin_36028342的博客 842

AXI Memory Mapped To PCI Express IP 核设计实例

本文详细描述了AXI Memory Mapped To PCI Express(2.9) IP核的应用实例

u011565038的博客 2800

Linux 4.19内核下高通MI2S与TDM总线配置对比:3个关键差异点解析

本文深入解析了Linux 4.19内核下高通平台MI2S与TDM总线在硬件架构、时钟管理和设备树配置上的3个关键差异点。通过对比物理层特性、时钟域管理和驱动实现,帮助开发者根据外设需求选择合适总线类型,并提供kona平台(骁龙865)的实战配置示例与性能优化建议。

weixin_33888907的博客 378

Tailscale 自建 DERP 中继服务器

Tailscale自建DERP中继服务器

Accompagner的博客 4330

手把手教你用STM32单片机DIY一个简易PLC(附完整电路图与PCB文件)

本文详细介绍了如何利用STM32单片机DIY一个简易PLC控制器,涵盖硬件设计、电路图解析、PCB布局优化及固件框架实现。通过完整的电路图和PCB文件,帮助读者从元器件选型到工业级优化,逐步构建可靠的PLC系统,特别适合工业自动化爱好者和学习者实践。

weixin_42527160的博客 571

[Linux Audio Driver] 高通音频相关汇总(持续更新)

0. 背景 之前写了一些音频的博客,但是比较散乱,就想着汇总下写的博客,也是对自己知识结构的梳理,这个会持续更新。 1. 代码分析&总结 I2S相关介绍 ACDB文件加载流程(一) ACDB文件加载流程(二) ACDB文件加载流程(完结篇) 高通平台内部MIC_BIAS简介 从设备地址理解 Android7 外部PA Speaker代码结构 MSM8953音频部分设备树调用关系 开启音频kernel内核debug功能 声卡与XML匹配流程 SDM660平台内部CODEC tinyalsa命令总结 S

编程菜汝狗 4962

电子产品的老化测试有哪些类型?

因此,越来越多的人在寻找“已知合格的测试连接器”,即经过测试具有可靠性和有效性的测试连接器,可以在老化测试中制定优化方法。例如对于芯片来说,不同的封装有不同的老化测试座,QFP老化测试座,QFN老化测试座等。老化测试时,专用老化电路板上的元件将承受等于或高于其额定工作条件的压力,以消除任何在额定寿命之前过早失效的元件。静态老化:在此类系统中,将测试设备安装到老化板上的插座中,然后放入老化箱中,其中每隔12至24小时施加电源和高温。动态老化:在动态老化系统中,设备以老化速度设定的最大速率进行测试。

软件技术的专栏 1839

高通平台外部Codec调试实战:ES7243E从设备树到通路的完整指南

在嵌入式音频系统设计中,编解码器(Codec)是模拟与数字信号转换的核心器件。外部Codec因选型灵活、成本可控,在IoT设备、智能音箱等场景中广泛应用。其调试涉及I2S、I2C、MCLK等多总线协同,以及Linux内核ASoC框架与设备树的深度配合。理解Codec的基础时钟与数据通路原理,是高效定位无声、失真的关键。本文以ES7243E ADC为例,系统梳理高通平台上外部Codec从硬件检查、驱动移植、设备树配置到用户空间通路的全流程,并总结高频踩坑经验,助力音频BSP工程师快速打通录音链路。

weixin_34159110的博客 348

RK3588 启动卡死

kernel的设备树默认启动了hdmi0,我们的板子没有使用到hdmi0,因此在uboot阶段会卡住。uboot阶段会卡在hdptx_rpoll_cmn_config函数这里。最近再调试公司一个新板子,rk3588芯片,硬件自己设计。2、单PMIC和双PMIC配置,卡在更新处。3、emmc卡死,怀疑。1、hdmi0 卡死。

xiaoning132的专栏 5968

Logstash安装部署

1. 部署及安装所用的用户不能是root。

lmj3732018的博客 4294

[Linux Audio Driver] PDM CLOCK导致的耳机右声道POP音问题

0. 背景 此问题现象是,当音乐播放器里面有两首歌时,正在播放一首,然后双击耳机的中间按键会出现POP音;这里会发现,直接在界面上切歌,是不会有这样的问题的; (注:如此时音乐的名字mute1,我使用两个静音文件来做测试以排除音源本身的问题) 这是由于,直接用界面切歌,会默认触发提示音,进入设置里面,把所有的提示音都关闭,此问题即可通过在音乐播放器界面切歌复现;以下开始debug. 1. 软件修...

编程菜汝狗 1326

电机控制基础,小白入门篇

电机,这个藏在风扇、电动车、机器人里的“动力心脏”,如何精准控制它的转速、方向甚至力量?这篇博客专为完全零基础的小白打造,用“说人话”的方式拆解电机控制的底层逻辑,帮你从“看不懂电路图”到“能调个简单电机”。 电机控制不是“大神专属”,只要掌握“电生磁、磁生力”的底层逻辑,加上动手实践,小白也能快速入门。这篇博客会陪你从“看电机转”到“让电机听话”,把复杂的控制原理变成能上手玩的“小实验”。准备好你的面包板和电机,我们一起开启“电控之旅”吧!

汽车电子软件领域知识分享 5607

高通8xxx平台双MIC设置

dts文件修改:   qcom,audio-routing =    "RX_BIAS", "MCLK",    "LDO_H", "MCLK",    "SPK_OUT", "MCLK",    "SPK_OUT", "EXT_VDD_SPKR",    "Lineout_1 amp", "LINEOUT1",    "Lineout_2 amp", "LINEOUT2",

晒太阳 7089

基于分水岭分割进行肺癌诊断

近年来,肺癌的发病率和病死率均迅速上升,目前已居所有癌症之首。随着肺癌病人数量的增加,医生对肺部 CT 图像进行研判的工作量也增加了不少,在这种情况下难免工作效率降低甚至会出现误诊。为了帮助医生减少重复性工作,对肺部 CT 图像进行计算机辅助检测的技术就被广泛应用于对肺癌的诊断和治疗过程中。医学 CT 图像处理主要是研究医学图像中的器官和组织之间的关系,并进行病理性分析。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1568

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mixer_path.xml 研究

记录中。

jlgcumt的博客 2079

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

高通8650 MI2S 调试经验总结

这是一个测试命令,用于验证 USB 耳机的播放功能。USB 耳机需要通过上层的动态设置来配置。经过一番猜测,这可能与以下位置有关,因为默认情况下,只对CHS_1进行了TKV配置,CHS_2需要手动选择后才能发现它也需要配置。之前在未修改CHS_2配置的情况下,将这里的设置更改为2声道时,声音一直存在不连续的问题。经过以上两处修改后,问题果然得到了解决。为什么我的MI2S输入不是双声道的?代码修改太多了,找时间再贴。蓝牙也需要上层动态设置,

常来看看~ 1209

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android MI2S和PCM简要介绍

大部分高通平台提供四组MI2S(MI2S和I2S,个人理解为M可以多通路,如双MIC信号在codec内mix后输入)。其中分为两组引脚,每组引脚对应内部选择器,分为两组MI2S引脚。      而PCM和I2S使用引脚相同,但是很多配置不同,后面说到DAPM会提到dai_link和FE,BE的区别。      第一组I2S为pri_mi2s,这组一般在内部接高通的codec。      第二

u012416612的博客 8315

rk3399 LCD GPIO 兼容处理及解决蓝牙SCO通话异常

背景 由于项目需要,Rk3399需要兼容三块LCD屏,考虑到I2S0上有8个引脚,其 GPIO3_D4,GPIO3_D5,GPIO3_D6可复用为GPIO,而不影响I2S0通道上蓝牙音频的GPIO3_D3,GPIO3_D7上的输入输出。于是考虑通过配置这三个引脚的输入电平,来区分不同的LCD.但是在实际使用中发现蓝牙A2DP音频正常,通话时SCO通话无声音,问题由此展开: rk3399 LCD兼容处理及解决蓝牙SCO通话异常断导致。按道理说这三个GPIO既可以用作I2S也可复用为GPIO,应该不影.

yanhongfei268的专栏 1163

SA8255 Q+A QNX主要进程分析

基线:Snapdragon_Auto.HQX.4.5.6.0-00003.1-STD.PROD-1

kill150的专栏 6157

05-SA8155 QNX通过QUB配置GPIO/INT/SPI/I2C/SPI等

SA8155

蓝精灵的专栏 3166
上一篇: 端口不稳定抓logcat方法
下一篇: Android获取开机时间的方式(进launcher)
1byte ≠ 8bit
博客等级 码龄8年 7242粉丝 170原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值