cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pinscat /sys/kernel/debug/gpio用户名/密码root/rootDTS来自kernel-pi-v1.0.tar.gz226.7MBhttps://vanxoak.yuque.com/wb353n/hd-rk3576-pi/mg1yh7k1hgmmgtew开发资料下载https://vanxoak.yuque.com/wb353n/hd-rk3576-pi/amue52kesw19pqpg#NoWhJ与PC互传文件【使用WinSCP即可】在此介绍一下MobaXterm SFTP传输的一种简单方法https://vanxoak.yuque.com/wb353n/hd-rk3576-pi/zw4xqc5ixduxhm13#v5uOq音频测试1.音频硬件分布2.音频控件3.耳机播音测试roothd-rk3576:~# aplay kiss8.wavPlaying WAVE kiss8.wav : Signed 16 bit Little Endian, Rate 44100 Hz, Stereoroothd-rk3576:~# apt updateroothd-rk3576:~# apt install mpg123roothd-rk3576:~# mpg123 wenbie.mp3roothd-rk3576:~# apt install sox libsox-fmt-allroothd-rk3576:~# play wenbie.mp3roothd-rk3576:~# iperf3 -sC:\iperf3.21iperf3 -c 192.168.1.182 -i 1 -t 180020260417给万象奥科的开发板HD-RK3576-PI适配瑞芯微原厂的Buildroot时调通声卡es8388【DTS篇】2026/4/17 9:56缘起将万象奥科提供的内核kernel-pi-v1.0.tar.gz析取其中最小的DTS。【万象奥科】Y:\rk3576-kernel\kernel-pi-v1.0\arch\arm64\boot\dts\rockchip72min\rk3576-pi-lp4x.dtsi【EVB1】Y:\git_RK3576_Linux6.1\kernel-6.1\arch\arm64\boot\dts\rockchip\rk3576-evb1.dtsi【LCDTP】Y:\git_RK3576_Linux6.1\kernel-6.1\arch\arm64\boot\dts\rockchip11hdmitao\rk3576-evb.dtsi【配置声卡es8388】Y:\git_RK3576_Linux6.1\kernel-6.1\arch\arm64\boot\dts\rockchip\rk3576-evb1.dtsi【在uboot阶段拉高GPIO】Y:\git_RK3576_Linux6.1\kernel-6.1\arch\arm64\boot\dts\rockchip11hdmitao\rk3576-evb1-v10-linux.dts1、es8388_sound: es8388-sound {status okay;compatible rockchip,multicodecs-card;rockchip,card-name rockchip-es8388;hp-det-gpio gpio0 RK_PD3 GPIO_ACTIVE_LOW;io-channels saradc 3;io-channel-names adc-detect;keyup-threshold-microvolt 1800000;poll-interval 100;spk-con-gpio gpio2 RK_PB1 GPIO_ACTIVE_HIGH;hp-con-gpio gpio3 RK_PD6 GPIO_ACTIVE_HIGH;rockchip,pre-power-on-delay-ms 30;rockchip,post-power-down-delay-ms 40;rockchip,format i2s;rockchip,mclk-fs 256;rockchip,cpu sai1;rockchip,codec es8388;rockchip,audio-routing Headphone, LOUT1,Headphone, ROUT1,Speaker, LOUT2,Speaker, ROUT2,Headphone, Headphone Power,Headphone, Headphone Power,Speaker, Speaker Power,Speaker, Speaker Power,LINPUT1, Main Mic,LINPUT2, Main Mic,RINPUT1, Headset Mic,RINPUT2, Headset Mic;pinctrl-names default;pinctrl-0 hp_det;play-pause-key {label playpause;linux,code KEY_PLAYPAUSE;press-threshold-microvolt 2000;};};修改为es8388_sound: es8388-sound {status okay;compatible rockchip,multicodecs-card;rockchip,card-name rockchip-es8388;hp-det-gpio gpio1 RK_PD5 GPIO_ACTIVE_LOW;//io-channels saradc 3;///io-channel-names adc-detect;//keyup-threshold-microvolt 1800000;//poll-interval 100;//spk-con-gpio gpio2 RK_PB1 GPIO_ACTIVE_HIGH;//hp-con-gpio gpio3 RK_PD6 GPIO_ACTIVE_HIGH;//rockchip,pre-power-on-delay-ms 30;//rockchip,post-power-down-delay-ms 40;rockchip,format i2s;rockchip,mclk-fs 256;rockchip,cpu sai2;rockchip,codec es8388;rockchip,audio-routing Headphone, LOUT1,Headphone, ROUT1,//Speaker, LOUT2,//Speaker, ROUT2,Headphone, Headphone Power,Headphone, Headphone Power,Speaker, Speaker Power,Speaker, Speaker Power,LINPUT1, Main Mic,LINPUT2, Main Mic;//RINPUT1, Headset Mic,//RINPUT2, Headset Mic;pinctrl-names default;pinctrl-0 hp_det;//play-pause-key {// label playpause;// linux,code KEY_PLAYPAUSE;// press-threshold-microvolt 2000;//};};问DeepSeekRK3576的DTS请解释变更的理由我们被问到RK3576的DTS请解释变更的理由给出了一段设备树源代码的修改前后对比。需要解释为什么做了这些变更。可能的原因硬件设计变更、引脚重新分配、功能简化、去除未使用的功能、适配新的硬件版本等。分析修改内容hp-det-gpio 从 gpio0 RK_PD3 改为 gpio1 RK_PD5耳机检测引脚改变了可能是因为PCB改版或者使用了不同的GPIO。注释掉了大量行io-channels 和 io-channel-namesADC检测通道可能不再使用ADC检测或者改用其他方式。keyup-threshold-microvolt 和 poll-interval与ADC检测相关一并注释。spk-con-gpio 和 hp-con-gpio扬声器和耳机控制GPIO可能硬件上不再需要这些控制或者由其他方式控制。rockchip,pre-power-on-delay-ms 和 post-power-down-delay-ms延迟参数可能不再需要。rockchip,cpu 从 sai1 改为 sai2音频接口从SAI1改为SAI2说明使用的I2S接口变化。rockchip,audio-routing 中去掉了Speaker, LOUT2 和 Speaker, ROUT2可能不再有扬声器输出或者扬声器路由改变。RINPUT1, Headset Mic 和 RINPUT2, Headset Mic去掉了耳机麦克风输入可能只支持主麦克风Main Mic不再支持耳机上的麦克风。注释掉了 play-pause-key 节点可能不再需要播放暂停键功能或者按键检测方式改变。总体理由硬件设计变更简化了音频功能可能移除了扬声器、耳机麦克风、ADC按键检测等同时更换了CPU接口SAI1-SAI2和耳机检测引脚。我们需要给出合理的解释基于常见嵌入式开发中的变更原因。根据提供的设备树源码对比变更理由可归结为硬件设计迭代或功能裁剪具体分析如下1. 音频接口CPU DAI变更rockchip,cpu 从 sai1 改为 sai2理由硬件设计中ES8388 Codec所连接的SAI接口由SAI1调整为SAI2可能是由于PCB走线优化、引脚复用冲突或SAI1被其他外设占用。2. 耳机检测引脚变更hp-det-gpio 从 gpio0 RK_PD3 改为 gpio1 RK_PD5理由耳机插入检测的GPIO引脚发生了物理连接变化需要匹配新版原理图。3. 移除ADC按键检测功能注释了 io-channels、io-channel-names、keyup-threshold-microvolt、poll-interval 以及 play-pause-key 子节点理由原本通过SARADC通道3检测按键电压如播放/暂停键新版硬件可能移除了该按键或改用独立GPIO中断方式不再需要ADC轮询检测。4. 移除扬声器与耳机控制GPIO注释了 spk-con-gpio 和 hp-con-gpio理由扬声器使能和耳机输出使能可能改为硬件固定上拉/下拉或由其他电源管理芯片直接控制不再需要软件GPIO控制。5. 移除电源时序延迟参数注释了 rockchip,pre-power-on-delay-ms 和 rockchip,post-power-down-delay-ms理由Codec的电源时序可能由硬件电路保证如增加电容延迟或新版驱动已内置默认延迟无需DTS显式配置。6. 音频路由简化移除 Speaker 与 LOUT2/ROUT2 的连接移除 RINPUT1/RINPUT2 到 Headset Mic 的连接理由新版硬件可能移除了扬声器仅保留耳机输出或者扬声器走其他音频通道如外部功放独立控制。耳机麦克风输入被移除仅保留板载主麦克风LINPUT1/2说明设备不再支持带麦克风的耳机只支持普通立体声耳机。总结这是一次硬件功能降配或重新设计导致的设备树同步修改音频接口从SAI1换到SAI2耳机检测引脚变更移除了ADC按键检测、扬声器控制、耳机麦克风输入、电源时序软件控制可能的产品形态从支持带按键/麦克风的耳机、扬声器输出的完整音频方案简化为仅支持耳机输出板载主麦克风的低成本或特定场景方案。2、【不需要修改】pdmics: dummy-codec {status disabled;compatible rockchip,dummy-codec;#sound-dai-cells 0;};pdm_mic_array: pdm-mic-array {status disabled;compatible simple-audio-card;simple-audio-card,name rockchip,pdm-mic-array;simple-audio-card,cpu {sound-dai pdm1;};simple-audio-card,codec {sound-dai pdmics;};};总结【均未启动】dummy-codec 是一个没有硬件实体的虚拟 Codec用于满足 ASoC 链路对 Codec 节点的要求。pdm-mic-array 利用 simple-audio-card 将 PDM 控制器与虚拟 Codec 连接起来使操作系统能够识别并采集 PDM 麦克风阵列的数据。两者通常需要同时启用缺一不可默认均为 disabled需根据硬件设计在板级配置中开启。这种设计是 Rockchip 平台为简化 PDM 麦克风驱动集成而采用的通用做法。3、i2c3 {status okay;es8388: es838810 {status okay;#sound-dai-cells 0;compatible everest,es8388, everest,es8323;reg 0x10;clocks mclkout_sai1;clock-names mclk;assigned-clocks mclkout_sai1;assigned-clock-rates 12288000;pinctrl-names default;pinctrl-0 sai1m0_mclk;};};修改为i2c3 {status okay;pinctrl-names default;pinctrl-0 i2c3m0_xfer;es8388: es838811 {status okay;#sound-dai-cells 0;compatible everest,es8388;reg 0x11;clocks mclkout_sai2;clock-names mclk;assigned-clocks mclkout_sai2;assigned-clock-rates 12288000;pinctrl-names default;pinctrl-0 sai2m0_mclk;};};问DeepSeek我们被问到RK3576的DTS修改理由 然后给出了一个DTS片段的修改前后对比。需要解释修改的理由。分析修改内容修改前i2c3节点status okayes8388 10compatible包含everest,es8388,everest,es8323reg0x10时钟mclkout_sai1assigned-clock-rate 12288000pinctrl: sai1m0_mclk修改后i2c3节点增加了pinctrl-names和pinctrl-0用于i2c3m0_xfer之前没有可能之前I2C引脚配置在其他地方但这里明确加了es8388地址从0x10改为0x11compatible去掉了everest,es8323只保留everest,es8388时钟从mclkout_sai1改为mclkout_sai2assigned-clocks对应改pinctrl从sai1m0_mclk改为sai2m0_mclk所以修改理由可能包括I2C设备地址变化从0x10改为0x11可能因为硬件设计改变或地址冲突。音频编解码器型号确认去掉es8323兼容只保留es8388可能因为实际使用的是ES8388而非ES8323。时钟源改变从SAI1的MCLK改为SAI2的MCLK可能因为SAI1被其他功能占用或者需要不同的时钟路径。I2C引脚配置添加了i2c3m0_xfer的pinctrl确保I2C3的引脚功能正确配置。需要给出合理的解释说明为什么做这些修改。根据提供的 DTS 修改前后对比修改理由主要涉及硬件设计变更、资源冲突解决以及设备型号确认。具体分析如下1. I2C 设备地址变更reg 0x10 → 0x11原因ES8388 音频编解码器的 I2C 地址可能因硬件原理图调整而改变例如通过 ADDR 引脚电平配置或者原地址 0x10 与同 I2C 总线上的其他设备冲突。影响确保主机能正确寻址到 ES8388。2. 移除兼容型号 everest,es8323原因确认实际使用的芯片为 ES8388而非 ES8323。两者虽然兼容但寄存器或功能可能存在差异。去除冗余兼容字符串可避免驱动误匹配提高可靠性。影响驱动将仅匹配 ES8388不再回退到 ES8323 的初始化流程。3. 时钟源从 mclkout_sai1 改为 mclkout_sai2原因硬件设计上 ES8388 的 MCLK 输入改由 SAI2 的 MCLK 输出提供而非 SAI1。可能原因包括SAI1 被其他外设如另一音频接口、I2S 等占用需要独立的时钟频率或相位控制PCB 布线调整SAI2 更接近 ES8388。相应修改assigned-clocks 和 pinctrl 中 MCLK 引脚配置同步改为 sai2m0_mclk。4. 为 I2C3 总线添加 pinctrl 配置i2c3m0_xfer原因原 DTS 中可能依赖 Bootloader 或其他默认配置未显式指定 I2C3 的引脚功能。添加后明确将 I2C3 的 SCL/SDA 引脚复用为 I2C 功能i2c3m0_xfer避免引脚被误配置为 GPIO 或其他模式确保通信正常。影响提高系统启动后 I2C 总线的稳定性。总结此次修改是为了匹配 硬件原理图变更地址、时钟连接、I2C 引脚分配及 软件驱动精确性去除多余兼容 ID确保 RK3576 平台上的 ES8388 音频编解码器能够正确工作。4、headphone {hp_det: hp-det {rockchip,pins 0 RK_PD3 RK_FUNC_GPIO pcfg_pull_up;};};修改为headphone {hp_det: hp-det {rockchip,pins 1 RK_PD5 RK_FUNC_GPIO pcfg_pull_up;};};5、sai1 {status okay;pinctrl-names default;pinctrl-0 sai1m0_lrcksai1m0_sclksai1m0_sdi0sai1m0_sdo0;};修改为//sai1 {// status okay;// pinctrl-names default;// pinctrl-0 sai1m0_lrck// sai1m0_sclk// sai1m0_sdi0// sai1m0_sdo0;//};sai2 {status okay;pinctrl-names default;pinctrl-0 sai2m0_lrcksai2m0_sclksai2m0_sdisai2m0_sdo;};在 RK3576 的设备树中将 sai1 注释掉并启用 sai2 的修改通常是基于硬件设计或功能需求的调整。以下是几种常见原因1. 引脚复用冲突RK3576 的多个外设如 SA I2S、SPDIF、GPIO、UART 等可能共享同一组物理引脚。sai1 使用的引脚如 sai1m0_lrck、sai1m0_sclk 等可能被其他功能占用例如用作普通 GPIO、另一个音频接口、或调试接口。如果硬件原理图上这些引脚已经分配给了别的外设就必须禁用 sai1 以避免冲突。同时sai2 使用的另一组引脚sai2m0_*在硬件上是空闲且正确连接的因此启用它。2. 硬件设计变更开发板或产品可能实际使用了 SAI2 通道来连接音频 Codec如 ES8316、NAU8822 等而 SAI1 未被引出或未连接。如果前期调试时误启用了 SAI1但测量发现对应引脚无信号或者 Codec 挂在 SAI2 上就需要修改 DTS 切换。3. 多音频接口需求某些场景下需要两个音频接口同时工作例如一路用于蓝牙通话另一路用于喇叭播放。但如果 SAI1 和 SAI2 的某些引脚存在复用关系且硬件只支持其中一路则只能选择保留实际使用的那一路。从修改看当前仅启用了 SAI2说明产品只需一路 I2S且选择的是 SAI2。4. 软件配置规范或遗留问题参考设计公版 DTS可能默认开启了 SAI1而具体项目的硬件原理图拷贝自参考设计但改动了引脚连接。为了避免忘记修改而导致的驱动加载失败或功能异常开发者会显式注释掉未使用的节点并添加实际使用的节点。5. 调试过程中的临时操作如果 SAI1 驱动或硬件存在问题开发者可能先禁用 SAI1启用 SAI2 来验证音频通路是否正常。注释掉而不是删除是为了保留原始配置以便后续对比或回退。总结最直接的原因是硬件上音频 Codec 连接到了 SAI2 接口且 SAI1 的引脚被其他功能占用或未使用。因此需要关闭 SAI1打开 SAI2并正确配置对应的 pinctrl 引脚组。注以上分析基于典型的设备树修改逻辑具体原因建议结合硬件原理图、芯片数据手册以及板级配置确认。6、【可能有GPIO口冲突】usbdp_phy {orientation-switch;svid 0xff01;//sbu1-dc-gpios gpio2 RK_PA6 GPIO_ACTIVE_HIGH;//sbu2-dc-gpios gpio2 RK_PA7 GPIO_ACTIVE_HIGH;port {#address-cells 1;#size-cells 0;usbdp_phy_orientation_switch: endpoint0 {reg 0;remote-endpoint usbc0_orien_sw;};usbdp_phy_dp_altmode_mux: endpoint1 {reg 1;remote-endpoint dp_altmode_mux;};};};7、Y:\git_RK3576_Linux6.1\kernel-6.1\arch\arm64\boot\dts\rockchip\rk3576-evb.dtsi【拿掉GPIO冲突】//wireless_bluetooth: wireless-bluetooth {// compatible bluetooth-platdata;// uart_rts_gpios gpio1 RK_PC2 GPIO_ACTIVE_LOW;// pinctrl-names default, rts_gpio;// pinctrl-0 uart4m1_rtsn;// pinctrl-1 uart4_gpios;// BT,reset_gpio gpio1 RK_PC7 GPIO_ACTIVE_HIGH;// // 2026/3/14 19:43 wenyuanbo es8388 sai2m0-mclk// //BT,wake_gpio gpio1 RK_PD4 GPIO_ACTIVE_HIGH;// BT,wake_host_irq gpio0 RK_PB1 GPIO_ACTIVE_HIGH;// status okay;//};