RK3326音频调试避坑指南:从“录不了”到“全功能跑通”的实战历程

电子说

1.4w人已加入

描述

 

 

在嵌入式 AI 语音设备领域,RK3326 凭借性价比和对多通道音频的支持,成为不少开发者的首选主控。但音频调试向来是 坑多细节密”—— 前阵子有位同学反馈,用 tinycap 录 PCM 能成,录 WAV 就翻车,硬件飞线后还采不到回采数据。今天结合实际硬件图纸、DTS 配置和调试日志,跟大家拆解 RK3326 上 PDM 麦克风 音频回采的完整调试流程,帮你避开那些 一看就会,一调就废” 的坑。

 

 

一、调试背景:先搞懂硬件与初始问题

 

在动手前,必须先理清硬件链路—— 音频调试的核心是 软件配置匹配硬件实际连接,否则再改代码也白搭。

 

 

调试调试调试调试

1. 核心硬件组成

 

模块

 

 

关键参数与连接

 

 

主控

 

 

RK3326,负责 PDM 音频数据接收与处理,关键引脚:W15GPIO2_C6PDM_CLK)、AA15PDM_SDI1)、Y15PDM_SDI2

 

 

音频 Codec

 

 

集成在 PMIC RK817 中(RK817-codec),支持 PDM 输入、I2S 输出,回采依赖 ADC 环路(adc-for-loopback

 

 

麦克风

 

 

 PDM 麦克风(LEFT/RIGHT),分别连接 PDM_SDI1CN1)、PDM_SDI2CN2),供电 3.3VVCC_3V0),带 2.2uF 滤波电容

 

 

时钟与通路

 

 

RK817 的 PDM_CLK 需飞线到 RK3326 的 W15 脚(原硬件未直连,这是关键坑点),麦克风信号线带 100K 上拉电阻(R9968/R9969

 

 

2. 初始调试问题

 

1.格式差异问题tinycap /sdcard/rec3.pcm -D 0 -d 1 -c 8 ... 能录 PCM,但改输出为.wav就失败;

 

 

2.回采失败问题:硬件飞线(RK817 PDMCLK→W15)后,执行tinymix 0 2 + tinycap,录不到机器内播音的回采数据;

 

 

3.时钟无波形:示波器测 W15 脚(PDM_CLK),无时钟信号,麦克风数据自然传不进来。

 

 

二、核心问题拆解:从现象” 到 本质

 

1. 为什么 tinycap 录 WAV 会失败?—— 格式本质差异

 

很多同学会误以为改个文件后缀就行,但 tinycap 的设计逻辑是只输出原始 PCM 数据,而 WAV 格式需要 文件头 + PCM 数据(文件头记录采样率、声道数、位深等信息)。

 

 

PCM:无文件头,tinycap 直接写采样数据,硬件输出什么就存什么,所以能成功;

 

 

WAV:缺少文件头,tinycap 无法生成符合 WAV 规范的文件,系统识别为 无效文件,看似 录不了,实际是格式不兼容。

 

 

解决思路:先录 PCM,再用 ffmpeg 补文件头转 WAV

 

 

2. 回采与时钟问题:硬件 软件双重卡点

 

飞线后仍无时钟、无回采,核心是两个卡点:

 

 

1)硬件卡点:PDM_CLK 未正确连接

 

RK3326 的 PDM 模块需要外部时钟驱动(来自 RK817 的 PDMCLK),原硬件未直连,需飞线:

 

 

飞线目标:RK817 的 PDMCLK 引脚 → RK3326 的 W15 脚(GPIO2_C6,对应pdm_clk0m1引脚);

 

 

易错点:飞线后未检查波形—— 若仍无时钟,不是硬件没接好,就是软件没启用该引脚。

 

 

2)软件卡点:DTS 引脚配置不全 通路未选对

 

 DTS 看,PDM 节点的pinctrl-0配置缺失关键引脚:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
// 原始PDM节点配置(不全)&pdm {        status = "okay";        #sound-dai-cells = <0>;        pinctrl-names = "default";        pinctrl-0 = <&pdm_clk1 &pdm_sdi1 &pdm_sdi2>; // 少了pdm_clk0m1、pdm_sdi0m1};

“PDM_SDI0 用于回采,在 1-2 通道,但原始配置没加&pdm_sdi0m1,导致回采通路没启用;同时缺少&pdm_clk0m1,时钟引脚没被正确配置为 PDM 功能,自然无波形。

 

 

三、分步解决方案:硬件软件验证

 

第一步:硬件链路核查(优先级最高)

 

音频调试先查硬件,避免软件瞎调。按以下清单逐一确认:

 

 

1.麦克风供电:测量 CN1/CN2 的 MIC_3V0_CONN 引脚,电压是否 3.0V(正常),滤波电容 C9867/C98682.2uF)是否焊接;

 

 

2.PDM 信号线PDM_SDI1CN1 引脚 2→RK3326 AA15PDM_SDI2CN2 引脚 2→RK3326 Y15,线路是否通(用万用表测通断);

 

 

3.时钟飞线RK817 的 PDMCLK 引脚 → RK3326 W15GPIO2_C6),飞线是否牢固,无虚焊;

 

 

4.上拉电阻R9968/R9969100K)是否焊接(PDM 信号线需上拉才能稳定传输);

 

 

5.回采硬件RK817 的 HP_SNS 引脚(耳机检测)是否接 R61340Ω 电阻,回采信号需要)。

 

 

第二步:DTS 配置修改

 

基于文档 6 的原始 DTS,重点修改PDM 节点RK817 Codec 节点,确保引脚与功能匹配:

 

 

