在声音生成过程中发生了内部时钟错误。 当问题发生时,测试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,这是它的默认值。 这个设备会恢复正常
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:TAS5760M-Q1 放大器内部时钟误差被锁存问题 https://www.yhzz.com.cn/a/11789.html