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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87281.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 Prometheus 監控 Spring Boot 應用

SpringBoot+Prometheus+Grafana實現監控 邏輯如圖 應用程序在生產環境中運行時,監控其運行狀況是非常必要的。通過實時了解應用程序的運行狀況,才能在問題出現之前得到警告,也可以通監控應用系統的運行狀況,優化性能,提高運行效率。 一、監控 Spring Boot 應用 下面我們…

簡易計算器 Python 實現

目錄 一、代碼逐步分析&#xff08;適合剛入門的朋友看&#xff09; 1.定義了一個名為simple_calculator的函數&#xff0c;封裝了整個計算器的邏輯。 二、深入分析代碼塊&#xff0c;用更加官方的語詞來說&#xff08;適合想要深入學習的朋友&#xff09; 主循環結構 退出…

開源編譯器介紹

文章目錄 基本構成傳統編譯器編譯器的發展歷史&#xff08;History of Compiler&#xff09;GCC 編譯過程與原理&#xff08;GCC Process and Principle&#xff09;LLVM/Clang 編譯過程與原理&#xff08;LLVM/Clang Process and Principle&#xff09;GCC與與 LLVM/Clang 的對…

C++ String知識點

當然可以&#xff01;下面我將以系統全面、通俗易懂、深入淺出的方式&#xff0c;為你講解 C 中非常核心但也容易被低估的內容 —— std::string。 &#x1f31f; C std::string 全面詳解 &#x1f4cc; 一、string 是什么&#xff1f; C 的 std::string 是 C 標準庫中封裝好…

全新NVIDIA Llama Nemotron Nano視覺語言模型在OCR基準測試中準確率奪冠

全新NVIDIA Llama Nemotron Nano視覺語言模型在OCR基準測試中準確率奪冠 PDF、圖表、圖形和儀表板等文檔是豐富的數據源&#xff0c;當這些數據被提取和整理后&#xff0c;能夠為決策制定提供有價值的洞察。從自動化財務報表處理到改進商業智能工作流程&#xff0c;智能文檔處…

gradle的 build時kaptDebugKotlin 處理數據庫模塊

gradle的 build時輸出&#xff1a; Task :app:kaptDebugKotlin 注: Processing class HDCoinBean 注: Processing class HDCurrencyBean 注: Processing class HDSelfAddCoin 注: Processing class MN 注: Creating DefaultRealmModule <—> 80% EXECUTING [7m 56s] IDLE…

二叉樹的節點操作算法

235. 二叉搜索樹的最近公共祖先 力扣題目鏈接(opens new window) 給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結點 p、q,最近公共祖先表示為一個結點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大…

【ubuntu驅動安裝】安裝nvidia驅動和cuda環境

1、安裝驅動 首先查看環境和顯卡&#xff1a; 更新apt 查看nouveau是否禁用 如果有返回值禁用nouveau(nouveau是通用的驅動程序)&#xff08;必須&#xff09;&#xff0c;兩種文件&#xff0c;22.04是下面那個 添加如下&#xff1a; 終端輸入后更新 重啟電腦sudo reboo…

力扣HOT100之終章:一些隨筆

今天終于把力扣HOT100系列給刷完了&#xff0c;每一道題都記錄了自己的思考過程和解題過程中參考的一些題解和視頻&#xff0c;方便自己以后再刷的時候快速復習&#xff0c;從2025年3月4日寫下第一篇博客&#xff0c;到2025年6月12日完成最后一題并寫下最后一篇博客&#xff0c…

榕壹云家政系統:基于Spring Boot與UniApp的智能家政服務解決方案

在數字化浪潮下&#xff0c;傳統家政行業正面臨效率與服務質量的升級挑戰。榕壹云公司依托前沿技術&#xff0c;推出了一款用戶端與師傅端二合一的家政服務小程序&#xff0c;通過整合預約上門、分銷、儲值、優惠券等功能&#xff0c;為家政服務行業提供了一套高效、靈活的數字…

CSRF擴展 JSONP劫持

