飞凡嵌入式

飞凡嵌入式

0个粉丝

8

问答

0

专栏

0

资料

飞凡嵌入式  发布于  2017-06-19 20:37:37
采纳率 0%
8个问答
5374

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这个函数,如果硬件连接和该脚本里面的复用设置关系不一致,就要检查并设置正确的管脚复用关系。
我来回答
回答9个
时间排序
认可量排序

feiyashan

0个粉丝

11

问答

0

专栏

0

资料

feiyashan 2017-08-11 08:28:18
认可0
多谢分享,好人一生平安

ck199510

0个粉丝

0

问答

0

专栏

0

资料

ck199510 2017-08-11 09:36:33
认可0

鐗涢

13915426184

0个粉丝

15

问答

0

专栏

0

资料

13915426184 2017-09-19 14:46:11
认可0
我在调试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

0个粉丝

7

问答

0

专栏

1

资料

wu0 2017-09-19 14:51:59
认可0
mark!!!看看,资源共享@@

13915426184

0个粉丝

15

问答

0

专栏

0

资料

13915426184 2017-09-21 18:58:44
认可0
大家好!我在使用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。然后位流时钟也是用寄存器配置手动配置寄存器。

谢谢大家

出手无招

0个粉丝

12

问答

0

专栏

0

资料

出手无招 2018-04-23 10:57:53
认可0
多谢楼主分享,辛苦

_沉思

0个粉丝

6

问答

0

专栏

0

资料

_沉思 2017-08-10 22:58:21
认可0
真棒,学习了学习了。

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2017-09-19 16:39:04
认可0
:victory::victory::victory::victory::victory:

helphel

0个粉丝

4

问答

0

专栏

0

资料

helphel 2017-09-20 12:37:27
认可0
好贴!!!!
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区