环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產品分類

當前位置: 首頁 > 工業電子產品 > 其他電子產品 > 開發板,套件,編程器 > 開發板

類型分類:
科普知識
數據分類:
開發板

i.MX6 SGTL5000音頻驅動程序調試

發布日期:2022-10-14 點擊率:32

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

SGTL5000_BD

首先來講一下硬件。此硬件基于Freescale i.MX6Q SABRESD參考設計,音頻部分相對于參考設計作出的改動如下:

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

2. 參考設計使用WM8962作為Audio CODEC,此硬件使用SGTL5000。

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

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

/*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,

接下來講述漫長的音頻驅動程序調試過程,當然本文只能記錄要點部分。

1. 經過比較仔細的代碼閱讀,發現不同參考設計的主要區別就是1個.c文件和1個.h文件。例如,board-mx6q_sabresd.c和board-mx6q_sabresd.h就是與i.MX6Q SABRESD參考設計相關的文件,其中board-mx6q_sabresd.c定義了很多的結構體,外設初始化程序,外設注冊程序等,board-mx6q_sabresd.h定義了引腳復用功能。

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

定義了14個結構體

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個函數

mx6_sabrelite_sgtl5000_init,imx6q_init_audio

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

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

4. 將編譯得到的Kernel及Rootfs下載至eMMC中,板子可以正常啟動,但是未看到任何有關SGTL5000相關的Log,直覺告訴筆者,這一定是有問題的。經過了很長時間的代碼閱讀,終于發現在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. 更改過后的代碼啟動過程中可以打印出SGTL5000相關的Log,但是仍不能正常識別,報錯信息如下:

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代碼,發現是在注冊Regulator設備時出錯的。仔細查看硬件設計,發現SGTL5000的VDDD引腳電壓僅為0.8V,這與Datasheet中要求的1.1~2.0V是不符合的,也就是說代碼驅動程序想要將SGTL5000的內部LDO設置為1.2V,結果沒成功,所以返回了這樣的錯誤。回想當時做電路設計時,根據SGTL5000 Datasheet中的“This external VDDD power supply is required for new designs.”描述為將VDDD連接至了外部的LDO,而Freescale的設計中卻并沒有連接,那么問題應該就出在這里。將VDDD引腳的磁珠取下,再次啟動板子,終于看到了正確的打印信息:

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

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

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

aplay-l

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

8. 再次在網上尋找答案,得知ALSA這種結構默認不會在/dev下創建dsp,audio,mixer等常規設備,所以madplay無法正常工作。在編譯時,打開配置Kernel的選項,在

---Device drivers

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

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

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

ALSA-OSS

madplay終于可以工作了!

9. 以下是madplay正常工作的截圖,耳機中傳來的音質還是相當不錯的。

madplay

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

上一篇: Atheros SDK研究與使

推薦產品

更多
主站蜘蛛池模板: 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 软膜天花_软膜灯箱_首选乐创品牌_一站式天花软膜材料供应商! | 猎头招聘_深圳猎头公司_知名猎头公司 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | ORP控制器_ORP电极价格-上优泰百科| 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 氧化铁红厂家-淄博宗昂化工 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | 太平洋亲子网_健康育儿 品质生活| 期货软件-专业期货分析软件下载-云智赢 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 真空上料机(一种真空输送机)-百科 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 上海璟文空运首页_一级航空货运代理公司_机场快递当日达 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 西门子伺服控制器维修-伺服驱动放大器-828D数控机床维修-上海涌迪 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 14米地磅厂家价价格,150吨地磅厂家价格-百科 | 剪刃_纵剪机刀片_分条机刀片-南京雷德机械有限公司 |