介紹&#xff1a;JOSNP&#xff08;JSONP with Override Security Negotiation Protocol&#xff09;劫持是一種利用JSONP &#xff08;JSON with Padding&#xff09;跨域數據獲取機制的安全漏洞&#xff0c;攻擊者通過篡改或偽造JSONP回調函數竊 取用戶敏感數據。由于JSONP…

HTTP/HTTPS 協議解析

前言 在當今互聯網時代&#xff0c;HTTP/HTTPS 協議作為 Web 通信的基石&#xff0c;承載著幾乎所有的網絡內容傳輸。對于我們而言&#xff0c;深入理解這些協議不僅是技術素養的體現&#xff0c;更是構建高性能、安全、可靠 Web 應用的必要條件。 為什么我們需要深入了解 HT…

Flask-login 處理授權邏輯

認證 vs 授權&#xff1a; 在 Web 應用程序的安全機制中&#xff0c;認證&#xff08;Authentication&#xff09; 和 授權&#xff08;Authorization&#xff09; 是兩個核心概念&#xff0c;它們雖然緊密相關&#xff0c;但職責和作用不同。 認證&#xff08;Authenticatio…

xenomai3+linux構建linux實時操作系統-基于X86_64和arm

簡介&#xff1a; Xenomai是一個實時性解決方案&#xff0c;通過在Linux上添加實時內核Cobalt來增強實時性能。它有三個主要部分&#xff1a;libcobalt&#xff08;用戶空間實時庫&#xff09;、Cobalt&#xff08;內核空間實時內核&#xff09;和硬件架構特定層&#xff08;ip…

Linux核心文件(core file)詳解

一、核心文件&#xff08;core file&#xff09;概述 1.1 什么是核心文件 核心文件&#xff08;core file&#xff09;是Linux操作系統在程序崩潰時生成的一種轉儲文件。它包含了程序崩潰時的內存內容、寄存器狀態和執行狀態。通過分析核心文件&#xff0c;開發者可以找到程序…

java中跨域問題及解決方案

1. 什么是跨域 從不同的地址訪問另外一個地址就是跨域 2.跨域一定會有異常嗎 跨域異常只會在前端發生&#xff0c;后端跨域不會產生異常 因為瀏覽器有一個叫做同源策略的東西&#xff0c;它發現不同域之間的訪問是不安全的行為&#xff0c;會禁止&#xff0c;所以會拋出異常…

網絡層協議 IP 協議介紹 -- IP 協議,網段劃分,私有 IP 和 公網 IP,路由

目錄 1 IP 協議 1.1 IP 協議格式 2. 網段劃分 2.1 網絡號和主機號 2.2 傳統 IP 地址分類和 CIDR 技術 2.3 特殊的 IP 地址 2.4 IP 地址的數量限制 2.5 私有 IP 和公網 IP 3. 路由 網絡層主要作用是實現不同局域網之間的通信連接&#xff0c;并為數據在復雜網絡環境中的…

【案例分享】KMDA-7611-S001--高性能嵌入式電腦助力雙臂輪式人形機器人應用

智能制造時代&#xff0c;雙臂輪式機器人需求浮出水面 隨著制造業、物流業和電子商務的飛速發展&#xff0c;智能搬運機器人正成為行業降本增效的核心工具。它們不僅解決了傳統物流中效率低、成本高、安全性差等痛點&#xff0c;更通過智能化與可擴展性設計&#xff0c;通過自主…

iOS App上線前的安全防線:項目后期如何用Ipa Guard與其他工具完成高效混淆部署

對大多數iOS開發者來說&#xff0c;安全并不是開發早期就能解決的問題。尤其在項目逐步進入上線準備階段后&#xff0c;才開始集中考慮逆向破解、資源泄露等安全隱患的解決方案。這個階段往往時間緊張、結構復雜&#xff0c;再要重構源碼或引入大規模修改幾乎不現實。因此&…

技術佃農時代:當云計算成為新型地主經濟

技術佃農時代:當云計算成為新型地主經濟 導語:當算力成為生產資料,云賬單背后的「數字佃租」正悄然重塑IT生產關系——我們是否在用自己的代碼為云廠商開墾數字荒地? 一、揭開云計算的「佃租算法」面紗 // 云經濟體的核心收割邏輯 public class CloudLandlord {public sta…