关于Atmel A5D31平台ALC5640音频芯片的问题记录

2024-05-13 22:32

本文主要是介绍关于Atmel A5D31平台ALC5640音频芯片的问题记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目需要在A5D31平台使用了ALC5640双I2S带功放的语音芯片,前期调试挺顺利,到后面调试录音时卡主了,问题是无法录音,报input/output错误,也就是没有数据流的意思。
花了两天时间跟FAE搞定ALC5640录音输出的问题,也就是说通过示波器可以确定数据一定是产生了,那么下面就是排除CPU这端的问题了。
又花了不少时间研究CPU的SSC接口(即I2S),最后锁定SSC的RCMR寄存器,如下图:
在这里插入图片描述
CKS这个配置(下图所示),内核中有错误(这个是那其他人的内核),根据原理图设计来说应该配置成1(不同的原理图选择不同,下图是默认的画法),也就是使用TK(BCLK)引脚输入的时钟信号。内核中默认配置成了2,所以不对。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改了以为就可以了,结果还是报input/output错误,郁闷死了。继续研究(对该CPU的I2S机制并不是非常了解,可能其他的CPU并无该问题),时钟部分解决了(这里通过让接收时钟输出到IO引脚确定时钟无问题),最后锁定到录音采集开始触发的位置,如下图:
在这里插入图片描述
时钟什么的没问题了,放音没问题说明DMA和中断OK,那么就剩下这个触发了。看下寄存器对这个触发的定义描述:
在这里插入图片描述
除了0,1,8这三个值外,其他都需要RF引脚的信号,再对比内核中的配置发现(函数名atmel_ssc_hw_params),不管怎样都会需要RF信号的参与。为此修改它强制为0(1和8的值就不试了),再测试录音,郭然可以了,而且录音文件大小也正常。
以为总算可以了,但是还是不行,录音的文件杂声或者底噪非常大(人声可忽略了),但是有时候录音却是正常的(几率比较小),虽然还不行但起码可以录音了,很多的努力没白费。
有时行,有时不行,而且大部分不行,这下比根本不行更难办了,是配置问题?还是硬件模拟部分问题,无法确定。最后跟FAE借来了Demo板再测试,发现效果一样,那么可以确定不是硬件部分了。用的是alsa原版录音软件和库,也不怀疑。那么问题就是出在了内核或者原理设计上了。
最后回到触发开始采集部分,由于设置的为0没有使用同步信号这部分是不是有问题(当时并没有这么思考问题,绕了很大的弯,对于人来说最恐怖的是未知,唉没办法,想到这个问题花了有一天多,其他都测试完了,真没法了),然后决定把RF和TF短接,这时候内核中配置把SSC的RCMR中start位设置为7.
再测试,录音正常,播放录音文件很清晰(调整了运放放大倍数之后,刚开始有点破音),无杂音,整个清爽多了。
到此算是搞定了,后边再继续深测。这样的配置就跟通常的设计不同了,需要把发送和接收的两个同步信号引脚短接才行,之前的音频调试并不需要这样,坑。

这篇关于关于Atmel A5D31平台ALC5640音频芯片的问题记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987006

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map