1. 程式人生 > >imx6ul linux實現MQS播放音樂

imx6ul linux實現MQS播放音樂

1.配置核心

[email protected]:~/freescale/linux-imx$ make menuconfig

輸入/查詢關鍵字MQS,顯示如下:
x Symbol: SND_SOC_IMX_MQS [=y] x
x Type : tristate x
x Prompt: SoC Audio support for i.MX boards with MQS x
x Location: x
x -> Device Drivers x
x -> Sound card support (SOUND [=y]) x
x -> Advanced Linux Sound Architecture (SND [=y]) x
x -> ALSA for SoC audio support (SND_SOC [=y]) x
x (1) -> SoC Audio for Freescale CPUs x
x Defined at sound/soc/fsl/Kconfig:333 x
x Depends on: SOUND [=y] && !M68K && !UML && SND [=y] && SND_SOC [=y] && SND_IMX_SOC [=y] && OF [=y]x
x Selects: SND_SOC_IMX_PCM_DMA [=y] && SND_SOC_FSL_SAI [=y] && SND_SOC_FSL_MQS [=y] && SND_SOC_FSL_UTILS [=y]x
去相關目錄下檢視,已經開啟了.檢視.config內的配置。

[email protected]:~/freescale/linux-imx$ vi .config
CONFIG_SND_SOC_IMX_MQS=y
預設是已經開啟了mqs,不需要重新配置核心.

2.修改dts

imx6ul-14×14-ddr3-arm2.dts

456 pinctrl_mqs: mqsgrp {
457 fsl,pins = <
458 MX6UL_PAD_JTAG_TDI__MQS_LEFT 0x11088
459 MX6UL_PAD_JTAG_TDO__MQS_RIGHT 0x11088
460 >;
461 };

imx6ul-14×14-ddr3-arm2-mqs.dts

