TAS5731M+CS5340数字功放
大家好,我是个新手,现在在做一个数字音频功放项目,模拟音频信号输入CS5340转换成24位的数字信号经过I2S送给TAS5731M,TAS5731M配置成PBTL模式,输出至喇叭,滤波频率设置成20Hz到100Hz。原理图已经画好做出样板了,但CS5340和TAS5731M的文档我翻了好几遍,发现它们都不能提供MCLK,现在的图上两边的主时钟就是直接连上的,开始以为是作主机的CS5340会提供主时钟的,结果好像不是这样。
以下是找的网上的初始化参数设置,现在板子一点反应也没有,怎么也工作不了,请各位大神帮忙看一看。
首先硬件上是不是还需要一个提供一个外部MCLK给这两个芯片的I2S用,再有就是下面这个初始化程序还有哪些地方不对。
void tas_PUP(void)
{
const uint8_t out_MuxReg[4] = {0x01,0x00,0x22,0x45}; //addr = 0x25,TI ?§3?é???
const uint8_t in_MuxReg[4] = {0x00,0x99,0x77,0x72}; //addr = 0x20,BD mode,select R_CH to PBTL
uint8_t i;
// code uint8_t out_MuxReg[4] = {0x01,0x01,0x23,0x45}; //addr = 0x25,TI ???????t
// code uint8_t out_MuxReg[4] = {0x01,0x10,0x32,0x45}; //addr = 0x25,datasheet pag25
// code uint8_t in_MuxReg[4] = {0X00,0X88,0X77,0X72}; //addr = 0x20,BD mode,select L_CH to PBTL
tas_nRST = 0;
RST_5340 = 0;
M0_5340 = 0;
M1_5340 = 0;
tas_delay(1000);
tas_nRST = 1;
RST_5340 = 1;
tas_delay(1000);
sendbuf[0] = 0x00;
writeNbyte(0x1b,1); //Trim oscillator (write 0x00 to register 0x1B) and wait at least 50 ms
//PutStr("Trim oscillator\n");
tas_delay(2000);
/****************Configure the DAP via I2C****************/
sendbuf[0] = 0x80;
writeNbyte(0x03,1); //sys ctrl reg 1;Soft unmute on recovery from clock error
//tas_WrByte(0X05,0x04); //éè??I2Sêy?Y??ê?£?24bit I2S PHLIP mode
//tas_WrByte(0X30,0x07); //éè??master volume for 0dB
sendbuf[0] = 0x30;
writeNbyte(0x07,1);
sendbuf[0] = 0xB8;
writeNbyte(0x11,1); //for BD mode , if chg to AD mode,need chg the conf
sendbuf[0] = 0x60;
writeNbyte(0x12,1); //for BD mode,System ??è??aAD?£ê?
sendbuf[0] = 0xA0;
writeNbyte(0x13,1); //for BD mode
sendbuf[0] = 0x48;
writeNbyte(0x14,1); //for BD mode
for(i=0;i<4;i++)
{
sendbuf[i] = in_MuxReg[i];
}
writeNbyte(0x20,4);
for(i=0;i<4;i++)
{
sendbuf[i] = out_MuxReg[i];
}
writeNbyte(0x25,4);
sendbuf[0] = 0x3A;
writeNbyte(0x19,1); //for PBTL mode
/*********************Exit shutdown***********************/
sendbuf[0] = 0x00; //0x02
writeNbyte(0x05,1); //exit shutdown command may not be serviced for as much as 240 ms
//after trim following AVDD/DVDD power-up ramp
//ADR/FAULT pin is configured as fault output
tas_delay(2000);
//tas_WrByte(0X30,0x07);//éè??master volume for 0dB
//tas_WrByte(0Xc0,0x08);//éè?? CH1 ò?á?
}
现在板子一点反应也没有,怎么也工作不了
我觉得你恐怕还得先检查一下硬件, 原理图和引脚有没有弄错, 电源有没有正常, 焊接有没有虚焊等等...
引脚连接什么的没有问题,电源也正常,5731现在跟MCU端I2C通迅的也仿真测试过了,读写后的数据都正常,现在就是怀疑5340和5731之间的I2S通迅问题,我看过它们两块芯片都不会向外提供MCLK,5340是作主机用的,它的SCLK和LRCK都是由MCLK分频得到的,现在的硬件上5340和5731间的I2S几根线就直接连接的,那这样的话通迅之间根本就没有时钟我觉得。手上现在没有示波器看不了有没时钟问题,正在买逻辑分析仪,等到手了就能看时钟有无问题。因为第一次做这种方案,心里没底,一个怕I2S之间有问题,还有一个不知道5731的那些个寄存器的值配置的对不对,还请帮帮忙,提供一些宝贵的意见,谢谢!
之前不知道这里发的帖子中上传的图片只能一张,当时选了三张上传的,现在只能看见一张了,我现在把三张放到一起再传一下,请大神帮忙鉴定一下是否有问题,并给出您的修改意见,急等帮忙......
CS5340工作模式应该设置为主模式吧,MCLK应该挂外部晶振挂个12.288M有源晶振试一下
我在网上买的有源晶振今天刚拿到手 还没来得及试 这个应该能解决时钟的问题 剩下就是5731的寄存器设置参数问题了,有熟悉这款芯片使用的各路大神给点参考