一、背景
近期項目中有個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