您好,欢迎访问一九零五行业门户网

MTK8382 HDMI SII9024 I2S声音是噪音

mtk8382有两路i2s。 这个问题首先查看配置的问题 : 我看mtk的资料,i2s其实是用gpio来模拟,i2s是一个虚拟的概念,不像gpio是实实在在的物理形态。 一个gpio口既可以配置成i2s0,也是配置成i2s1。在dws中有三种选择,经过验证,mtk的的faq上面的写法好像有
mtk8382有两路i2s。
这个问题首先查看配置的问题 :
我看mtk的资料,i2s其实是用gpio来模拟,i2s是一个虚拟的概念,不像gpio是实实在在的物理形态。
一个gpio口既可以配置成i2s0,也是配置成i2s1。在dws中有三种选择,经过验证,mtk的的faq上面的写法好像有点问题。
以下是faq:
[faq11159][audio drv]mt6572/82/89/92等系列
iis使用说明
[description]
mt6572/82/89/92等系列iis使用灵活性较大,可配置的项很多,现对其使用做一个概括性说明,在使用过程中遇到一些
细节的问题,还请走e-service flow
[solution]
1. mt6572/82/89/92等系列audio digital mux框图如下:
其中有两路双向iis可供客制化使用,分别是iis0和iis1,其中iis0与pmic输出是同一路,我司原始设计中iis1供fm
digital in.
其中黄色框里标注的是iis对应的gpio模式,即模式adc_xxx和dac_xxx都是对应的iis0的input和output. i2s_xxx则对
应到iis1.
2.gpio mode 配置说明,以mt6592 对应的gpio为例:
用户使用了gpio105/106/107,若在配置gpio时将其设定成dac_xxx这组模式,则data走的是iis0(io connection则需要
连接到o3/o4), 若配置成i2sin1_xxx,则走的是iis1(io connection则需连到i0/i1). 所以使用同一组gpio,iis实际走
的通路还与gpio配置的模式有关,其他gpio也同理。
3.切换iis时sw需要修改的内容:
首先gpio不同模式对应的iis path不同,所以需要调整io connection,iis0 output io connection则需要连接到
o3/o4,iis1 output io connection则需连到o0/o1, input也是如此.
其次需要修改软件中mapping的device, iis0对应的是代码中的audiodigitaltype::i2s_out_dac, iis1对应的是代码中
的audiodigitaltype::i2s_out_2
比如mhl通过iis输出,iis通路选择iis1,则代码中当device是mhl时则该返回audiodigitaltype::i2s_out_2,需要修
改的位置如下:
uint32 audiodigitalcontrol::dlpolicybydevice(uint32_t device){ alogv(+%s(), device = %d\n, __function__, device); if (device & audio_device_out_bluetooth_sco || device & audio_device_out_bluetooth_sco_headset || device & audio_device_out_bluetooth_sco_carkit) { return audiodigitaltype::dai_bt; } else if (device & audio_device_out_aux_digital || device & audio_device_out_anlg_dock_headset || device & audio_device_out_fm_tx) { return audiodigitaltype::i2s_out_2; } else { return audiodigitaltype::i2s_out_dac; }}
以上是整个faq。==========================================================================================
在实际的操作过程中有机个:
1、audio_device_out_aux_digital 。这是hdmi的audio所走的路径
2、i_3/4,o_3/4 代表的是i2s0的input,output。i_0/1,o_0/1代表的是i2s1的input、output。具体要对照原理图:
此处代表使用的是i2s0。对应的在dws中要配置为i2s0。
其实这一块,前面省略i2s前缀的就是i2s0,剩下的就是i2s1,有一个in,一个out。
这里重点介绍以下有没有接好的判断标准:只要有杂音出来,基本上配置这一块的问题就不大了。
下面就是解决杂音的问题:
这就必须理解i2s的原理,下面做一个简单的介绍:
三根线:
bclk:位传输(bit)clk
lrck:切换左右声道的信号,只有两种状态,1/0,分别代表左右声道。
data:串行数据信号。
lrck最找问题基本没什么帮组,就算有问题,现象也很明显。
重点在bclk了,要用示波器来量,然后对照datasheet来分析数据。
data信号,必须保证bclk正确的前提,测量这个信号分析数据才有用。
下面从网上找了一些不同bit对齐的波形图:
最后回到标题的问题,本例就是要分析到最后一步才能得到答案,hdmi要32bit,实际传输的是有16bit,所以就存在这个问题。
也有可能涉及到修改主从模式,采样率等。
修改方法,不同的平台,接口不一样,mtk的接口是:
status_t audiomtkstreamout::set2ndi2soutattribute( audiodigtali2s::lr_swap lrswap , audiodigtali2s::i2s_src mode , audiodigtali2s::inv_lrck inverse, audiodigtali2s::i2s_format format, audiodigtali2s::i2s_wlen wlength, int samplerate){ alogd(set2ndi2soutattribute with dedicated define); m2ndi2sout->mlr_swap = lrswap; m2ndi2sout->mi2s_slave = mode; m2ndi2sout->minv_lrck = inverse; m2ndi2sout->mi2s_fmt = format; m2ndi2sout->mi2s_wlen = wlength; m2ndi2sout->mi2s_samplerate = samplerate; maudiodigitalcontrol->set2ndi2sout(m2ndi2sout); return no_error;}
文章主要是介绍分析问题的方法。不足之处,欢迎指正!
其它类似信息

推荐信息