<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產(chǎn)品分類

      當(dāng)前位置: 首頁 > 工業(yè)電子產(chǎn)品 > 其他電子產(chǎn)品 > 開發(fā)板,套件,編程器 > 開發(fā)板

      類型分類:
      科普知識(shí)
      數(shù)據(jù)分類:
      開發(fā)板

      i.MX6 SGTL5000音頻驅(qū)動(dòng)程序調(diào)試

      發(fā)布日期:2022-10-14 點(diǎn)擊率:33

      SGTL5000是Freescale推出的一款包含耳機(jī)的低功率立體聲編解碼器,可為需要線路輸入、麥克風(fēng)輸入、線路輸出、耳機(jī)輸出和數(shù)字I/O的便攜式產(chǎn)品提供全面的音頻解決方案。Freescale官方的i.MX6Q SABRESD參考設(shè)計(jì)使用的Audio CODEC型號(hào)是Wolfson公司的WM8962,由于WM8962的引腳間距特別小,而且球也很小,所以不得不將其更換為SGTL5000的設(shè)計(jì),筆者在調(diào)試SGTL5000的設(shè)備驅(qū)動(dòng)程序中遇到了不少問題,在此分享給讀者。

      SGTL5000_BD

      首先來講一下硬件。此硬件基于Freescale i.MX6Q SABRESD參考設(shè)計(jì),音頻部分相對(duì)于參考設(shè)計(jì)作出的改動(dòng)如下:

      1. 參考設(shè)計(jì)CSI0部分引腳用于連接Audio CODEC,I2C1,UART1(調(diào)試接口),此硬件中用于連接視頻解碼器。

      2. 參考設(shè)計(jì)使用WM8962作為Audio CODEC,此硬件使用SGTL5000。

      不用多說,熟悉的讀者一定知道需要更改I2S,I2C1及UART1接口的引腳復(fù)用定義。在經(jīng)過了一番折騰,筆者成功地實(shí)現(xiàn)了I2S,I2C1及UART1的引腳功能,主要更改的文件就是

      linux-3.0.35/arch/arm/mach-mx6/board-mx6q_sabresd.h,變更過后的部分文件內(nèi)容如下:

      /*Audio Codec*/

      MX6Q_PAD_DISP0_DAT20__AUDMUX_AUD4_TXC,

      MX6Q_PAD_DISP0_DAT21__AUDMUX_AUD4_TXD,

      MX6Q_PAD_DISP0_DAT22__AUDMUX_AUD4_TXFS,

      MX6Q_PAD_DISP0_DAT23__AUDMUX_AUD4_RXD,

      /* I2C1, WM8958 */

      MX6Q_PAD_EIM_D21__I2C1_SCL,

      MX6Q_PAD_EIM_D28__I2C1_SDA,

      /* UART1*/

      MX6Q_PAD_SD3_DAT7__UART1_TXD,

      MX6Q_PAD_SD3_DAT6__UART1_RXD,

      接下來講述漫長(zhǎng)的音頻驅(qū)動(dòng)程序調(diào)試過程,當(dāng)然本文只能記錄要點(diǎn)部分。

      1. 經(jīng)過比較仔細(xì)的代碼閱讀,發(fā)現(xiàn)不同參考設(shè)計(jì)的主要區(qū)別就是1個(gè).c文件和1個(gè).h文件。例如,board-mx6q_sabresd.c和board-mx6q_sabresd.h就是與i.MX6Q SABRESD參考設(shè)計(jì)相關(guān)的文件,其中board-mx6q_sabresd.c定義了很多的結(jié)構(gòu)體,外設(shè)初始化程序,外設(shè)注冊(cè)程序等,board-mx6q_sabresd.h定義了引腳復(fù)用功能。

      2. 無意間發(fā)現(xiàn)i.MX6Q SABRELITE中使用的就是SGTL5000作為音頻CODEC,其相關(guān)的代碼寫在了board-mx6q_sabrelite.c中。對(duì)于筆者這種不熟悉驅(qū)動(dòng)程序的工程師來說,有現(xiàn)成的代碼當(dāng)然要用。仔細(xì)研讀board-mx6q_sabrelite.c代碼,其中與SGTL5000部分相關(guān)的代碼主要做了以下事情:

      定義了14個(gè)結(jié)構(gòu)體

      mx6_sabrelite_audio_data,mx6_sabrelite_audio_device

      sgtl5000_sabrelite_consumer_vdda,sgtl5000_sabrelite_vdda_reg_initdata,sgtl5000_sabrelite_vdda_reg_config,sgtl5000_sabrelite_vdda_reg_devices

      sgtl5000_sabrelite_consumer_vddio,sgtl5000_sabrelite_vddio_reg_initdata,sgtl5000_sabrelite_vddio_reg_config,sgtl5000_sabrelite_vddio_reg_devices

      sgtl5000_sabrelite_consumer_vddd,sgtl5000_sabrelite_vddd_reg_initdata,sgtl5000_sabrelite_vddd_reg_config,sgtl5000_sabrelite_vddd_reg_devices

      定義了2個(gè)函數(shù)

      mx6_sabrelite_sgtl5000_init,imx6q_init_audio

      仿照board-mx6q_sabrelite.c,筆者將這些結(jié)構(gòu)體及函數(shù)復(fù)制到board-mx6q_sabresd.c中。更改mx6_sabrelite_audio_data中的Audio端口為4,并將SGTL5000的I2C地址填寫到mxc_i2c0_board_info[] __initdata結(jié)構(gòu)體中。

      3. 編譯過程中出現(xiàn)了一些錯(cuò)誤,不過都是很容易解決的,在此略過。

      4. 將編譯得到的Kernel及Rootfs下載至eMMC中,板子可以正常啟動(dòng),但是未看到任何有關(guān)SGTL5000相關(guān)的Log,直覺告訴筆者,這一定是有問題的。經(jīng)過了很長(zhǎng)時(shí)間的代碼閱讀,終于發(fā)現(xiàn)在linux-3.0.35/sound/soc/imx/imx-sgtl5000.c

      的代碼中做了限制,筆者記不清原來的代碼是怎樣的,只記得更改后的代碼如下:

      if ( machine_is_mx6q_sabrelite() || machine_is_mx6q_sabresd())
      imx_sgtl5000_dai[0].codec_name = "sgtl5000.0-000a";
      else
      imx_sgtl5000_dai[0].codec_name = "sgtl5000.1-000a";

      按照原來的代碼,imx_sgtl5000_dai[0].codec_name為sgtl5000.1-000a,這與board-mx6q_sabresd.c中的0-000a是不符的,所以一定行不通。

      5. 更改過后的代碼啟動(dòng)過程中可以打印出SGTL5000相關(guān)的Log,但是仍不能正常識(shí)別,報(bào)錯(cuò)信息如下:

      sgtl5000 0-000a: Device with ID register 0 is not a sgtl5000

      sgtl5000 0-000a: asoc: failed to probe CODEC sgtl5000.0-000a: –19

      asoc: failed to instantiate card sgtl5000-audio: –1

      查看imx-sgtl5000.c代碼,發(fā)現(xiàn)是在注冊(cè)Regulator設(shè)備時(shí)出錯(cuò)的。仔細(xì)查看硬件設(shè)計(jì),發(fā)現(xiàn)SGTL5000的VDDD引腳電壓僅為0.8V,這與Datasheet中要求的1.1~2.0V是不符合的,也就是說代碼驅(qū)動(dòng)程序想要將SGTL5000的內(nèi)部LDO設(shè)置為1.2V,結(jié)果沒成功,所以返回了這樣的錯(cuò)誤。回想當(dāng)時(shí)做電路設(shè)計(jì)時(shí),根據(jù)SGTL5000 Datasheet中的“This external VDDD power supply is required for new designs.”描述為將VDDD連接至了外部的LDO,而Freescale的設(shè)計(jì)中卻并沒有連接,那么問題應(yīng)該就出在這里。將VDDD引腳的磁珠取下,再次啟動(dòng)板子,終于看到了正確的打印信息:

      sgtl5000 0-000a: sgtl5000 revision 17

      asoc: sgtl5000 <-> imx-ssi.1 mapping ok

      asoc: mxc-hdmi-soc <-> imx-hdmi-soc-dai.0 mapping ok

      ALSA device list:

      #0: sgtl5000-audio

      #1: imx-hdmi-soc

      其實(shí)到這一步,筆者大概經(jīng)歷了3天的時(shí)間,總算是有了比較大的突破,筆者相信很多讀者也會(huì)遇到這樣的問題。

      6. 然而,事情并沒有這樣完全OK。進(jìn)入系統(tǒng)后,根據(jù)Freescale的官方文檔,運(yùn)行aplay命令,竟然提示找不到這個(gè)命令!在網(wǎng)上檢索了一段時(shí)間,才終于得知,默認(rèn)的編譯選項(xiàng)沒有選擇alsa-lib及alsa-utils,于是運(yùn)行./ltib –m config,在Packages List中選擇了alsa-lib及alsa-utils。再次編譯的Kernel及Roofts下載到板子中后,終于有了aplay,并且可以通過aplay -l命令看到當(dāng)前的聲卡設(shè)備,如下:

      aplay-l

      7. 此時(shí)使用aplay播放mp3,發(fā)現(xiàn)耳機(jī)中終于有聲音了!哦,是噪音!通過網(wǎng)上搜索,得知aplay無法解碼mp3,所以不得不使用madplay軟件。madplay是筆者之前在OpenWRT平臺(tái)上使用的音樂播放軟件,而且這款軟件剛好集成在LTIB中。再次運(yùn)行./ltib –m config,在Packages List中選擇了madplay,結(jié)果再次編譯的Kernel及Roofts下載到板子中后仍然存在問題,提示找不到/dev/dsp設(shè)備,手動(dòng)ls /dev目錄,確實(shí)沒有dsp設(shè)備,看來這個(gè)問題也需要解決。

      8. 再次在網(wǎng)上尋找答案,得知ALSA這種結(jié)構(gòu)默認(rèn)不會(huì)在/dev下創(chuàng)建dsp,audio,mixer等常規(guī)設(shè)備,所以madplay無法正常工作。在編譯時(shí),打開配置Kernel的選項(xiàng),在

      ---Device drivers

      --<*>Sound card support---->

      --<*>Advanced Linux Sound Architecture--->

      中選擇OSS Mixer API及OSS PCM (digital audio) API,如下圖

      ALSA-OSS

      madplay終于可以工作了!

      9. 以下是madplay正常工作的截圖,耳機(jī)中傳來的音質(zhì)還是相當(dāng)不錯(cuò)的。

      madplay

      下一篇: PLC、DCS、FCS三大控

      上一篇: Atheros SDK研究與使

      推薦產(chǎn)品

      更多
      主站蜘蛛池模板: 国产成人综合日韩精品婷婷九月 | 日韩无码系列综合区| 亚洲国产美国国产综合一区二区| 亚洲乱码中文字幕综合| 亚洲伊人tv综合网色| 色综合久久加勒比高清88| 激情97综合亚洲色婷婷五| 香蕉蕉亚亚洲aav综合| 亚洲综合欧美色五月俺也去| 一本大道久久a久久综合| 亚洲婷婷综合色高清在线| 亚洲综合激情另类专区| 亚洲狠狠成人综合网| 狠狠狠色丁香婷婷综合久久五月| 亚洲heyzo专区无码综合| 亚洲综合精品香蕉久久网| 色悠久久久久综合网香蕉| 色综合久久中文字幕无码| 精品国产国产综合精品 | 国产精品激情综合久久| 亚洲av永久中文无码精品综合| 国产亚洲综合一区柠檬导航| 色综合天天综合网看在线影院| 综合五月激情二区视频| 色婷婷天天综合在线| 久久久久综合一本久道| 亚洲综合网站色欲色欲| 伊人久久综合无码成人网| 伊人亚洲综合青草青草久热 | 色综合色综合色综合色欲| 久久综合久久综合久久综合| 狠狠综合久久久久综合网| 国产成人亚综合91精品首页| 97se亚洲国产综合自在线| 亚洲综合丁香婷婷六月香| 91精品国产综合久久香蕉 | 国产激情电影综合在线看 | 伊人色综合久久天天| 色天天综合久久久久综合片| 成人伊人青草久久综合网破解版| 亚洲色欲啪啪久久WWW综合网|