顺芯codec调试流程

  1. 确认dts中I2C配置是否正确

    检查dts中i2c的mode是否配置正确。具体可见i2c节点中i2c-padmux项的配置,此项需与硬件设计相对应。

  2. 确认padmux dts中是否有将i2c引脚切对

    检查padmux dtsi中需要切换成i2c的pin脚是否有填入,且确保mode及复用功能填写正确。如图,此项需与硬件设计相对应。

  3. 通过i2c-tools工具确认i2c工作是否正常

    可通过开源工具i2c-tools中的i2cget来读取顺芯codec的chip id,从而确认i2c工作是否正常。

    • 7243:

      7243的i2c地址与接线有关,可与硬件确认

      因codec均挂载i2c1上,故i2cget -y -f 1 i2cAddr(7位) 0x0E,得到0x40,即说明与7243通信正常。

    • 8156:

      8156的i2c地址与接线有关,可与硬件确认

      重复与7243同样的操作,读出chip id,能匹配上则证明主芯片与codec i2c通信正常。

  4. 确认dts中I2S设定是否正常

    修改dts中sound节点的i2s-padmux与原理图匹配,可与硬件确认。Sound节点如果没有在dts中定义的话,一般都在infinity2m.dtsi里面。

  5. 在padmux中去掉I2S pin脚的相关信息

    因顺芯codec只要先给了I2S clock就会切到硬件模式,为了避免开机就出I2S信号,切记不能在padmux中填入I2S的pin脚定义,同时也需要将I2S相应的pin脚的其他复用功能从padmux中拿掉。

  6. Insmod mhal.ko时加入insmod参数

    在insmod mhal.ko时加入IS_MHAL_SUPPORT_ES_CODEC=1,来更改mhal的行为,开机不出I2S 信号来适配codec。

  7. 执行demo,确认两颗codec是否工作正常

    Demo源码所在的路径为sdk/verify/mi_demo/geonosis/codec。根据硬件设计修改以下头文件中的i2c地址(7位)。

    • 测试8156:

      prog_codec –D 1 –O –i xxx.wav –V 0
      

      注意:因主芯片没法提供mclk,故xxx.wav的采样率需大于等于16K。

      • 异常排查:

        1. cat/proc/mi_modules/mi_ao/mi_ao1,查看应用是否有一直在送数据(即TotalFrmCnt是否一直在增加)

        2. 尝试增加-V参数,加大音量(-60 ~ 30)

        3. 用示波器测量主芯片端I2S波形,确认BCLK(bit传输时钟,该时钟频率应为2(通道数) * 16(位宽) * 采样率),WCLK(左右声道切换时钟,时钟频率为采样率),SDO(能看到有数据变化即可)是否有波形,没有波形则需要确认I2S是否配置正确。

        4. 测试codec端上述波形,确认codec是否接收到I2S信号

        5. 测量codec端的VRef电压,此电压能直观地看出codec是否正常工作

    • 测试7243:

      prog_codec –t 30 –I –o /tmp –d 2 –m 0 –c 2 –s 48000(若需要和没有挂在codec上的mic一同使用,则需要使用-d 4 –c 4)

      该指令会在/tmp下生成两个音档

      • 异常排查:

        1. cat /proc/mi_modules/mi_ai/mi_ai2,查看应用是否有一直在送数据(即ReadFrmCnt是否一直在增加)

        2. 用示波器测量主芯片端I2S波形,确认BCLK(bit传输时钟,该时钟频率应为2(通道数) * 16(位宽) * 采样率),WCLK(左右声道切换时钟,时钟频率为采样率),SDI(能看到有数据变化即可)是否有波形,没有波形则需要确认I2S是否配置正确。

        3. 测试codec端上述波形,确认codec是否发出I2S信号

        4. 测量codec端的VRef电压,此电压能直观地看出codec是否正常工作

        注:在测量I2S信号时,需要特别关注SDI/SDO是否有数据。

    注意事项:

    因为顺芯codec的原因,建议先对通过I2C对顺芯codec做了初始化,再初始化MI_AI/MI_AO。