总结一些调试的心得,ES7243

这两天在调试一个与语音ADC芯片,也遇到了一些问题,到目前位置也解决了问题,所以想说一下嵌入式调试的一些心得,如果大家在调试设备的时候遇到问题,可以回头来看看这篇文章,可能会得到一些启发。

我调试的系统架构

24cd19dc918df587eb4f42bd8e958f8c.png

硬件方案如上图

我们一共可以采集到10ch音频数据,其中有两路是最后的ES7243E给出来的,然后最后送给CPU的是最前面的那个ES7210.

CPU给ES7243E提供MCLK,但是另外两个ES7210芯片的时钟是由ES7243ET提供的。

音频调试就必须提到ALSA,ALSA就必须提到三个很重要的东西。

181c04a50b8ba900f2c803794099fb51.png

像应用用到的很多接口,都是由alsa接口提供的。

671b921d0de898bf8bd31f858b186109.png

现在说下我遇到的问题

第一个问题,我通过录音命令可以录取到两个7210芯片上面的麦克风数据,但是录取不到ES7243E上面的两个麦克风的数据。

1、排查寄存器

这个是最重要的,如果寄存器设置的模式不正确,那么工作就不可能正常。上面的图中可以看到,7210的时钟是由7243E提供的,所以7243E需要设置成master模式。

2、测量时钟

这个是最关键的,音频调试,需要测量MCLK、LRCK、BCLK。

3、电源测量,这个时候比较次要了

然后经过各种调试,在顺芯的FAE王工的指导下,发现是LRCK不正确的原因,而且因为设置的寄存器相差一个bit位,我们用示波器看到的时钟是15.99K,实际需要的是16K。当时还怀疑示波器的问题。

那个关键的寄存器如下:

25a1787028987a10af936901b0808a31.png

这里寄存器的解释,如果设置为0,那么时钟就会从MCLK除以1,如果是4095,那么BCLK = MCLK 除以 4096。

我的MCLK = 12288000HZ

我的BCLK = 16000HZ  采样

那么我就需要设置这个寄存器位 

寄存器的值是 12288000 除以 16000 = 768

然后寄存器设置的话,我就需要设置成  768 - 1 = 0x2FF

寄存器设置正常后,可以看到LRCK非常稳定在16K。

并且,之前看到的,BCLK和LRCK下降沿不对齐的情况也没有出现了。

正确的波形如下:(两个时钟的下降沿可以正确对齐)

b502e6b8970a18452d843593520b6ac7.png

43ffc844f6c2b97d255ea61b42d03a8f.png

第二个问题

我们录音的时候,使用12ch来录音,但是录取到的音频发现有时候物理麦克风1的音频在通道1上,有时候在通道6上。

我们使用的TDM录音格式如下:

e0b03805a9e98b70a7a540cd16d9c858.png

这是一个非常典型的录音格式,我们平时用的声道只有两个,所以在LRCK低电平的时候传左声道,LRCK在高电平的时候传右声道。

TDM格式可以允许在LRCK上传输多个声道。

正常的时候,我们录取的音频如下

9a270b515d04e82c0ccf32952a63421c.png

出问题的时候,我们的录取音频如下:

c2f4f326f9683e23c2fbb3fd5fd64f68.png

也就是LR音频变成了RL的音频

因为这个问题,我用示波器看了TDM格式的音频,7243E上的其中一个麦克风录取正弦波1K信号的时候波形如下:

ce7938fe1933d1d79f9520f4c6dd3189.gif

‍检查这个的原因是想确认下,在传输过程中,每个ADC芯片的输出在LRCK的位置是不是正确的。

然后,确认了一遍后确定没有问题。

之后是和同事讨论后,问题出现在每次录音的时候,可能ADC的状态不一致导致。

然后我们抓取了ADC录音的LRCK和BCLK的波形。

正常情况下:

348b37c3bef3582a25719b44b8159175.png

另一种情况:

874ab8c0acc9516f2a3538b4eb4ab965.png

上面两张图能说明的问题是,在每次开始录音的时候,LRCK的电平跳变是不同的。

然后我们检查电路,发现电路是没有上拉电阻在LRCK上的。

然后检查寄存器,发现寄存器有配置上拉电阻的情况,而且已经配置上了。

最后就是在不断测试和验证上下功夫,shutdown的时候,关闭掉ADC的使能,startup后,用work来使能寄存器让ADC正常工作。

研究发现如果不是代码设置,用i2ctool设置还可能因为时序问题还会出现偶发的上述问题。

在不断的测试后,才找到正确的情况,用示波器抓的开始信号也一直是正常的。

28695ea7dd7128439d11e52b953fdf83.png

整理的不是十分充分,在调试通信问题上,最好还是以波形为主,不要着急,但是也要想清楚原理。

而且在第一个问题的解决上,我觉得还是有疑问

时钟是由7243E提供的,7243E录音出现问题,那为什么另外两颗7210录音正常?

我只能说7210对时钟的要求不是那么严格了。

第二个问题

TDM格式已经说明高电平传的是偶数通道数音频,为什么还可能出现乱序,我这里只能猜测是音频平台部分的cpu dai软件部分处理的不够完美。

即使在开始部分有异常,但是只要保证高低电平差异,我认为TDM都应该要处理正确。

好了,就这些,欢迎大家评论讨论~


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web存储机制localStorage和sessionStorage

https://www.cnblogs.com/yaoyuqian/p/7901052.html web存储包括两种:sessionStorage 和 localStorage(都是限定在文档源级别,非同源文档间无法共享) 1.sessionStorage 数据放在服务器上(IE不支持)严格用于…

“元宇宙” 是什么东西?

