RK809调试

📅 发布时间:2026/7/5 22:24:28 👁️ 浏览次数:
RK809调试
一、内核配置让内核支持 RK809 音频1. 启用 simple-audio-card 通用音频驱动文件位置kernel/arch/arm64/configs/lubancat2_defconfig或你的板级 defconfig修改内容CONFIG_SND_SIMPLE_CARD_UTILSy CONFIG_SND_SIMPLE_CARDy作用启用simple-audio-card框架允许通过设备树描述音频链路无需自己写驱动。2. 启用 RK3568 I2S 驱动文件位置kernel/sound/soc/rockchip/Makefile关键依赖rockchip_i2s.c对应CONFIG_SND_SOC_ROCKCHIP_I2Skernel/arch/arm64/configs/lubancat2_defconfig中添加CONFIG_SND_SOC_ROCKCHIPy CONFIG_SND_SOC_ROCKCHIP_I2Sy CONFIG_SND_SOC_ROCKCHIP_I2S_TDMy作用让内核支持 RK3568 的 I2S 控制器用于和 RK809 Codec 通信。3. 启用 RK809 Codec 驱动文件位置kernel/sound/soc/codecs/下有rk817_codec.ckernel/sound/soc/codecs/下没有单独的rk809_codec.c但能看到rk817_codec.c/h—— 核心原因是RK809 Codec 驱动和 RK817 做了兼容复用rk817_codec.c驱动文件瑞芯微原厂将 RK809/RK817 等同系列 PMIC 的 Codec 驱动做了整合无需单独的 rk809 驱动文件这是嵌入式开发中很常见的同系列硬件兼容设计kernel/arch/arm64/configs/lubancat2_defconfig中添加CONFIG_SND_SOC_RK817y作用让内核识别 RK809 PMU 内部的 Codec 模块。二、设备树配置告诉内核硬件怎么连1. 配置 I2S1 控制器CPU 侧文件位置kernel/arch/arm64/boot/dts/rockchip/rk3568-lubancat-dsi.dtsi或你的板级 dtsi节点名i2s1_8ch: i2sfe410000关键配置dtsi2s1_8ch: i2sfe410000 { compatible rockchip,rk3568-i2s-tdm; reg 0x0 0xfe410000 0x0 0x10000; interrupts GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH; clocks cru MCLK_I2S1_8CH_TX, cru MCLK_I2S1_8CH_RX, cru HCLK_I2S1_8CH; clock-names mclk_tx, mclk_rx, hclk; dmas dmac1 2, dmac1 3; dma-names tx, rx; resets cru SRST_M_I2S1_8CH_TX, cru SRST_M_I2S1_8CH_RX; reset-names tx-m, rx-m; rockchip,cru cru; rockchip,grf grf; #sound-dai-cells 0; pinctrl-names default; pinctrl-0 i2s1m0_sclktx i2s1m0_sclkrx i2s1m0_lrcktx i2s1m0_lrckrx i2s1m0_sdi0 i2s1m0_sdi1 i2s1m0_sdi2 i2s1m0_sdi3 i2s1m0_sdo0 i2s1m0_sdo1 i2s1m0_sdo2 i2s1m0_sdo3; status okay; // 从 disabled 改为 okay };pinctrl 配置同一文件中dtsi2s1m0_sclktx: i2s1m0-sclktx { rockchip,pins 3 RK_PB1 RK_FUNC_GPIO pcfg_pull_none; }; // ... 其他引脚复用配置类似确保I2S的 MCLK/SCLK/LRCK/SDI/SDO 引脚正确复用2. 配置 RK809 CodecCodec 侧文件位置同一设备树文件节点名rk809_codec: codec1aI2C 地址 0x1a关键配置dtsrk809_codec: codec1a { compatible rockchip,rk809-codec, rockchip,rk817-codec; clocks cru I2S1_MCLKOUT_TX; clock-names mclk; assigned-clocks cru I2S1_MCLKOUT_TX; assigned-clock-rates 12288000; // 主时钟频率常见 11.2896 / 12.288 / 24.576 MHz #sound-dai-cells 0; pinctrl-names default; pinctrl-0 i2s1m0_mclk; hp-volume 20; spk-volume 3; mic-in-differential; status okay; };3. 配置 simple-audio-card把 CPU 和 Codec 连起来文件位置同一设备树文件节点名rk809_sound: rk809-sound关键配置dtsrk809_sound: rk809-sound { status okay; compatible simple-audio-card; simple-audio-card,format i2s; simple-audio-card,name rockchip,rk809-codec; simple-audio-card,mclk-fs 256; // MCLK 采样率 * 256 simple-audio-card,widgets Microphone, Mic Jack, Headphone, Headphone Jack; simple-audio-card,routing Mic Jack, MICBIAS1, IN1P, Mic Jack, Headphone Jack, HPOL, Headphone Jack, HPOR; simple-audio-card,cpu { sound-dai i2s1_8ch; }; simple-audio-card,codec { sound-dai rk809_codec; }; };含义format i2s指定音频格式为 I2S。widgets定义音频组件麦克风、耳机。routing定义音频通路麦克风→IN1PHPOL/HPOR→耳机。cpu/codec把 CPU 侧 I2S 和 Codec 侧 DAI 绑定。三、编译与部署编译内核make lubancat2_defconfig make -j$(nproc)更新内核镜像将生成的Image和dtb文件烧录到开发板。四、验证与调试1. 查看声卡注册cat /proc/asound/cards正常输出plaintext0 [rockchiprk809co]: rockchip_rk809 - rockchip,rk809-codec 1 [rockchiphdmi ]: rockchip_hdmi - rockchip-hdmi说明card0是 RK809 Codeccard1是 HDMI 音频。2. 查看音频设备节点ls /dev/snd正常输出controlC0、pcmC0D0c、pcmC0D0p等。controlC0音频控制接口音量、静音等。pcmC0D0c录音设备cCapture。pcmC0D0p播放设备pPlayback。3. 查看可录音设备arecord -l正常输出plaintextcard 0: rockchiprk809co [rockchip,rk809-codec], device 0: fe410000.i2s-rk817-hifi rk817-hifi-0 []4. 测试播放与录音播放测试aplay test.wav -D hw:0,0录音测试arecord -D hw:0,0 -f cd test.wav五、常见问题排查声卡未注册检查设备树中status是否为okay内核配置是否启用CONFIG_SND_SIMPLE_CARD。无声音检查widgets和routing配置是否正确耳机 / 扬声器通路是否映射。杂音调整mclk-fs和assigned-clock-rates确保时钟稳定检查硬件电路是否有干扰。