***********************************************************************************
/*
* Copyright (C) 2015 Freescale Semiconductor, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/

#include “imx6ul-14×14-ddr3-arm2.dts”
/ { sound-mqs { compatible = “fsl,imx6ul-ddr3-arm2-mqs”, “fsl,imx-audio-mqs”; model = “mqs-audio”; cpu-dai = <&sai1>; asrc-controller = <&asrc>; audio-codec = <&mqs>; }; }; &clks { assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>; assigned-clock-rates = <786432000>; }; &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 = “okay”; }; &mqs { pinctrl-names = “default”; pinctrl-0 = <&pinctrl_mqs>; clocks = <&clks IMX6UL_CLK_SAI1>; clock-names = “mclk”; status = “okay”; }; ***********************************************************************************

可見imx6ul-14×14-ddr3-arm2.dts裡面只是定義了相應的GPIO而已。
imx6ul-14×14-ddr3-arm2-mqs.dts裡引用了imx6ul-14×14-ddr3-arm2.dts並且增加了mqs的驅動引數。
也就是說imx6ul-14×14-ddr3-arm2.dts實際上沒有使用mqs,imx6ul-14×14-ddr3-arm2-mqs.dts使用了mqs。
在編譯生成的.dtb的時候可以看到imx6ul-14×14-ddr3-arm2-mqs.dtb要比imx6ul-14×14-ddr3-arm2.dts大一些。

通過檢視驅動,瞭解驅動是如何找到裝置引數的。驅動程式碼不是在driver下,而是sound/soc/目錄下。
可以看到驅動是查詢fsl,”fsl,imx-audio-mqs”節點

[email protected]-vBox:~/freescale/linux-imx$ grep -rn “compatible” sound/soc/ | grep “mqs”
sound/soc/codecs/fsl_mqs.c:208: { .compatible = “fsl,imx6sx-mqs”, },
sound/soc/fsl/imx-mqs.c:257: { .compatible = “fsl,imx-audio-mqs”, },

我們使用的是imx6ul-evk不能直接使用imx6ul-14×14-ddr3-arm2-mqs.dtb.每一個dts都代表著不同的硬體設計.
修改imx6ul-14×14-evk.dts,刪掉sound相關設定,evk原本事使用wm8960編解碼晶片的。
增加MQS GPIO設定

pinctrl_mqs: mqsgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO01__MQS_LEFT 0x11088
MX6UL_PAD_GPIO1_IO00__MQS_RIGHT 0x11088
>;
};

這裡我們更換了兩個pin,因為上面兩個pin已經接出來了,可以方便連線。

關於GPIO的定義可以在imx6ul-pinfunc.h檔案中搜索。

./imx6ul-pinfunc.h:86:#define MX6UL_PAD_GPIO1_IO01__MQS_LEFT 0x0060 0x02EC 0x0000 0x4 0x0
./imx6ul-pinfunc.h:77:#define MX6UL_PAD_GPIO1_IO00__MQS_RIGHT 0x005C 0x02E8 0x0000 0x4 0x0

重新拷貝一份mqs.dts
cp imx6ul-14×14-ddr3-arm2-mqs.dts imx6ul-14×14-evk-mqs.dts
修改 imx6ul-14×14-evk-mqs.dts這樣編譯出來的才是我們evk能用的dtb.
#include “imx6ul-14×14-evk.dts”

3.編譯

我們應該是要編譯imx6ul-14×14-evk-mqs.dts
需要增加編譯項,在arch/arm/boot/dts/Makefile裡面
imx6ul-14×14-evk.dtb \
+ imx6ul-14×14-evk-mqs.dtb \
只需要編譯裝置樹

[email protected]-vBox:~/freescale/linux-imx$ make dtbs
DTC arch/arm/boot/dts/imx6ul-14×14-evk-mqs.dtb

因為沒有修改核心,所以可以不需要編譯,如果有修改就要編譯一下make -j8

將核心和dtb拷貝出來放到tftp的共享目錄下。

wujun@wj-vBox:~/freescale/linux-imx$ cp arch/arm/boot/zImage ~/share-doc/
wujun@wj-vBox:~/freescale/linux-imx$ cp arch/arm/boot/dts/imx6ul-14×14-ddr3-arm2.dtb ~/share-doc/

4.更新系統

重啟板卡進入uboot網口接到PC.
開啟tftp設定檔案目錄(核心和dtb的存放目錄)
uboot 設定IP,並且選擇使用tf卡里面的檔案系統

=> setenv ipaddr 192.168.56.6;setenv serverip 192.168.56.5;
=> mmc dev 1;setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw;
switch to partitions #0, OK
mmc1 is current device
=> tftp 0x81000000 zImage;tftp 0x81A00000 imx6ul-14×14-evk-mqs.dtb;bootz 0x810000000x81A00000;

核心啟動後檢視核心log

root@imx6ulevk:~# dmesg | grep mqs
[ 2.691214] imx-mqs sound-mqs: fsl-mqs-dai <-> 2028000.sai mapping ok
[ 2.698021] imx-mqs sound-mqs: snd-soc-dummy-dai <-> 2034000.asrc mapping ok
[ 2.704218] imx-mqs sound-mqs: fsl-mqs-dai <-> 2028000.sai mapping ok
[ 2.858716] #0: mqs-audio

裝置已經有了實際上是在/dev/snd下,下面就是需要測試裝置是否正常.

5.安裝播放器

EVK上編譯

[email protected]-vBox:~/wavplay$ gcc wavplay.c -o wav-player /usr/lib/libasound.so
[email protected]-vBox:~/wavplay$ ./wav-player wav-test.wav

也可以寫個簡單的Makefile
wav-test.wav是隨便找的wav檔案。

如果正常,在GPIO1_IO01和GPIO1_IO00就可以有音訊播放出來,加上一個喇叭或者耳機就能聽到聲音。
聲音不大,沒有找到方法調節音量,在產品上是要加功放的。這種方式播放的音樂實際上是一種PWM波,放大了也沒有意義。需要轉換成模擬訊號才能放大。
至此整個過程完畢。在整個過程中實際上並不是一帆風順,有幾個小坑。
(1)修改GPIO的時候出現了GPIO衝突,這個可以再dts檔案裡搜一下GPIO1_IO01就能看到了。

[email protected]:~# dmesg | grep mqs
[ 2.671735] imx6ul-pinctrl 20e0000.iomuxc: pin MX6UL_PAD_GPIO1_IO01 already requested by 2040000.tsc; cannot claim for 2000000.aips-bus:mqs
[ 2.683154] imx6ul-pinctrl 20e0000.iomuxc: pin-24 (2000000.aips-bus:mqs) status -22
[ 2.689550] imx6ul-pinctrl 20e0000.iomuxc: could not request pin 24 (MX6UL_PAD_GPIO1_IO01) from group mqsgrp on device 20e0000.iomuxc

(2)一開始找到的播放器是wavplay,下載安裝好後不能使用.
wavplay預設使用/dev/dsp播放。可以通過命令修改裝置,可是alsa下實際上使用了多個裝置很難指定一個裝置去播放.
當然不一定對,只是沒有再深挖。

相關推薦

imx6ul linux實現MQS播放音樂

1.配置核心 [email protected]:~/freescale/linux-imx$ make menuconfig 輸入/查詢關鍵字MQS,顯示如下: x Symbol: SND_SOC_IMX_MQS [=y] x x Type

手機影音第十五天,利用service實現後臺播放音樂,在通知欄顯示當前音樂信息等

手機影音 第十五天 利用service實現後臺播放音樂 在通知欄顯示當前音樂信息。 代碼已經托管到碼雲上,有興趣的小夥伴可以下載看看 https://git.oschina.net/joy_yuan/MobilePlayer 先來一張目前的音樂播放器的效果圖,當播

Android實現線上播放音樂

package com.wwj.download;import java.io.File;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import android.app.Activity;import andr

Android使用本地Service實現後臺播放音樂

配置檔案 <service android:name=".MyService"></service> 佈局 <Button android:id="

使用 AVAudioSession 實現後臺播放音樂

1. 前言   AVAudioSession是一個單例,無需例項化即可直接使用。AVAudioSession在各種音訊環境中起著非常重要的作用 針對不同的音訊應用場景,需要設定不同的音訊會

linux 命令列播放音樂

linux下用命令列播放音樂 (1)開啟terminal  ,快捷鍵是CTRL+ALT+T (2)sudo apt-get install sox (3)sudo apt-get install sox libsox-fmt-all (4)播放檔案用play 檔名 eg:p

4個小時實現一個HTML5音樂播放

同時 status parseint [0 ads 發布 大致 了解 mps 技術點:ES6+Webpack+HTML5 Audio+Sass 這裏,我們將一步步的學到如何從零去實現一個H5音樂播放器。 首先來看一下最終的實現效果:Demo鏈接 接下來就步入正題: 要

Linux終端命令行下播放音樂的命令

足夠 mp3 管理 關於 令行 ctrl+alt fmt 終端命令 alt+ 現在的 Linux 桌面已經發展的很好了,在桌面下播放音樂操作起來也很簡單。那麽我們還記得在桌面不是那麽好的時候我們是怎麽播放音樂的麽?哎,我是想不起來了,實在是太難了。不過現在我們可以先安裝一個

使用Service組件實現簡單的音樂播放器功能 --Android基礎

area direct start 獲取 點擊 btn src c函數 extern 1、本例利用Service實現簡單的音樂播放功能,下面是效果圖。(點擊開始播放開啟服務,音樂播放,點擊“停止播放”關閉服務,音樂停止播放。) 2、核心代碼:

Python解密網易雲音樂.ncm檔案,將.ncm檔案轉換為.mp3檔案,實現隨處播放(另附C++已編譯轉換器)

網易雲音樂把.mp3音樂檔案加密為.ncm檔案,導致不能將下載好的音樂複製到其它裝置或使用非網易雲音樂播放器播放,該程式可將.ncm檔案逆向解密為.mp3檔案並保留最高音質。 另有C++已編譯.exe轉換器,將.ncm檔案拖到.exe上直接執行轉換,生成.mp3檔案在.ncm檔案相同路徑。點選下

音樂播放器——實現後臺播放、搖搖切歌等功能

前言 首先宣告,小白一隻,android完全自學,若程式碼中有不妥或更簡便的方法求指教(大佬帶帶我)。。。 APP 歡迎介面 主介面 音樂介面 實現功能 1.遍歷本地音樂 2.音樂後臺播放 3.音樂封面之黑礁唱

Android初級,MediaPlayer播放音樂,進度條滑動及唱片轉動功能實現

最近在做仿網易雲音樂播放器的實訓專案,學習完後寫此部落格,一方面鞏固自己理解,一方面方便各位瀏覽。 讀完本文你將瞭解到: 如何利用MediaPlayer播放音樂 如何設定音樂進度條並實現自動滾動及手動定位 如何實現唱片轉動功能 1.效果圖

仿微信搖一搖實現播放音樂

搖一搖功能是使用手機加速度感測器來判斷是否處於搖一搖狀態,從而進行相應的操作 <1>將音樂檔案放在res/raw下,如果沒有raw,建立一個 <2>佈局檔案 <?xml version="1.0" encoding="ut

linux支援qq手機音樂播放

Gmediarender 是一個模擬upnp render的linux下的軟體,他可以接收qq音樂發來的資料並在電腦上播放出來。下面介紹一下方法: 網站http://gmrender.nongnu.org/下載gmediarender   編譯,編譯過程回出現 gcc  -

用HTML5實現簡易的音樂播放

本文主要使用HTML5結合Jquery做一個簡易版的音樂播放器。 程式碼如下: <!DOCTYPE HTML> <html><head><title>三生草</title><script language

案例:用vue開發網易雲音樂(已實現線上播放和下載)

效果如圖: 完整程式碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content

Linux終端命令列下播放音樂--sox

1、SOX,支援很多格式的音訊檔案,如 WAV,MP3,MPG,OGG,FLAC 等等。滿足我們日常使用是足夠足2、安裝:    sudo apt-get install sox3、詢問你是否繼續的時候

[Linux C]百度音樂API實現線上搜歌

最近在做科大訊飛的語音解析模組,主要用於語音控制播放。採集語音輸入後,送給科大訊飛語音的SDK,雲伺服器返回JSON的資料,再解析拿到URL地址,最後送給播放器去播放。不知是否是尚未上線的product,申請的appid,解析JSON後拿到的URL地址,歌曲播放

linux播放音樂,錄音命令-----arecord,aplay

用了這麼長時間的Linux系統,是不是還沒有用Linux聽過音樂,一般使用Linux系統的人都是純屬辦公需要或者自己對軟體開發玩的,很少是做日常生活電腦使用。 在linux下也同樣有播放音樂的軟體,包括桌面式的音樂播放軟體,這些桌面軟體在Linux社群都能找到,現在要說的是

Android之MediaPlayer播放音樂實現進度條例項

首先,說明我們是從sd卡里讀檔案,來播放檔案!! 1、效果圖: 提前工作,往sd卡里放音樂檔案,如圖: 2、佈局檔案main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns