1. 環境準備 平臺: HD6ULL-IOT開發板 要求: 外接一個WM8960模塊。要求能正常播放音頻文件。 2. 原理圖及相關資料將模塊飛線到底板J17上,接法如下;且模塊1腳 接了J17的1腳(3.3V); 然后模塊的3腳(GND)接的J17的29腳地。 WM8960資料: https://www.waveshare.net/wiki/WM8960_Audio_Board 3. 內核以及設備樹調試內核需要勾選WM8960相關配置,可以make menuconfig后/搜索8960然后勾上就行。 設備樹注意三點: ①. 客戶飛線WM8960是掛載到i2c1上的。 sound {compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";model = "wm8960-audio";cpu-dai = <&sai2>;audio-codec = <&codec>;asrc-controller = <&asrc>;codec-master;gpr = <&gpr>;/*not support* hp-det = ②. 時鐘線(SCL)和數據線(SDA)是飛線到J17的3,4腳(UART6_TXD,UART6_RXD),對應的CSI_MCLK與CSI_PIXCLK,我們需要將其復用成I2C1_SCL,I2C1_SDA功能。(需要查詢對應的引腳功能列表和datasheet) pinctrl_i2c1: i2c1grp {fsl,pins = ③. 由于底板上有一個耳機接口是從核心板直接引出的,我們需要禁掉他。 sound-mqs {compatible = "fsl,imx-audio-mqs";model = "mqs-audio";cpu-dai = <&sai1>;asrc-controller = <&asrc>;audio-codec = <&mqs>;status = "disabled";};&sai1 {assigned-clocks = <&clks IMX6UL_CLK_SAI1_SEL>,<&clks IMX6UL_CLK_SAI1>;assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;assigned-clock-rates = <0>, <24576000>;status = "disabled";};&mqs {pinctrl-names = "default";pinctrl-0 = <&pinctrl_mqs>;clocks = <&clks IMX6UL_CLK_SAI1>;clock-names = "mclk";status = "disabled";};重新編譯后替換設備樹,然后cd /home/audio ./aplay 1.wav。插上耳機或者揚聲器即有聲音。 在調試過程中,可通過i2cdetect -y -a 0 (此處wm8960掛載在i2c1)檢查音頻設備是否掛載到i2c1上,或者dmesg | grep wm8960 檢查驅動是否加載成功。 4. 錄音測試首先需要有arecord這個工具; 源碼下載網址:https://www.alsa-project.org/wiki/Download#alsa-lib 編譯參考網址: https://blog.csdn.net/gjy938815/article/details/11809269 編譯好后:alsa-utils-1.2.9\aplay 這個目錄下會生成aplay(145M),然后改名為arecord即可。 錄音播放測試: 將arecord拷貝到U盤內,依次執行以下指令:cp/mnt/sda1/arecord /home/demo/chmoda+x /home/demo/arecordcd/home/audio/./amixercset numid=1 60 錄音功能需設置錄音控件的參數./amixercset numid=36 240 錄音功能需設置錄音控件的參數./amixercset numid=41 1 將麥克風輸出信號同時記錄在左右聲道cd/home/demo執行下面這個指令時需要對著WM8960說話,會錄音到/tmp/t.wav文件中。錄音時間為10s./arecord-f cd -d 10 /tmp/t.wav播放錄音文件(最好用耳機聽聲音)cd/home/audio/./aplay/tmp/t.wav5. 音量調節控制耳機音量大小:numid=11,iface=MIXER,name='Headphone Playback Volume'./amixer cset numid=11 80 (范圍0~127, 80合適)控制喇叭音量大小:numid=13,iface=MIXER,name='Speaker Playback Volume' 這個配置./amixer cset numid=13 100 (范圍0~127,但一般100聲音就合適了)錄音時配置:numid=36,iface=MIXER,name='ADC PCM Capture Volume'./amixer cset numid=36 190 (錄音范圍0~255,一般190左右合適,值過大雜聲會有點大)numid=1,iface=MIXER,name='Capture Volume' (設置捕獲的音量)./amixer cset numid=1 30 (范圍0~63 ,可以選擇30)至此,我們完成移植、測試的全部工作。如您在開發過程中遇到問題,歡迎技術交流。 |