前言
問題描述: 基于 rk3399 linux SDK,音頻芯片rt5640 不能錄音,分享一下筆者的除錯記錄,
分析步驟
1. 通過如下命令確認聲卡是否注冊成功:

可以看出,聲卡已經注冊上了,
controlC0 --> 用于聲卡的控制,例如通道選擇,混音,麥克風的控制等
pcmC0D0c --〉 用于錄音的 pcm 設備
pcmC0D0p --〉 用于播放的 pcm 設備
聲卡注冊上之后,就開始除錯播放和錄音功能,rk3399 官方手冊檔案是基于android 除錯的,安卓上
常用的是tiny工具,就與alsa裁剪的,
linux 常用的音頻ALSA 開發工具 是alsa-utils ,
安裝即可 :dpkg -i alsa-utils_1.2.2-1kylin1rk1_arm64.deb
2. 驗證一下播放

在耳機中也能聽到聲音,播放沒啥問題,基于也說明了,音頻驅動iic ,i2s的問題不大,
接下來開始驗證錄音
3. 驗證一下錄音

再用上文的aplay 播放,發現放不出聲音,接下來開始分析錄音問題,
3.1 先打開 地板硬體原理圖,找到音頻芯片部分,

如圈出來的部分,原理圖上 看出重要的資訊:
1.麥克風 通過 MIC_IN3P 接到了Mono(單聲道),
2.與cpu通信用的是 i2s0.
3.播放接的是L_OUT,
3.2 在檢查一下設備樹的配置:

手上的原始碼里 ,圖片圈出來的1 部分要改成IN3,
2 部分要改成 i2s0,
i2s 不對,板子里確能放音樂,有點不對勁,經過溝通,板子的內核是最新修改過的,已改成如下:

3.3 接下來大概率 就是音頻通路的配置問題了,接著說linux 下如何配錄音通路,
1.先通過 amixer contents 查看音頻介面
2…在打開rt5640 的datasheet,如下圖 Audio Mix Path

如上圖所示:從上文原理圖得知麥克風介入IN3P,在結合上圖中的1. 2. 部分,通過MICBST3 接入RECMIXR器件,
可以 得出 BST3 相關的介面 numid = 33,需要打開這個開關

至此,通路第一條命令 可以得出
amixer cset numid=33 1
3.接著往下走 ,如下圖 Audio Mix Path中,圈出來的紅色標記3,接到到digital mixer path 部分
如下圖:

同理可以得出圖片4,5,6 ,7 的通路配置
amixer cset numid=41 1
amixer cset numid=42 1
amixer cset numid=49 1
amixer cset numid=23 1
接下來在設定一下錄音的音量

由于我們接的是mono,所以:
amixer cset numid=18 100 100
至此 錄音的通路就配置好了,由于硬體接的是Mono,所以不支持耳麥,需要找舊式的臺式機耳機測驗,這一點也是踩了坑才知道,
接著按上文的方法驗證錄音,錄音功能ok
結語
如果,此時錄音還有問題,就需要列印暫存器的值,量硬體波形等等方式,進一步排查,
如有不足之處歡迎您的批評指正!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/296632.html
標籤:其他
上一篇:uniapp實作語音播放功能
