首页 > 编程知识 正文

解码器i2s接口,music

时间:2023-05-05 16:43:59 阅读:165800 作者:3048

一、I2S引脚介绍

I2S同时进行全双工,也就是收发。 重要的三个时钟信号(主时钟MCLK、帧同步时钟左右切换时钟WS、数据时钟BCLK )、一个数据接收SD_RX和一个数据发送SD_TX。 可以设定主从模式,如果主站是主站模式,则主站参数中使用的所有时钟、ad芯片将变为从站模式。 如果老板是从机模式,就给ad芯片外加27mhz水晶振动,产生时钟。 接收和发送可以共享时钟,只需要连接一个ad芯片。 数据的精度可以用16/32/24位表示。

MCLK=256 * WS

BCLK=WS *左右通道数*位宽例如; 2 * 16 * WS

WS=1 /采样频率

单通道、左右通道、图像、16/24/位数据

hisi的多信道图像可以进行多重输入,ktv可以通过多个麦克风来表示一个意思。 不是左右频道的意思,所以请不要混淆。

声音是模拟信号,以ad芯片数字化输入的模拟量,基于设定的采样频率采样以捕获电压信号,转换为数字信号,最终存储、编码、解码文件,从数字信号模拟

一、hisi的音频采集播放原理图

ad是音频芯片,i2s连接到hisi主机,hisi的采集和输出是ai和ao设备,通过内部dma存储数据。 我们没必要在意。

二、hisi的I2S文档介绍

在介绍之前,我先介绍一下hisi文档的音频说明和多媒体开发文档

2、编解码处理器指导原则介绍

根据文档,仅使用一个ad芯片进行交互时的引脚设计。 ad芯片作为主模式外置晶振,芯片可以输出时钟。 我选择了ad芯片作为从模式。 hisi在主模式下,向ad芯片提供时钟,输入输出公共时钟。 如下图,WS_TX,BCLK_TX,MCLK是时钟,SD_TX,SD_RX是数据

三、hisi的I2S引脚和tl芯片引脚介绍**

I2S有四个重要的脚

如原理图所示,我连接的音频芯片是TL3101,主机是耳机的3520/3521DV400,hisi的主机有两个输入、两个输出。 根据文档的说明,规定两组混合使用。 我在使用I2S2和I2S1。

作为发送器,I2S2提供主时钟MCLK、同步时钟、BCLK、WS、输出SD_TX。 I2S1仅提供接收SD_RX,并且同步时钟与I2S2共享。 I2C组用于控制芯片和设置参数。

hisi主控引脚图,注意i2s1的ws,原理图是没用到的。

音频芯片为TL3101,引脚图如下。

mini head是标准的3mm接口,插入耳机,如下图所示进行连接。

四、驱动调试

1、准备ko驱动程序文件。 根据hisi文档的描述,demo使用的是tl3101芯片,连接的也是这个芯片,所以不是新写驱动程序,对于其他芯片,必须自己写驱动程序调试内核。 对于没有进行过驱动程序开发的同志,这很困难。 古装知道驱动程序和系统,所以很简单,直接在hisi的sdk上下tl3101

根据驱动程序源,芯片默认为从模式、48k采样率、16位和i2s。 这很重要。 以下设定时钟时,可以知道设定了多少。 启动后立即调试时,按默认设定

1、根据多媒体文档调试指南。

*i2s的时序图如下所示。 WS为左右通道切换时钟,fs为采样率,1/fs为WS但为微时钟,bclk为数据时钟,sd的时钟,bclk=fs *位宽*通道数。 我们在左右通道上选择了16位的位宽,所以是fs * 2 16。 其主时钟mclk为256 * fs。

2、根据原理图,首先,将hisi的引脚复用到I2S和i2c。 找到hisi文档Hi3520DV400_PINOUT_CN.xlsx

3、复用I2S和I2C_引脚,

将以下命令添加到load自动启动脚本中:

himm0x120F00AC0x2; # gpio9_ 3i2s1_ bclk _ rxi2s2_ mclkhimm0x 120 f 00 b 80x 1; # gpio9_ 6i2s2_ bclk _ rx himm0x 120 f 00 bc0x 1; # gpio9_ 7i2s2_ ws _ rx himm0x 120 f 00 c 00 x 1; # gpio5_ 4i2s2_ SD _ rx himm0x 120 f 00 b 40 x 1; # gpio9_ 5i2s1_ SD _ rx himm0x 120 f 00 e 00 x 1; # gpio 12 _ 6i2c _ sda himm0x 120 f 00 e 40 x 1; #GPIO12_7 I2C_SCL 4、负载驱动程序、

上面的针脚设置好后,加载ko文件以屏蔽hisi的默认加载nv6134。 负载音频ko必须位于hisi系统system驱动器之后。 否则,打开ai,ao失败。

insert _ audio ({ insmod TLV _ 320 ai C3 } )

1.koinsmod hi3521d_aio.koinsmod hi3521d_ai.koinsmod hi3521d_ao.koinsmod hi3521d_aenc.koinsmod hi3521d_adec.ko}remove_audio(){rmmod hi3521d_adecrmmod hi3521d_aencrmmod hi3521d_aormmod hi3521d_airmmod hi3521d_aiormmod tlv_320aic31}

启动系统后,启动时会看到ai,ao,之类的,tl32031驱动加载成功的信息,看看是否有这个设备,ls /dev 可以看到有tlv320aic31这个设备,没有的话,就是驱动未加载成功,i2c有问题或,编译的ko有问题,看调试打印是什么情况,确定是否i2c没有通,还是ko的问题,和i2s没关,这一步,还没到i2s。

4、时钟设置

//rg8himm 0x13140140 0x003254E7; #I2S2MCLK 12.288MHZ himm 0x13140144 0x00000133; #I2S2CLK 12.288/4MHZ//rg1himm 0x13140108 0x003254E7; #I2S1MCLK 12.288MHZhimm 0x1314010C 0x00000133; #I2S1CLK 12.288/4MHZ

****设置时钟,这里去设置时钟,tl芯片驱动源码,默认是48khz采样率,所以主时钟mclk是256* bck(48k)= 12MHZ,上图hisi文档介绍了,48k采样率时,输出主时钟是12.288mhz。

这里根据实际操作感觉不需,hisi加载ai,ao,驱动时,自动设置了时钟,量了主时钟是12.2mhz。
后面启动应用层demo后,启动ai和ao设备,设置是主模式,48k采样率,后面量时钟,bclk是1.5mhz,wclk是48khz,这里很重要,可以确定我们的管脚设置没有错,应用设置也没有错,否则是不会有数据的,调试驱动时,一定要确保时钟是正确的,用示波器量时钟,再调试应用。****

应用层设置,采集音频,在下章节讲。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。