TI中文支持网
TI专业的中文技术问题搜集分享网站

AIC3254的寄存器配置问题

你好,

我现在正在测试AIC3254的环出:模拟信号进行A/D转换生成数字信号后,经过了一个均衡器,再进行D/A转化为模拟信号经过HeadPhone输出。调了几天了,都不通,不知道哪里有问题。

==================================================================================================================

我的硬件是将AIC3254与DM8168的McASP[0]想连接。3254的MCLK由外部晶振提供,频率为24.576KHz。设置采样率为44.1KHz。计算时钟见下图。

====================================================================================================

我在PPS里的编程如下:

====================================================================================================

我将生成的代码通过PPS写入评估板,评估板能正常工作。然后我把生成的寄存器数组(修改电源,时钟,接口,通道后)通过自己的程序写入3254芯片,却没有输出。

下面是我修改后的寄存器代码(自己修改的寄存器后都有注释/////////////):

static const t_i2c_reg i2c_aic3254[] = {/*{{{*/
{ 0,0×00},
// # reg[ 0][ 1] = 0x01 ; Initialize the device through software reset
{ 1,0×01},
{254,0x0A},
{ 0,0×01},
// # reg[ 1][ 1] = 0x08 ; Power up AVDD LDO; Disable weak AVDD to DVDD connection; Enable Master Analog Power Control, AVDD LDO Powered; Disable weak AVDD to DVDD connection
{ 1,0×08},
// # reg[ 1][ 2] = 0x00 ; Enable Master Analog Power Control
{ 2,0xF0},////////////////
// # reg[ 1][ 71] = 0x32 ; Set the input power-up time to 3.1ms
{ 71,0×32},
// # reg[ 1][123] = 0x01 ; Set REF charging time to 40ms (automatic)
{123,0×01},
{255,0×00},
{255,0×01},
{ 0,0×00},
// # reg[ 0][ 60] = 0x00 ; DAC prog Mode: miniDSP_A and miniDSP_D NOT powered up together, miniDSP_A used for signal processing
{ 60,0×00},
// # reg[ 0][ 61] = 0x00 ; Use miniDSP_A for signal processing
{ 61,0×00},
// # reg[ 0][ 17] = 0x08 ; 8x Interpolation
{ 17,0×08},
// # reg[ 0][ 23] = 0x04 ; 4x Decimation
{ 23,0×04},
// { 15,0×03},
// { 16,0×88},
// { 21,0×03},
// { 22,0×88},
{ 0,0×08},
// # reg[ 8][ 1] = 0x04 ; adaptive mode for ADC
{ 1,0×04},
{ 0,0x2C},
// # reg[ 44][ 1] = 0x04 ; adaptive mode for DAC
{ 1,0×04},
{ 0,0×00},
// # reg[ 0][ 5] = 0x91 ; P=1, R=1, J=8
{ 5,0xA1},///////// # PLL is powered up;P=2;R=1
// # reg[ 0][ 6] = 0x08 ; P=1, R=1, J=8
{ 6,0×07},///////// J=7
// # reg[ 0][ 7] = 0x00 ; D=0000 (MSB)
{ 7,0x0D},///////// D=3500(MSB)
// # reg[ 0][ 8] = 0x00 ; D=0000 (LSB)
{ 8,0xAC},///////// D=3500(LSB)
// # reg[ 0][ 4] = 0x03 ; PLL_clkin = MCLK, codec_clkin = PLL_CLK, PLL on
{ 4,0×43},///////////
// # reg[ 0][ 12] = 0x88 ; MDAC = 8, divider powered on
{ 12,0×82},/////////M=2
// # reg[ 0][ 13] = 0x00 ; DOSR = 128 (MSB)
{ 13,0×00},
// # reg[ 0][ 14] = 0x80 ; DOSR = 128 (LSB)
{ 14,0×80},
// # reg[ 0][ 18] = 0x02 ; NADC = 2, divider powered off
{ 18,0×08},/////////N=8
// # reg[ 0][ 19] = 0x88 ; MADC = 8, divider powered on
{ 19,0×82},/////////M=2
// # reg[ 0][ 20] = 0x80 ; AOSR = 128
{ 20,0×80},
// # reg[ 0][ 11] = 0x82 ; NDAC = 2, divider powered on
{ 11,0×88},/////////N=8
///////////////////////////////////// Audio Interface Settings
{0x1b,0x0c},//////// # I2S;16bit;BCLK output;WCLK output
{0x1c,0x00},//////// # Data Offset = 0BCLK
{0x1d,0x03},//////// {0x1e,0x82},////////
{0x20,0x00},////////
{0x21,0x18},//////// { 0,0×01},
// # reg[ 1][ 51] = 0x40 ; Mic Bias enabled, Source = Avdd, 1.25V
{ 51,0×40},
// # reg[ 1][ 52] = 0x40 ; Route IN2L to LEFT_P with 10K input impedance; Route CM1L to LEFT_M with 10K input impedance; Route IN2R to RIGHT_P with 10K input impedance; Route IN1L to LEFT_P with 10K input impedance
{ 52,0×55},///////// # Route IN1_L IN2_L IN3_L IN1_R to Input LEFT_P// # reg[ 1][ 54] = 0x40 ; Route CM1L to LEFT_M with 10K input impedance
{ 54,0×40},
// # reg[ 1][ 55] = 0x40 ; Route IN1R to RIGHT_P with 10K input impedance
{ 55,0×55},//////// # Route IN1_R IN2_R IN2_R IN2_L to Output RIGHT_P// # reg[ 1][ 57] = 0x40 ; Route CM1R to RIGHT_M with 10K input impedance
{ 57,0×40},
// # reg[ 1][ 59] = 0x00 ; Enable MicPGA_L Gain Control, 0dB
{ 59,0×00},
// # reg[ 1][ 60] = 0x00 ; Enable MicPGA_R Gain Control, 0dB
{ 60,0×00},
{ 0,0×00},
// # reg[ 0][ 81] = 0xc0 ; Power up LADC/RADC
{ 81,0xC0},
// # reg[ 0][ 82] = 0x00 ; Unmute LADC/RADC
{ 82,0×00},
{0x53,0x14},///////// # ADC_L Gain 10dB
{0x54,0x14},///////// # ADC_L Gain 10dB
{ 0,0×01},
// # reg[ 1][ 20] = 0x25 ; De-pop: 5 time constants, 6k resistance
{ 20,0×25},
// # reg[ 1][ 12] = 0x08 ; Route LDAC to HPL
{ 12,0x0a},/////////
// # reg[ 1][ 13] = 0x08 ; Route RDAC to HPR
{ 13,0x0a},/////////
// # reg[ 1][ 14] = 0x08 ; Route LDAC to LOL
{ 14,0×08},
// # reg[ 1][ 15] = 0x08 ; Route LDAC to LOR
{ 15,0×08},
{ 0,0×00},
// # reg[ 0][ 63] = 0xd4 ; Power up LDAC/RDAC w/ soft stepping
{ 63,0xD4},
{ 0,0×01},
// # reg[ 1][ 16] = 0x00 ; Unmute HPL driver, 0dB Gain
{ 16,0×00},
// # reg[ 1][ 17] = 0x00 ; Unmute HPR driver, 0dB Gain
{ 17,0×00},
// # reg[ 1][ 18] = 0x00 ; Unmute LOL driver, 0dB Gain
{ 18,0×00},
// # reg[ 1][ 19] = 0x00 ; Unmute LOR driver, 0dB Gain
{ 19,0×00},
// # reg[ 1][ 9] = 0x3c ; Power up HPL/HPR and LOL/LOR drivers
{ 9,0x3C},
{ 0,0×00},
// # reg[ 0][ 64] = 0x00 ; Unmute LDAC/RDAC
{ 64,0×00},
// # reg[0][82] = 0
{ 82,0×00},
// # reg[0][83] = 0
{ 83,0×00},
// # reg[0][86] = 32
{ 86,0×20},
// # reg[0][87] = 254
{ 87,0xFE},
// # reg[0][88] = 0
{ 88,0×00},
// # reg[0][89] = 104
{ 89,0×68},
// # reg[0][90] = 168
{ 90,0xA8},
// # reg[0][91] = 6
{ 91,0×06},
// # reg[0][92] = 0
{ 92,0×00},
// # reg[0][84] = 0
{ 84,0×00},
// # reg[0][94] = 32
{ 94,0×20},
// # reg[0][95] = 254
{ 95,0xFE},
// # reg[0][96] = 0
{ 96,0×00},
// # reg[0][97] = 104
{ 97,0×68},
// # reg[0][98] = 168
{ 98,0xA8},
// # reg[0][99] = 6
{ 99,0×06},
// # reg[0][100] = 0
{100,0×00},
{0, 0xFF},
};/*}}}*/

static const t_i2c_reg miniDSP_A_reg_values[] = {

   。。。。

};

static const t_i2c_reg miniDSP_A_reg_values[] = {

   。。。。

};

Flora Wang:

 你好:

1.你使用我们工具的方法都是对的。

2.编程写到自己的板子上去,首先要确认板子的连接和EVM一样,如果不一样,就得改代码。

3.芯片和McASP接口相连,不是用I2S格式,应该用DSP格式。也就是说:

{0x1b,0x0c},//////// # I2S;16bit;BCLK output;WCLK output

这里要改。另外你是codec做主吧,我看你选的BCLK和WCLK都是输出,如果是做主,可以先看一下配置的有没有时钟。

4.看一下你的数据格式,看一下DM8168的音频格式有没有offset。

 

chunhua jiang:

回复 Flora Wang:

你好,

    非常感谢这么快就能得到你的回复!

    1、连线是一样的。

    2、谢谢提醒用DSP格式。CODEC是主设备,MCLK,BCLK,WCLK都用示波器测试了,是正确的。

    3、Data Offset是设为0的。

    4、现在正在努力的调试ing。

chunhua jiang:

回复 Flora Wang:

Hi:

      还有一个现象,虽然A/D—D/A这条通道走不通,但是miniDSP的旁路能走通。请问这是什么原因,分析分析

chunhua jiang:

回复 Flora Wang:

你好,

      我描述一下我现在的进展。

      现在想了一个没有办法的办法,将焊接在8168板子的3254芯片的三根I2C引脚引出来,连接到EVM板的底板上,通过EVM的底板控制8168上的3254芯片,进行对比调试(此时8168的板子提供3254的电源)。

      ①当直接使用原始EVM板时,将PPS生成的配置文件下载到EVM的3254芯片内部,芯片能正常工作,然后记录下此时的各种输入时钟,包括CODEC_CLKIN,DAC_CLK,DAC_MOD_CLK,DAC_FS, ADC_CLK,ADC_MOD_CLK,ADC_FS,以及IADC,IDAC。

     ②当使用EVM的底版连接控制8168板子上的3254芯片时,也将PPS下载到此时的3254芯片内部,然后修改时钟,使3254的时钟输入与步骤①所述的时钟一模一样,但是仍未能调通。

     最后有一个不情之请,请问上海这边的工程师有没有懂音频的,能否提供现场技术支持?

    我的邮箱:jiangch@genvision.cn

    谢谢。

Yuecheng Li:

chunhua jiang,你好,

我最近在调试自己做的AIC3253板子,前端输入是立体声数字麦克风(2个),参考了slau303第4章的配置,能输出时钟给DMIC并且收到了DMIC的输出数据,AIC3253工作在master i2s模式,现在只能看到bclk有输出,wclk上面虽然有信号,但是跟纹波噪声似的,dout一直为低,不知道问题在哪里。

我仔细看了SLAU303中关于PLL的部分,注意到有一些约束,我最后的配置如下:MCLK=12M,48KHz采样,P=1,R=1,J=10,D=2400,N=5,M=8,AOSR=64。能帮忙看看这样设置对吗?你这里用的PLL CALCULATOR是TI提供的吗?在哪里能找到?

多谢!

Yuecheng Li:

回复 Yuecheng Li:

我发现我的配置不满足Table2-21的条件,所以重新修改了一下:

MCLK=12M,48KHz采样,P=1,R=1,J=8,D=1920,N=2,M=16,AOSR=64。

现象还是一样的,wclk上只有像纹波噪声一样的起伏变化,dout始终为低;

我把ADC signal processing block设置成了PRB_R7,也就是只有decimation filter B和1st order IIR的配置,采用default coefficients,也就是0dB,但是对上述现象没有影响。。。

Yuecheng Li:

回复 Yuecheng Li:

纹波噪声已经清除,wclk始终为高,dout始终为低,只有bclk有输出。

blackfish:

请问楼主pll calculator那张图的软件是,方便提供下下载链接吗,谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » AIC3254的寄存器配置问题
分享到: 更多 (0)