转载请注明出处:https://blog.csdn.net/luomin5417/article/details/80731790
平台:imx6q
内核版本: linux 3.14
1. 硬件连接
![](https://i-blog.csdnimg.cn/blog_migrate/338cfed5694e44c664a7a336f2a1553f.png)
2. 设备树修改
根据硬件连接关系,编辑内核设备树文件。
2.1 音频解码器配置
添加alc562x音频解码器描述,因为是挂在i2c-2下面所以定义在i2c3总线下(手册中从i2c设备0-2,设备树中i2c是从1-3)。
图2.1 解码器配置
2.2 声卡配置
![](https://i-blog.csdnimg.cn/blog_migrate/bfe76ec26ca65ba6cb1171437effb761.png)
2.3 设置音频接口i2s总线
ssi主要负责音频数据的收发,具体的模块功能可以参考imx6q的手册,该处需要注意将cpu设置为slave模式,芯片设置为master模式,反过来设置,会导致调试时多花很多时间,因内核中fsl提供的驱动,貌似只实现了slave模式,之前在调试时在这个地方也花了很多时间。
图 2.3 设置i2s总线音频接口
2.4 管脚配置
Audmux主要实现了外部设备与soc上的ssi模块的连接,设置管教时即配置audmux的连接管脚即可。
图 2-4 AUDMUX音频接口
设备树中的管脚配置
图 2-5 管脚配置
3. 驱动代码修改
3.1 ALC5621解码器驱动
alc5621驱动编写的文件:alc5623.c和alc5623.h
3.2 声卡驱动
声卡驱动编写的文件为:imx-alc562x.c和imx-audmux.h
4. i2c控制接口调试
i2c接口的调试可以通过逻辑分析仪抓取接口时序进行分析。在调试驱动时刚开始发现i2c总线没有响应,alc5621芯片控制接口没有工作,导致调试了一天,最后发现是alc5621芯片的时钟没有给。
图 4.1 i2c接口时序
5. i2s音频接口调试
i2s总线也可以通过逻辑分析仪进行接口调试分析,在调试i2s数据总线时也是发现没有数据输入和输出,主要集中要调试的地方是解决:
(1) 确定alc5621芯片和soc之间的主从关系
(2) 打开alc5621内部电源开关
完成这两方面的调试基本上是能够进行数据收发了。
6. 音频录播配置
(1) 模块加载:
insmod imx-ssi.ko
insmod imx6q-ssi.ko
insmod alc5623.ko
insmod imx-alc562x.ko
(2) 参数设置:
耳机播放:
设置声音
amixer cset numid=3,iface=MIXER,name='Headphone Playback Volume' 31
amixer cset numid=7,iface=MIXER,name='PCM Playback Volume' 31
设置通道
amixer cset numid=53,iface=MIXER,name='HP Mix DAC2HP PlaybackSwitch' on
图 6.1 通道配置
设置声道:
amixer cset numid=56,iface=MIXER,name='Left Headphone Mux' 1
amixer cset numid=55,iface=MIXER,name='Right Headphone Mux' 1
设置捕获声音:
amixer cset numid=12,iface=MIXER,name='Rec Capture Volume' 31
设置MIC1捕获声音:
amixer cset numid=10,iface=MIXER,name='Mic1 Capture Volume' 31
打开声音捕获开关:
amixer cset numid=26,iface=MIXER,name='Left Capture Mix Mic1 Capture Switch' on
amixer cset numid=17,iface=MIXER,name='Right Capture Mix Mic1Capture Switch' on
录音命令:
arecord-d 10 -f cd -t wav cap.wav图 6.2 录音