Home  >  Article  >  Database  >  MTK8382 HDMI SII9024 I2S声音是噪音

MTK8382 HDMI SII9024 I2S声音是噪音

WBOY
WBOYOriginal
2016-06-07 15:49:072704browse

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。具体要对照原理图:

MTK8382 HDMI SII9024 I2S声音是噪音


此处代表使用的是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;
}


文章主要是介绍分析问题的方法。不足之处,欢迎指正!



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:使用Access的几点技巧Next article:ZOJ 3787 Access System