飞凡嵌入式 发表于 2017-6-19 20:37:37

HI3516A 音频调试技巧经验分享

1.音频调试先查看文档,以确定hi3516a是作为I2S的主模式还是从模式,如果该用从模式的地方用成了主模式,那么音频可能是有一些正确的数据,但是大多数是一阵一阵的噪声,这个就是两个都在给时钟导致时钟线上面的信号混乱,处理器就会采到不正确的信号。使用从模式时,HI_MPI_ADEC_SendStream函数如果是以阻塞的方式调用的话,Adec会因为缓存满而阻塞,是因为ADEC的数据没有被取走的缘故,但是使用主模式就不会出现这种情况。
2.在sysctl_hi3516a.sh这个SDK加载脚本中,#msic config 这一寄存器配置是指明芯片是用内部的audio codec还是用外部的,默认是使用内部的。
# msic config
如果设置下面这一行,是设置音频使用内部的编解码器
himm 0x201200e0 0xd
如果设置这一行,就是设置音频使用外部的编解码器,例如通过IT6604输入
himm 0x201200e0 0xe
3.在pinmux_hi3516a.sh中,需要设置硬件板卡上音频接口使用哪几个管脚,并通过寄存器的配置,设置好音频管脚的复用关系。
下图是我们的硬件连接

那么就需要查看SDK对于芯片的文档,查找GPIO12_6/VI_DAT9/I2S_SD_RX等三个管脚应该怎么复用才能作为I2C_SD_RX,复用基地址是0x200f0000,经过查找后:



0x200f01c4需要设置成0x10,该管脚才复用为i2s模式,所以需要执行
himm 0x200f01c4 0x10
同样的其它三个管脚也需要配置成i2s模式。在pinmux_hi3516a.sh脚本中,i2s2_pin_mux:
i2s2_pin_mux()
{
        himm 0x200f01ac 0x2;        # i2s2_mclk
        himm 0x200f01b0 0x2;        # i2s2_bclk_tx
        himm 0x200f01b4 0x2;        # i2s2_ws_tx
        himm 0x200f01b8 0x2;        # i2s2_sd_tx
        himm 0x200f01bc 0x2;        # i2s2_bclk_rx
        himm 0x200f01c0 0x2;        # i2s2_ws_rx
        himm 0x200f01c4 0x2;        # i2s2_sd_rx
}
这个脚本函数所执行的管脚复用关系,正好对应我们现在的板卡上面音频的连接情况,所以需要执行i2s2_pin_mux这个函数,如果硬件连接和该脚本里面的复用设置关系不一致,就要检查并设置正确的管脚复用关系。

_沉思 发表于 2017-8-10 22:58:21

真棒,学习了学习了。

feiyashan 发表于 2017-8-11 08:28:18

多谢分享,好人一生平安

ck199510 发表于 2017-8-11 09:36:33


鐗涢

13915426184 发表于 2017-9-19 14:46:11

我在调试HDMI输入源sil9135+hi3516a,视频没有问题了,但是音频,一直没有中断产生,
AI属性配置
    stAioAttr.enSamplerate   = AUDIO_SAMPLE_RATE_48000;
    stAioAttr.enBitwidth   = AUDIO_BIT_WIDTH_16;
    stAioAttr.enWorkmode   = AIO_MODE_I2S_SLAVE;
    stAioAttr.enSoundmode    = AUDIO_SOUND_MODE_STEREO;
    stAioAttr.u32EXFlag      = 0;
    stAioAttr.u32FrmNum      = 30;
    stAioAttr.u32PtNumPerFrm = SAMPLE_AUDIO_PTNUMPERFRM;
    stAioAttr.u32ChnCnt      = 2;
    stAioAttr.u32ClkSel      = 0;
ai没有中断产生,
如果把
    stAioAttr.enWorkmode   = AIO_MODE_I2S_SLAVE;
改成
    stAioAttr.enWorkmode   = AIO_MODE_I2S_MASTER;
则有中断,但把AI的数据保存是静音。

已经配置了外部codec,himm 0x201200E0 0xe 以及i2s管脚的复用配置,可是始终不出结果。
请大家帮忙确认一下,要设置成stAioAttr.enWorkmode   = AIO_MODE_I2S_SLAVE;还是master模式。还有其他的需要设置吗?谢谢!!

wu0 发表于 2017-9-19 14:51:59

mark!!!看看,资源共享@@

hero 发表于 2017-9-19 16:39:04

:victory::victory::victory::victory::victory:

helphel 发表于 2017-9-20 12:37:27

好贴!!!!

13915426184 发表于 2017-9-21 18:58:44

大家好!我在使用hi3516a+alc5616声卡时有如下的几点困惑:
1 内部外部codec之分?
有坛友说,
如果himm把0x201200E0 配成0xd,表示选用 内部codec,此时用IS2接口,linein(或麦克风)外接音频信号,要设置成master模式;
如果himm把0x201200E0 配成0xe,表示用外部codec,此时可以是HDMI集成的音频信号,直接I2S接过来,要设置成slave模式。
内部,外部有什么判别标准?内部是hi3516a内置的codec吗?
那我的外接的codec芯片,一定用himm把0x201200E0 配成0xe了?
2 如何提供时钟?
按照资料上说,在主模式下,位流时钟和左右声道选择信号(PCM 模式下为同步信号)由AIO 送给AUDIO
CODEC。在从模式下,位流时钟和左右声道选择信号(PCM 模式下为同步信号)由AUDIO CODEC
送给AIO;AUDIO CODEC 的主工作时钟由Hi3516A 输出的时钟AIO_MCLK 或外接的晶振
提供。
声卡芯片的MCLK(256fs),假如MCLK需要12.288MHz,难道和文档类似的直接配置寄存器I2S_CRG_CFG0_08 为0x0051EB85,此时第8 路时钟输出MCLK 频率为
12.288MHz。然后位流时钟也是用寄存器配置手动配置寄存器。

谢谢大家
页: [1]
查看完整版本: HI3516A 音频调试技巧经验分享