This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TLV320AIC23B-Q1: 无声音输出

Part Number: TLV320AIC23B-Q1

您好,

目前我们配置这个codec,无声音传输。

背景:codec做slave设备,使用I2S接口,采样频率48k,16bit,选择I2C配置

已经确认进入codec的I2S信号没有问题,引线外接一个I2S设备可以正常出声音。

还请帮忙check一下回路是否有问题。

1. 如果作为从设备,MCLK是不是就不用接续?

2. 理解直接(Address: 0001001) Digital Interface active就可以正常出声音吧?就算采样频率配置不同的话,声音应该也是可以出的吧

3. 寄存器配置有顺序要求吗?能提供个样例吗?

tlv320aic23b.pdf

  • 您好,作为从设备也是需要MCLK的,MCLK或者晶振频率,以及采样率控制寄存器的配置控制了AIC23B的频率和采样率。

    但是通常由于晶振易漂移或不稳定的特性,我们不建议使用晶振提供MCLK。参考这篇应用手册中的介绍:https://www.ti.com/lit/an/slaa469a/slaa469a.pdf

    关于寄存器的配置顺序,我这边找了一个大致的顺序,可以参考下:

    1. reset register (Reg. 0x0F)
    2. set your clock/sample rate (Reg. 0x08)
    3. set audio format (Reg. 0x07)
    4. activate digital interface (Reg. 0x09)
    5. set input/output volume (Reg. 0x00 to Reg. 0x03)
    6. set analog path (Reg. 0x04)
    7. set digital path if needed (Reg. 0x05)
    8. enable the power (Reg. 0x06)
  • 好的,了解了,我按这个顺序试一下

    另外,还要请教两个问题

    1. 由于之前没设计过耳机接口,贵司有推荐标准回路吗?HP的模拟输出的电容值应该怎么选?

    2. 使用I2C接口,怎么读CODEC的寄存器?没使用过这种16bit的,能举个例子吗?

  • 您好,耳机接口的电路AIC23 我这边没有找到,一会儿我看下其他codec是否有EVM参考电路。

    第二就是您提到I 2C 接口,AIC23 是既可以使用SPI,也可以使用2 wire接口,这个2 wire接口看起来和I2C时序很像,但是也是8bit的寄存器,不是16bit 呢:

  • 您好

    根据您截的式样书中的timing

    bit[15:9]是IC的寄存器地址 7bit

    bit[8:0]是寄存器的data 9bit

    但是通常的I2C,寄存器和data都是8bit

    这个CODEC寄存器配置应该如下,以0x0F为例

    设备地址为0x1B

    所有寄存器都reset,bit9就会移到寄存器地址的最低位,所以0x0F就变为0x1F

    write_reg(handle, 0x1B, 0x1F, 0xFF);

    写寄存器可以理解,这么写没错吧?

    但是读寄存器的话,命令应该怎么发呢?

  • 您好,寄存器地址可以看到是7bit的,data是9bit的,所以在配置寄存器的时候,将data的MSB bit8 放在寄存器地址的最低为LSB bit15:8.

    读取都是一样的。寄存器地址的最低位LSB是data的最高位MSB。

  • 您好,

    不同寄存器data的MSB 0和1的情况都可能会出现

    通常软件的同事读指令是这么发送的。

    标红的是寄存器地址,之前用的都是8bit的

    read_reg(i2c_handle, 0x1B, 0x1F, &val);

    但是对于这个CODEC,应该怎么发,给个样例呗。

    因为寄存器地址是7bit,这时标红色的位置应该写7bit的寄存器地址吗?

  • 首先只能对AIC23这颗器件进行寄存器的写操作,不能读,因此7bit从机地址之后的R/W位只能为0. 

    之后第九个clock是应答ACK信号,从机地址之后主机会发一个ACK信号,此时主机将SDA信号拉低。 

    后面就是寄存器地址,可以看到data的B8 作为寄存器地址的最低位。

    举个例子,我们想写寄存器0000000的值为1 10010111. 那么时序就应该是:

    start+7bit从机地址+W(0)+ACK(0)+0x01(register address)+ACK+0X97(register data)

    不知这样是否能明白呢?

  • 好的,了解了,多谢!