热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

MTK8382HDMISII9024I2S声音是噪音

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上面的写法好像有

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


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


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

推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
author-avatar
ekuuu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有