我们使用你们代理的tas5707芯片发现下面问题:请求帮我们尽力咨询一下原厂FAE。
错误情况是:使用48KHZ 跟 12KHZ采样率通过tas5707播放音频时出现芯片由于clock error ,很频繁地mute 了我们的音频。然后使用32K 跟16KHZ采样率,也同样会出现,但出现次数相对少很多,可以忽略。
我们硬件电路的搭建情况如下:
1.原理图是按照TI官网提供的开发板音频部分原理图搭建;
2.提供MCLK的外部晶振是6.144Mhz;
3. I2S 数据(LRCLK,SCLK,SDO在示波器上显示频率正常,对于时钟的时延时序,只有一个不满足芯片手册要求的地方:LRCLK的上升沿时间,下降沿时间都是60+ns,芯片手册中写到最大不能超过8ns)
4.I2C 写设备是正常的:(使用逻辑分析仪捕获数据,每次I2C配置都有ACK返回,程序改动不同的I2C配置使用示波器验证会出现不同的结果,所以证明配置是正常配置到tas5707芯片)
5. 输出端输出的PWM频率正常:48K采样率对应384Khz pwm.
6.电源部分,AVDD(3.3v) , PVDD (12v),使用示波器测量纹波在正常范围内;(属于稳定)
7.测量/FALUT引脚,在出现问题的情况下,并没有出现低电平;
(ps: 我们已经排除过I2S信号受干扰的情况(将I2S数据线旁边的有机会的干扰线割断了),出现问题时候error status register (0x02)的值为0x18(LRCLK Error and Frame slip))
我们的声卡寄存器配置:(我们使用了两种形式)
在驱动中:init 流程如下:
形式一:
1.将RESET 和PDN引脚按时间的顺序使用IO 口设置为0或1.
2.将0x00写入 0x1b;msleep(53);
3.设置 bank_switch_control寄存器低4位为 4 ;
4.将0x00写入0x05寄存器; msleep(180);
5.将0x00写入0x06寄存器;
进入正常模式,在歌曲播放时设置时钟寄存器.(其他寄存器处于默认值)
形式二:
1.将RESET 和PDN引脚按时间的顺序使用IO 口设置为0或1.
2.将0x00写入 0x1b;msleep(53);
3.配置如下值:(格式 :寄存器 + 数据大小 + 数据)
0x06, 0x01, 0x3F,
0x04, 0x01, 0x05,
0x11, 0x01, 0xAC,
0x12, 0x01, 0x54,
0x13, 0x01, 0xAC,
0x14, 0x01, 0x54,
0x20, 0x04, 0x00, 0x01, 0x77, 0x72,
0x25, 0x04, 0x01, 0x02, 0x13, 0x45,
//! Biquads
0x50, 0x04, 0x00, 0x00, 0x00, 0x10,
0x29, 0x14, 0x00, 0x7F, 0x0E, 0x38, 0x0F, 0x01, 0xE3, 0x90, 0x00, 0x7F, 0x0E, 0x38, 0x00, 0xFE, 0x1A, 0xA7, 0x0F, 0x81, 0xE1, 0xC8,
0x2A, 0x14, 0x00, 0x86, 0xFC, 0xAA, 0x00, 0x10, 0x2F, 0xFE, 0x00, 0x17, 0x80, 0xDF, 0x0F, 0xE8, 0x13, 0x2B, 0x0F, 0xE9, 0x3F, 0x4D,
0x2B, 0x14, 0x00, 0x80, 0x2C, 0x31, 0x0F, 0x01, 0x5D, 0x68, 0x00, 0x7E, 0x7E, 0x71, 0x00, 0xFE, 0xA2, 0x98, 0x0F, 0x81, 0x55, 0x5D,
0x2C, 0x14, 0x00, 0x77, 0x42, 0xCC, 0x0F, 0x50, 0xA5, 0xD8, 0x00, 0x5D, 0x83, 0x34, 0x00, 0xAF, 0x5A, 0x28, 0x0F, 0xAB, 0x39, 0xFF,
0x2D, 0x14, 0x00, 0x7D, 0x6D, 0x43, 0x0F, 0xC3, 0x11, 0x69, 0x00, 0x6D, 0xFF, 0x11, 0x00, 0x3C, 0xEE, 0x97, 0x0F, 0x94, 0x93, 0xAC,
0x2E, 0x14, 0x00, 0x7D, 0x6C, 0x61, 0x0F, 0x1D, 0x4F, 0x95, 0x00, 0x70, 0xEE, 0x83, 0x00, 0xE2, 0xB0, 0x6B, 0x0F, 0x91, 0xA5, 0x1B,
0x2F, 0x14, 0x00, 0x7F, 0xC8, 0xEC, 0x0F, 0x05, 0x89, 0xB2, 0x00, 0x7E, 0x1F, 0x7D, 0x00, 0xFA, 0x76, 0x4E, 0x0F, 0x82, 0x17, 0x97,
//! DRCs
0x3A, 0x08, 0x00, 0x02, 0xA3, 0x9A, 0x00, 0x7D, 0x5C, 0x65,
0x3B, 0x08, 0x00, 0x01, 0x53, 0x8F, 0x00, 0x7E, 0xAC, 0x70,
0x3C, 0x08, 0x00, 0x00, 0x00, 0x57, 0x00, 0x7F, 0xFF, 0xA8,
0x40, 0x04, 0xFD, 0x82, 0x30, 0x98,
0x41, 0x04, 0x0F, 0x81, 0x47, 0xAF,
0x42, 0x04, 0x00, 0x08, 0x42, 0x10,
0x46, 0x04, 0x00, 0x00, 0x00, 0x01,
0x08, 0x01, 0x19,
0x09, 0x01, 0x19,
0x07, 0x01, 0xFF,
0x1A, 0x01, 0x0A,
0x07, 0x01, 0xFF,
0x05, 0x01, 0x40,
0x1A, 0x01, 0x98,
0x10, 0x01, 0x07
0x06, 0x01, 0x00);
0x05, 0x01, 0x00);
msleep(180);
进入正常模式,在歌曲播放时设置时钟寄存器.(其他寄存器处于默认值)