TAS5760M-Q1 放大器内部时钟误差被锁存问题
1. 前言
在声音生成过程中发生了内部时钟错误。
当问题发生时,测试I2S时钟如下(采用12K采样率):
根据数据表,AMP应该被恢复,
然而,AMP似乎被卡在内部时钟错误发生后。
可能我们知道什么样的条件可以触发AMP卡在时钟错误状态。
当时钟问题发生时,SPK_SD和SPK_FAULT是高的,这意味着AMP没有问题。
MCU的I2S声音数据正常,但AMP输出无声音。
2. 注意事项
本仪器对MCLK、SCLK和LRCK的比值非常敏感,建议误差控制在±1以内。
否则可能导致设备无法恢复正常。
2.1 检查时钟
除了SPK_FAULT引脚,是否可以用I2C确认是否有故障?
检查设备在没有输出时是否进入睡眠模式
2.2 判断sleep模式
如果卡死是由于错误引起的,
如果错误条件已经消除,
则需要拨动SPK_SD位来清除故障。
并检查SPK_SLEEP/ADR引脚,查看设备是否处于Sleep模式。
2.3 MCLK时钟
从设计角度来看,MCLK的设置在513.88左右。
然而,AMP仍然没有任何问题。
再次检查比率是否为+/-1。
没有来自AMP数据表的数据。
3. 复现流程
从之前的信息中,我假设设备首先工作在正常状态,
然后将I2S时钟速率改变为一个异常值触发错误,
最后将时钟回调,发现设备卡在错误中。
Pull SPK_SD low→停止所有时钟→切断电源→等待20ms→接通电源→给出所有时钟→使设备静音→使SPK_SD high→取消静音。
4. 问题梳理
4.1 检查内部错误,有如下2种测试序列
(1)设备工作正常->手动使I2S时钟接地
->内部时钟错误->recover I2S时钟
->内部时钟错误恢复(无错误发生)
(2)在设备中,10ms内有1个I2C命令用于读取Amp状态和1个I2C命令用于音量控制。
在正常情况下,没有问题,如果故意插入一个I2C命令读取电源控制寄存器0x01,
内部时钟错误发生,AMP似乎被卡住了。
检查了I2S相关的时钟,一切正常,可以生成时钟。
4.2 当问题发生时,08寄存器的反馈是08
也有另一种情况表明OCE Thres=0x11, CLKE=1。
用于比率计算。
从TI数据中采样率12K, MCLK到fs= 512, SCLK到fs=64。
LRCLK = 12 khz,
在我们的MCU设置中,MCLK到fs约为513.88,
SCLK到fs=64.22,LRCKL=12khz。
这些时钟在内部时钟问题发生之前和之后都是正常的。
5. 与FAE沟通
根据描述,时钟错误是由I2C命令触发的,无法恢复。
I2S时钟触发可以恢复的错误。
这个问题可以在我们的EVM板上重现还是只在我们客户的板上重现?
我们的客户使用什么SCL频率?
如果您在15毫秒而不是10毫秒内发送3个I2C命令会有帮助吗?
请提供我们客户发送到设备的I2C命令,我们可以尝试
这个问题是在我们的设计板上复现的,不是EVM板。
SCL波特率设置为400K。
至于解决方案,它不是客户的首要考虑。他
们更喜欢找到根本原因。
SW中真实的I2C命令可以总结如下:
1)在10ms的任务中,I2C读取AMP寄存器状态08来获取是否有任何CLKE/OCE/DCE错误发生。
2)在50ms的任务中,I2C写AMP寄存器对通道音量进行控制。
(I2C操作命令发送前有1ms延迟)
在上述2个序列下,内部时钟误差难以再现。
但是,我们添加了一些额外的测试例程,用于随机(当SW在上面2个序列上运行时)
插入一个额外的I2C读取AMP寄存器的电源控制0x01,
很容易触发内部时钟错误发生和AMP卡住的情况。
6. 分析
这种现象很有可能是客户的系统造成的
实际上,I2C命令和时钟错误之间没有联系。
这个问题是发生在每一块板还是只有一块板?
使用示波器捕获引脚SPK_FAULT和MCLK, SCLK, LRCK同时吗?
如果真的发生时钟错误,我们应该发现SPK_FAULT被拉低了。
记住,当错误发生时,要放大每个时钟。
还要在错误发生之前和之后读取从0x00到0x11的所有寄存器值,以
便我们可以比较它们以找到一些东西。
是否可以使用EVM板将I2C命令发送到客户板?
可能是客户的I2C出了问题,发出了错误的命令
7. 测试顺序
插入异常I2C命令时,发生AMP内部时钟错误
8. 使用EVM板测试
在图片中看到捕获了I2C信号
似乎将08写入寄存器0x01
无论如何,仍然需要知道错误发生之前和之后从0x00到0x11的所有寄存器值
还有示波器捕获的时钟信号
不知道当它们插入另一个I2C命令时会发生什么。
当第一个I2C命令还没有完全传输时,
系统发现一个插入I2C命令时会做什么?
可以放弃第一个I2C命令并立即开始传输这个插入的I2C吗?
这将导致向设备传输未知的命令。
所以建议使用EVM发送I2C命令到主板。
只需要将SCL和SDL的两条线从EVM连接到板上。
SPK_FAULT引脚是否一直保持高电平?
如果这是真的,这似乎不是一个错误的发生
而是一些错误的寄存器设置,使设备卡住。
使用EVM板测试,如果您真的将08写入寄存器0x01,
设备将会被卡住,寄存器0x08中的值是08。
测试了SPK_FAULT引脚,它仍然很高。
和我们做的主板完全一样。
9. 解决办法
可以将FD写入寄存器0x01,这是它的默认值。
这个设备会恢复正常
- 分享
- 举报
-
浏览量:3459次2019-10-23 16:13:13
-
浏览量:2094次2020-09-27 14:08:50
-
浏览量:30046次2022-02-04 09:00:15
-
浏览量:2687次2021-12-11 15:15:30
-
浏览量:20484次2020-12-15 19:37:32
-
浏览量:5450次2021-08-10 14:40:54
-
浏览量:3898次2020-12-23 17:19:19
-
浏览量:4156次2020-12-04 10:33:46
-
浏览量:39575次2021-01-30 23:04:21
-
浏览量:5614次2021-12-25 09:00:15
-
浏览量:6420次2019-09-09 14:36:52
-
浏览量:8712次2021-08-09 15:05:08
-
浏览量:2579次2019-11-27 09:37:44
-
浏览量:527次2023-08-25 17:27:24
-
浏览量:3411次2020-02-28 16:25:43
-
浏览量:1126次2023-02-28 09:31:11
-
浏览量:2232次2019-11-23 09:24:28
-
浏览量:2215次2022-08-16 19:07:27
-
浏览量:2956次2020-11-02 13:56:45
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
free-jdx
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明