RK3576 Android14 DMIC调制
一、背景
近期项目中有个DMIC调试的需求,搁置了较长时间,现今着手调试,遂作记录。
二、开发环境
OS:Android14
Platform:RK3576
Linux Version:6.1.99
SDK Version:android-14.0-mid-rkr6
三、开发资料
DIMC选取:LMD2718T261-OA1
硬件实物以及封装可在立创商城中查看
LMD2718T261-OA1中文资料_最新报价_数据手册下载_LinkMems(聆麦声学)-MEMS麦克风-立创商城
首先我们先了解一下什么是数字麦(DMIC)。传统上两类常见的麦克风分为模拟麦(AMIC)和数字麦(DMIC)。根据信号处理方式和工作原理,将声波转换为模拟电信号(电压变化)为模拟麦,这个需要外接ADC才能被数字设备处理;而直接将声波转换为数字信号的则是数字麦,其通过内置ADC模数转换芯片来实现功能。当然,除了这两类,麦克风还有各种各样的类型,诸如光学麦克风、铝带麦克风、碳粒麦克风等等,有兴趣者可以了解一下。本次使用的LMD2718T261-OA1则是DMIC类。
LMD2718T MEMS麦克风采用集成化专用前置放大ASIC芯片设计,通过电容式音频传感器实现高灵敏度、高信噪比(SNR)的信号输出。该产品采用表面贴装(SMT)封装,支持高温回流焊工艺,并输出单比特PDM(脉冲密度调制)格式数字信号。
详细的内容,可以在网上找到其对应的数据手册:
LMD2718T261-OA1 -PDF数据手册-参考资料-立创商城
在数据手册中查找,可以看到该芯片硬件连接简单原理如下图所示:
鉴于保密原则,这里不展示具体实际的硬件原理图。其中我们实际接到RK主板CPU上的两路引脚为CLK和DATA引脚,直连主板PDM接口。可见,这是以纯PDM麦的方式来做适配,在逻辑上可以较为简化一些。
四、软件调试
既然是作为纯PDM麦来调试,那配置上则可以则能简化不少的步骤。在下的配置如下所示:
pdmics: dummy-codec {status = "okay";compatible = "rockchip,dummy-codec";#sound-dai-cells = <0>;};pdm_mic_array: pdm-mic-array {status = "okay";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>;};};&pdm1 {status = "okay";rockchip,path-map = <1 0 2 3>;pinctrl-names = "default";pinctrl-0 = <&pdm1m1_sdi1&pdm1m1_clk0>;};
由于采用纯PDM麦,不经过解码芯片而是直连主板CPU,那么我们直接使用RK自带的PCM编解码,声卡上使用默认声卡即可。而芯片的DATA和CLK引脚则是连到接到主板的pdm1m1_sdi1和
pdm1m1_clk0,记得在pdm1节点中使能。
之后,编译代码并烧录镜像,发现PDM声卡已经配置出来了:
使用tinycap工具来录音,如下
tinycap /sdcard/rec.wav -D 1 -d 0 -c 2 -r 44100 -b 16 -p 1024 -n 3
各参数说明如下:
# -D 声卡序号/声卡名
# -d 设备名
# -c 声道数量,一般为偶数
# -r 采样率
# -b 位深
# -p 周期
# -n 跳过周期数
# -T 录音时间,单位秒;缺省后时间无限延长录音期间,通过Ctrl+C来结束
音频文件保存之后,使用tinyplay工具播放:
tinyplay /sdcard/rec.wav -D 1 -d 0 -p 1024
当然,简单点的话也可以直接使用系统自带的录音机来试试看,正常配置成功的话使用是没有问题的。
此时发现一个问题,录出来的音频文件播放没有声音,改用8声道来录制,也没有。
通过与原厂沟通后,需合入如下补丁,把pdm的音量设置加上:
diff --git a/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.c b/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.c
--- a/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.c
+++ b/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.c
@@ -821,6 +821,14 @@ static int rockchip_pdm_v2_probe(struct platform_device *pdev)*/pdm->version = (pdm->version >> 16) & 0xffff;+ if (pdm->version == RK3506_PDM) {
+ regmap_update_bits(pdm->regmap, PDM_V2_GAIN_CTRL,
+ PDM_V2_GAIN_CTRL_MSK, PDM_V2_GAIN_CTRL_0DB);
+ } else if (pdm->version == RK3576_PDM) {
+ regmap_update_bits(pdm->regmap, PDM_V2_FILTER_CTRL,
+ PDM_V2_GAIN_MSK,PDM_V2_GAIN_0DB);
+ }
+ret = rockchip_pdm_v2_path_parse(pdm, node);if (ret != 0 && ret != -ENOENT)goto err_hclk;
diff --git a/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.h b/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.h
index 86bf17918e1..c2def866da2 100644
--- a/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.h
+++ b/kernel-6.1/sound/soc/rockchip/rockchip_pdm_v2.h
@@ -150,5 +150,6 @@#define PDM_V2_GAIN_CTRL_SHIFT 1#define PDM_V2_GAIN_CTRL_MIN 0#define PDM_V2_GAIN_CTRL_MAX 0x7f
+#define PDM_V2_GAIN_CTRL_0DB (175 << 0)#endif
之后我们重新编译验证,发现DMIC的录音功能可以正常使用了。
至此,基本完成了这个DMIC的调试,后续有何问题,则继续补充。
五、参考资料:
模拟mic和数字mic有什么区别? mems属于哪一种? - 知乎https://zhuanlan.zhihu.com/p/631940614【嵌入式】AMIC和DMIC(什么是数字麦和模拟麦)_dmic和amic区别-CSDN博客
https://blog.csdn.net/tangta789/article/details/127383734?ops_request_misc=%257B%2522request%255Fid%2522%253A%25225463db69a12347742cc3a030bd0d5803%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=5463db69a12347742cc3a030bd0d5803&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-127383734-null-null.nonecase&utm_term=%E4%BB%80%E4%B9%88%E6%98%AF%E6%95%B0%E5%AD%97%E9%BA%A6&spm=1018.2226.3001.4450
RK3568平台 麦克风PDM接口录音_rk pdm配置_rk3568 pdm-CSDN博客https://blog.csdn.net/2401_83817122/article/details/137404144?ops_request_misc=%257B%2522request%255Fid%2522%253A%252236f10c4ea5447fb2cd1c55d2bd095366%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=36f10c4ea5447fb2cd1c55d2bd095366&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-137404144-null-null.nonecase&utm_term=RK3568%20PDM%E9%85%8D%E7%BD%AE&spm=1018.2226.3001.4450RK3568平台(音频篇)麦克风PDM接口录音_rk3568 支持pdm数字mic-CSDN博客
https://blog.csdn.net/weixin_49303682/article/details/135875205?ops_request_misc=%257B%2522request%255Fid%2522%253A%252236f10c4ea5447fb2cd1c55d2bd095366%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=36f10c4ea5447fb2cd1c55d2bd095366&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-135875205-null-null.nonecase&utm_term=RK3568%20PDM%E9%85%8D%E7%BD%AE&spm=1018.2226.3001.4450