最近元宇宙的概念很火,所以转发一篇文章给大家看看。每当一个新东西出来的时候,有的人觉得这个是个好东西,也有人嗤之以鼻,觉得这个就是用来割韭菜的。就拿比特币来说,比特币有什么价值?他的价值无非就是操…

分布式系统服务器要求,浅谈分布式系统

分布式系统的由来软件系统的架构一直以来随着技术的发展和市场的需求进行着不断的演进。最初,各行业业务相对比较简单,对系统的要求也不高,软件系统的架构均采用单一应用架构,此时单台服务器即可满足系统的要求。之后,…

OCP Java 自测

一个朋友准备去考OCP Java认证,即原来的SCJP。心血来潮也想测测自己什么水平。找了本McGraw.Hill.OCP.Java.SE.6.Programmer.Practice.Exams,开盘就是两套自测题。14个题目,给了42分钟,按书中说法是过了8个就可以去考了。掐上秒表…

内核该怎么学?Linux进程管理工作原理(代码演示)

前言:Linux内核里大部分都是C语言。建议先看《Linux内核设计与实现(Linux Kernel Development)》,Robert Love,也就是LKD。Linux是一种动态系统,能够适应不断变化的计算需求。Linux计算需求的表现是以进程的通用抽象为中心的。进程可以是短期…

如果访问云服务器上的文件,如果访问云服务器上的文件

如果访问云服务器上的文件 内容精选换一换WinSCP工具可以实现在本地与远程计算机之间安全地复制文件。与使用FTP上传代码相比,通过 WinSCP 可以直接使用服务器账户密码访问服务器,无需在服务器端做任何配置。通常本地Windows计算机将文件上传至Linux服务…

int *p = *******a是什么鬼?

这是在朋友圈里面看到有人调侃的一个C语言题目,这里拿出来分享给大家看看。1我们知道int a 120; int* p &a;这样我们可以给指针p赋值。指针很多初学者学习的时候会觉得一脸懵逼,我们只要明白几个关键的东西,会让我们对指针理解更深入一…

你见过的MCU最高GPIO翻转频率是多少?

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1010上的普通GPIO与高速GPIO极限翻转频率。上一篇文章 《聊聊i.MXRT1xxx上的普通GPIO与高速GPIO差异及其用法》,痞子衡从原理上介绍了 i.MXRT1xxx 系列里普通 GPIO 和 …

django中的admin组件之自定义组件的增删改查的完善

昨天我们将自定义列放在类我们自定义的Bookconfig配置类内,但是这样就写死了,因为当我们访问publish表的时候应该也有这样的自定义列,所以我们应该将我们的自定义列放在默认的配置表里面。应该怎么做? 当我们的自定义列挪到默认配…

“制造商和技术支持商”

1.用优化工具。 2.system32中的OEMINFO.ini和OEMLOGO.bmp文件 转载于:https://blog.51cto.com/honglingjin2011/537680

青春是一列不再回头的火车…

高中那年,我表姐对我说:“不要老想着出去打工赚钱,好好读书,将来肯定有用,也不要想着现在日子长得很,等你像我这样结婚生子后,一天一眨眼就过完了。”当时听了没有多大感觉,如今深以…

我和周立功的聊天

算起来,我和周工认识也有7年了,7年前我在中兴,偶然一次加了周工的微信,有一次年末,周立功在推广他们的示波器,广哥拉我进周立功的示波器技术支持群微信群,说是周工要给大家发红包。那时候&#…

Python 37 进程池与线程池 、 协程

一:进程池与线程池 提交任务的两种方式: 1、同步调用:提交完一个任务之后,就在原地等待,等任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行 2、异步调用:提…

在腾讯做嵌入式是怎么样的

昨天发朋友圈,是我帮忙同学拍的几张照片,自己觉得拍的不错,点赞的人还挺多的,就想着聊聊在腾讯做嵌入式软件开发的情况。我面试的BSP驱动开发工程师,入职后也从事这方面的事情,但是并不仅仅是BSP驱动。现在…

NFS无法启动根文件系统的解决

为了调试驱动,整了一天的NFS启动根文件系统出了各种问题,后来还是一一解决,不过还不太完美,因为不能使用交换机,我只能用PC和目标板直连,导致我上网很麻烦 无法挂载问题一: IP-Config: Cannot a…

聊聊身边的嵌入式,为什么老司机都爱后视镜

为什么老司机都爱后视镜有句话形容我们老司机的成长过程,叫:一年虎,二年狼,三年变成小绵羊。如果你不懂这句话的意思,证明你还不是一个合格的老司机。如果没和别人发生过亲(Gua)密(Ceng)接(Shi)触(Gu),算得…

HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了

http://acm.hdu.edu.cn/showproblem.php?pid2187 Problem Description时间:2008年5月16日(震后第4天)地点:汶川县牛脑寨人物:羌族老奶奶【转载整理】牛脑寨是一个全村600多人的羌族寨子,震后几天&#xff…

第六次周赛

失望…… B题其实很简单&#xff0c;完全有能力出&#xff0c;我和luyi陷在我一个错误的树DP模型中…… 其实就是几个简单的组合数&#xff0c;谁可以都会的问题。 PROBLEM B 1 #include <iostream>2 #include <algorithm>3 #include <cstring>4 #include &l…

博主日常工作中使用的shell脚本分享

前言&#xff1a;今天给大家分享一篇在我工作中常用的一个shell脚本&#xff0c;里面有一些我们常用到的shell操作。该脚本用于本地电脑和服务器交互上&#xff0c;实现以下功能&#xff1a;自动拉取自己个人电脑上的源码到服务器上yocto包的源码文件夹。自动运行compile 、str…

JSON数据提取

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。JSON在数据交换中起到了一个载体的作用&#xff0c;承载着相互传递的数据。JSON适用于进行数据交互的场景&#xff0c;比如网站前…