1. PDM 节点修改(启用时钟与回采引脚)

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
&pdm {        status = "okay";        #sound-dai-cells = <0>;        pinctrl-names = "default";        pinctrl-0 = <&pdm_clk0m1                &pdm_clk1                &pdm_sdi0m1                &pdm_sdi1                &pdm_sdi2                &pdm_sdi3>;};

2. RK817 Codec 节点确认(回采必需)

 

确保rk817_codec节点启用回采功能,关键参数如下:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
rk817_codec: codec {        #sound-dai-cells = <1>;        compatible = "rockchip,rk817-codec";        clocks = <&cru SCLK_I2S1_OUT>;        clock-names = "mclk";        pinctrl-names = "default";        pinctrl-0 = <&i2s1_2ch_mclk>,<&hp_init>;        pdmdata-out-enable; // 启用PDM数据输出        use-ext-amplifier; // 外部放大器(若有)        adc-for-loopback; // 开启ADC回采(关键!没有这个回采用不了)        hp-ctl-gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>;        hp-volume = <20>;        spk-volume = <20>;};

第三步:tinymix+tinycap 调试(通路配置与录制)

 

tinymix 是 RK 平台配置音频通路的核心工具,选对控制项才能打通数据链路

 

 

1. 用 tinymix 配置通路(关键一步)

 

最初用tinymix 0 2失败,换成tinymix 1 1就有反应,原因是:

 

 

tinymix 0:对应 I2S 音频通路(用于耳机 喇叭),不是 PDM 麦克风通路;

 

 

tinymix 1:对应 PDM 麦克风通路,1表示启用该通路(不同平台控制项编号可能不同,可通过tinymix命令查看所有控制项)。

 

 

正确操作

 

 

  •  
  •  
  •  
  •  
# 查看所有音频控制项,找到PDM相关的控制项(通常名称含“PDM”或“Mic”)tinymix# 启用PDM麦克风通路(假设控制项1是PDM使能)tinymix 1 1

2. tinycap 录制 PCM(参数必须匹配硬件)

 

  •  
  •  
  •  
# 命令解析:-D 0(音频设备0)-d 1(声卡1,PDM对应的声卡)-c 8(8通道,覆盖SDI0-3)# -r 16000(采样率16K,PDM常用)-b 16(位深16)-p 1024(周期大小)-n 3(录制3秒)tinycap /sdcard/rec3.pcm -D 0 -d 1 -c 8 -r 16000 -b 16 -p 1024 -n 3

为什么用-c 8?因为 RK3326 的 PDM 模块支持 路 SDISDI0-3),每路 通道,共 通道;用户的 MIC 在 3-6 通道(SDI1/2),回采在 1-2 通道(SDI0),只有录 通道才能同时抓到 MIC 和回采数据。

 

 

第四步:回采问题专项处理

 

若仍采不到回采数据(机器内播音的声音),需额外检查:

 

 

1.回采功能是否启用:确认rk817_codec节点的adc-for-loopback是否配置,编译 DTS 时是否生效(可通过以下指令查看);

  •  
cat /sys/firmware/devicetree/base/rk817@20/codec/adc-for-loopback

 

 

 

2.时钟波形检查:用示波器测 RK3326 W15 脚(PDM_CLK),若仍无波形,可能是 DTS 配置没生效(重新编译烧录)或硬件飞线断了;

 

 

3.播放测试音频:确保机器内播音” 正常(比如用tinyplay播放一个 WAV 文件),否则无声音可回采。

 

 

四、最终验证:从录制到播放全流程

 

1.转码 PCM 为 WAV(便于播放验证)

 

 

tinycap 录的 PCM 无文件头,需用 ffmpeg 转成 WAV

 

 

  •  
  •  
# -f s16le(16位小端)-ar 16000(采样率)-ac 8(8通道)-i 输入PCM -o 输出WAVffmpeg -f s16le -ar 16000 -ac 8 -i /sdcard/rec3.pcm /sdcard/rec3.wav

1.播放验证

 

 

tinyplay播放转好的 WAV 文件,若能听到 自己说话的声音(MIC” 和 机器内播音的声音(回采),说明调试成功;

 

 

若只有 MIC 声音,无回采,检查adc-for-loopback配置和 HP_SNS 电阻;

 

 

若什么声音都没有,重新查 PDM_CLK 波形和 tinymix 通路配置。

 

 

五、调试经验总结:避坑关键点

 

1.硬件优先原则:先查电压、线路通断、波形(尤其是时钟信号),再调软件—— 没有时钟,软件再对也没数据;

 

 

2.DTS 引脚匹配RK 平台的 pinmux 是 硬约束PDM 的 CLK/SDI 引脚必须配置为对应功能(如 RK_FUNC_2),不能用 GPIO 功能;

 

 

3.tinymix 通路别乱选:控制项编号对应不同通路,不确定时用tinymix列全列表,结合硬件功能猜(含 PDM/Mic 的优先试);

 

 

4.格式差异要记牢tinycap 只产 PCM,转 WAV 用 ffmpeg,别直接改后缀;

 

 

5.回采依赖 Codec 配置RK817 的回采需要adc-for-loopback,硬件上 HP_SNS 电阻不能少。

 

 

结尾

 

RK3326 的音频调试看似复杂,实则是 硬件链路 软件配置 工具使用” 的三重匹配。只要按 硬件核查→DTS 修改通路配置录制验证” 的步骤来,大部分问题都能解决。如果你的调试过程中遇到特殊坑,欢迎在评论区留言,我们一起讨论~

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分