出于爱好,在用acm的芯片打了功放后,重新用ti的tas5825打了一块功放板,非常奢侈的用esp32做了主控:蓝牙接收音频信号和歌词信息。
和acm的芯片一样,ti的芯片并不是上电就能实现功放功能,必须通过mcu通过i2c进行控制。

int ic2(int add,int v){
Wire.write(add);
int d=Wire.write(v );
delay(5);
if(d>=0){
Serial.printf("address %d ,value: %d, return %d \n",add,v,d);
}
return d;
}
下面是setup中的操作
i2c的地址必须自己写代码去查找比较稳妥,因为官方datasheet中说的不是这个地址段。
以下i2c的操作基本保证了功放能够正常运行,也算是打开了dsp的,只是涉及到具体dsp的调整还有十万八千里。
Ti芯片的DSP功能,是在一个PPC软件中进行各种参数调整,然后导出配置后写入,所以如果你要玩TI的dsp,或者说其他的dsp基本也一样,必须找到相应的软件调整参数导入。这个过程在datasheet中并未提及。非常不友好,而且dsp涉及的参数非常多,很难手工每一项功能写代码来完成。
有人导出的dsp指令如下:
{ 0x00, 0x00 },
{ 0x7f, 0x00 },
{ 0x03, 0x02 },
{ 0x01, 0x11 },
{ 0x00, 0x00 },
{ 0x00, 0x00 },
{ 0x00, 0x00 },
{ 0x00, 0x00 },
{ 0x00, 0x00 },
{ 0x7f, 0x00 },
{ 0x7d, 0x11 },
{ 0x7e, 0xff },
{ 0x00, 0x01 },
{ 0x51, 0x05 },
{ 0x00, 0x02 },
{ 0x19, 0xa0 },
{ 0x1d, 0x01 },
{ 0x00, 0x00 },
{ 0x7f, 0x00 },
{ 0x46, 0x01 },
{ 0x00, 0x00 },
{ 0x02, 0x42 },
{ 0x53, 0x60 },
{ 0x54, 0x00 },
{ 0x00, 0x00 },
{ 0x7f, 0x00 },
{ 0x03, 0x02 },
我改造成arduino中的风格如下,以下代码可以正常开启功放功能。
bool ss=Wire.begin(pin_sda,pin_scl);
size_t ret=0;
Wire.beginTransmission(0x4c);
// 0x7f change book
//0x00 change page
// Serial.println(ret);
ic2( 0x00, 0x00);
ic2( 0x7f, 0x00);
//hiz
ic2( 0x03, 0x02);
//enabel dsp
//init dsp
ic2( 0x02, 0x02); //device mole 选择
ic2( 0x40, 0x01);
ic2( 0x46, 0x01);
ic2( 0x00, 0x00);
ic2( 0x7f, 0x78);
ic2( 0x00, 0x01);
ic2( 0x48, 0x01);
ic2( 0x7c, 0x01);
ic2( 0x00, 0x00);
ic2( 0x7f, 0x8c);
ic2( 0x00, 0x01);
ic2( 0x28, 0x40000001);
//play
ic2( 0x00, 0x00);
ic2( 0x7f, 0x00);
// ic2( 0x00, 0x00);
ic2( 0x03, 0x03);
// 68 读取电源状态
byte error;
error = Wire.endTransmission();
Serial.println(error);
其实如果只是打开功放功能 只需要最后三行代码就可以了:
补充说明:
1,仔细看datasheet中的上电顺序;
2,datasheet中只是说了很少一部分内容,其他还有很多文档请看ti官网;
3,如果打算自己调整,只能说这是一个苦逼的活;如果要调整dsp,想办法装ppc吧,好像要申请;
4,以下ti官方的文档都应该看一遍。


4946

被折叠的 条评论
为什么被折叠?



