MTK平台外挂降噪板(I2S)调试记录

来源:互联网 发布:安卓手机 mac照片 编辑:程序博客网 时间:2024/06/13 13:13

平台:MT6737M

降噪板:roobo、海岸  

----------------------------------------------------------------------------------------------------------------------

知识储备:

I2S有3个主要信号:

1.串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率=2×采样频率×采样位数。
2. 帧时钟LRCK,(也称WS),用于切换左右声道的数据。LRCK为“1”表示正在传输的是右声道的数据,为“0”则表示正在传输的是左声道的数据。LRCK的频率等于采样频率。
3.串行数据SDATA,就是用二进制补码表示的音频数据。
有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟(Sys Clock),是采样频率的256倍或384倍。

根据SDATA数据相对于LRCK和SCLK的位置不同分为:

1.  左对齐(较少使用)

2.  I2S格式(即飞利浦规定的格式)

3.  右对齐(也叫日本格式、普通格式)。

------------------------------------------------------------------------------------------------------------------------

MTK audio system

默认方案

mic-->pmic-->cpu-->pmic-->speaker

新方案

mic-->cpu-->pmic-->speaker

需要解决的几个问题:

1、硬件连接  

从上图可知,I2S2和UL SRC走的是同一路,所以选择这一路(external ADC)最便捷。

对应到硬件GPIO,选择对应的I2S功能。具体略。

注意:LK和kernel dws都要配置,不知道为什么??

查看gpio状态

:/sys/class/misc/mtgpio # cat pin
cat pin
PIN: [MODE] [PULL_SEL] [DIN] [DOUT] [PULL EN] [DIR] [IES] [SMT]
79:61001010
80:61001010

2、驱动修改

这里以遇到的问题和现象,再到解决方法,再到原因的方式记录吧,比较有意思。

a、现象:

     波形叠加导致频率不对,导致数据没有输出,这要好一点的示波器才能发现。

     解决方法:

     已知降噪板做主设备输出clk,拔掉降噪板,测量平台发现也输出clk疑问

     原因:

     平台不支持做从I2S从设备!!!降噪板改吧,乖乖做从设备。。。

b、现象:

      波形没有完美的尖尖,导致降噪板识别错误鄙视

      解决方法和原因:

      lowjitter这东东设置一下吧,硬件在设计电平转换的时候用点心生气其实lowjitter不设置都可以,这也不算高频~~~

      这个代码得贴一下,没有参考,全靠MTK给。

      EnableALLbySampleRate(AudioAdcI2S->mI2S_SAMPLERATE);
                MclkDiv3 = SetCLkMclk(Soc_Aud_I2S2,AudioAdcI2S->mI2S_SAMPLERATE);
                SetCLkBclk(MclkDiv3,AudioAdcI2S->mI2S_SAMPLERATE,2,Soc_Aud_I2S_WLEN_WLEN_32BITS);
                EnableI2SDivPower(AUDIO_APLL12_DIV2,true);
                Audio_I2S_Adc |= Soc_Aud_LOW_JITTER_CLOCK << 12;

c、现象:

     

     百思不得姐疑问

     瞎捣鼓下发现表象

    

     真相是。。。。

     CAPTURE_FORCE_USE_DRAM哭

看audio相关寄存器

adb shell cat /sys/kernel/debug/mtksocaudio
adb shell cat /sys/kernel/debug/mtksocanaaudio

adb shell "echo Setafereg,regaddr,0x1f0,regvalue,0x049e29e1> /sys/kernel/debug/mtksocaudio"  打tone音

MTK不喜欢用tinyalsa工具嘛,越原始越本真得意

tinycap xxx.pcm -D 0 -d 1 -c 2 -r 48000 【-b 16 -p 1024 -n 4】

tinycap打印裸数据,爽!

while (capturing && !pcm_read(pcm, buffer, size)) {
        if (fwrite(buffer, 1, size, file) != size) {
            fprintf(stderr,"Error capturing sample\n");
            break;
        }
        bytes_read += size;
  
  for (i = 0; i < 16; i++)     
  {       
   printf("%d ", buffer[i]);     
  }    
  printf("\n");
    }

---------------------------------------------------------------------------------------------------------

以上就是个随笔,没有技术上的深度,还在继续学习摸索中,希望走过路过的朋友留下你宝贵的意见,比如也许MTK的I2S是可以做从设备呢?


      


原创粉丝点击