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.

[参考译文] TAS5720A-Q1:TAS5720A-Q1 I2C 无地址匹配。

Guru**** 1129500 points
Other Parts Discussed in Thread: TAS5720A-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/902675/tas5720a-q1-tas5720a-q1-i2c-no-adress-matching

器件型号:TAS5720A-Q1

我 在电路板中使用双通道 TAS5720A-Q1。 这两个 IC 与 STM32F4相连。 我将分享我的设计、I2C 级存在一些问题。 当我将地址发送到 TAS IC 时、没有匹配项。 它始终返回地址阶段的 Acknugge 故障。 器件 ID 设置为 D8和 DA。 下面是我的设计。  e2e.ti.com/.../aa.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ismail、

    • 请检查 FAULT 引脚以查看是否存在故障。
    • 不确定您的 MCU 需要哪种类型的地址。 D8&DA 是8位地址。 请尝试使用7位地址6C&6D。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我 检查 了该引脚和处于高电平。 我从未开始与 TAS5720通信。 MCU 使用7位寻址模式、但我要写入8位寻址。 MCU 根据操作屏蔽最后一位。 BTW、我扫描 了0-255之间的线。 没有匹配项。 代码如下所示。

    对于(uint8_t DeviceID=1;DeviceID<=255;DeviceID++)
    {
    _Bool 结果= HAL_I2C_IsDeviceReady (&hi2c3、DeviceID、5、Time_out);
    if (结果=HAL_OK)
    {
    I2CDevices[计数器];
    COUNTER++;
    if (counter==5) counter=0;
    }
    } 

    这也是我的初始化阶段。 DeviceReady 状态存在问题。

    /*包括------------------------------------------ */
    #include "stm32f4xx_hal.h"
    #include "stm32fxx_user_TAS5720AQ1.h"
    /*------------------------------------------------------- */
    static uint8_t iData[3];
    static I2C_HandleTypeDef i2cx;
    extern I2S_HandleTypeDef hi2s3;
    extern void Error_Handler (void);
    //(1):函数定义
    //--- 静态函数--- //
    //函数(1):写入寄存
    器静态空 write_register (uint8_t reg、uint8_t *数据)
    {
    iData[0]= reg;
    iData[1]= data[0];
    HAL_I2C_Master_transmit (&i2cx、device_ID、iData、 2、TIME_OUT);
    //HAL_I2C_Master_Transmit (&i2c1、DAC_I2C_ADDR、DATA、 大小、100);
    }
    //函数(2):从寄存
    器静态空 read_register (uint8_t reg、uint8_t *数据)
    {
    iData[0]= reg;
    HAL_I2C_Master_transmit (&i2cx、device_ID、iData、1、 TIME_OUT);
    HAL_I2C_Master_Receive (&i2cx、DEVICE_ID、DATA、1、 TIME_OUT);
    }
    //--------------- 公共职能--- //
    
    //函数(2):TAS5720AQ1初始
    化无效 TAS5720AQ1_Init (I2C_HandleTypeDef i2c_handle)
    {
    
    __HAL_unlock (&hi2s3); //这对于 I2S3的工作非常重要!!
    _HAL_I2S_ENABLE (&hi2s3);//这对于 I2S3的工作至关重要!!
    //(1):获取 I2C 句柄
    i2cx = i2c_handle;
    if (HAL_I2C_IsDeviceReady (&i2cx、device_ID、1、time_out)!=HAL_OK)
    {
    Error_Handler ();
    }
    //(2):首先关闭扬声器。 以减少初始化时的功耗。
    iDATA[1]= 0x00;
    WRITE_register (REG_ADR_POWER_CONTROL、iData);//关闭正常。
    //(3):扬声器 L/R 通道静音以初始化过程。
    READ_register (REG_ADR_VOL_CONTROL、&iData[1]);//读取该寄存器包含保留位以显示其值。
    iDATA[1]&&(0x1F<2);//清除除保留的位[6:2]之外的所有位。 用户不对保留位进行任何更改。
    iDATA[1]|=~(1<<7);//禁用卷衰减。
    iDATA[1]|=(1<<1);//右侧通道被静音。
    iDATA[1]|=(1<0);//左通道被静音。
    WRITE_REGISTER_ADR_VOL_CONTROL、iData);
    //(4):接口和滤波器控制
    READ_register (REG_ADR_DIGITAL_CONTROL、&iData[1]);//读取该寄存器包含保留位以显示其值。
    iDATA[1]&=(1<<6);//清除除保留的位6之外的所有位。 用户不对保留位进行任何更改。
    iDATA[1]&=~(1<<7);//不会绕过数字路径中的内部高通滤波器。
    iDATA[1]|=(1<<4);在数字路径中的信号中添加//+6dB。 (默认值)
    __NOP();//无需实现采样率。 它是48kHz、3.bit 已经为0。
    iDATA[1]|=(1<<3);//串行音频输入格式为 I2S。 (默认值)
    WRITE_register (REG_ADR_DIGITAL_CONTROL、iData);
    //(5):模拟控制
    READ_register (REG_ADR_ANALOG_CONTROL、&iData[1]);
    iData[1]&&(0x81<<6);//清除除0以外的所有位(设置为零)。 和7. 保留位。
    iDATA[1]|=(1<<7);//7.bit 保留、但必须设置为1。 有关更多信息、请查看数据表。
    iDATA[1]|=(5<<4);//扬声器放大器的输出开关速率为16 * LRCK。 (默认值)
    __NOP();//不需要实现。 模拟增益设置为19.2dBV (默认)。 [3:2]已经是00。
    __NOP();//软件控制模式的通道选择。 通过设置2选择"右"。 位设为0。
    WRITE_register (REG_ADR_ANALOG_CONTROL、iData);
    //(6):扬声器已关闭。
    iDATA[1]= 0x01;
    WRITE_register (REG_ADR_POWER_CONTROL、iData);//扬声器放大器未关闭。
    //(6):扬声器将取消静音。
    Read_register (REG_ADR_VOL_CONTROL、&iData[1]);
    iData[1]&&~(3);//左/右通道现在未静音。
    WRITE_register (REG_ADR_VOL_CONTROL、iData);
    //(7):将卷设置为默认值(0dB)
    iData[1]= 0xCF;//通道卷为0dB (默认值)。有关详细信息、请查看数据表。
    WRITE_register (REG_ADR_RIGHT _VOL_CONTROL、&iData[1]);
    WRITE_register (REG_ADR_LEFT_VOL_CONTROL、&iData[1]);
    __NOP ();//现在,器件可供使用
    
    。}
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ismail、

    请检查以下项目:

    • 通过监测 SD 输入、确保器件未进入 SD 模式;
    • 确保 I2C 总线被正确上拉;
    • 检查所有电源引脚(AVDD、DVDD、PVDD、ANA_REG、VCOM、 GVDD_REG)。
    • 捕获通信期间的 I2C 总线波形。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hector、您好!

    我将使用仅包含 TAS5720而非整个器件的 PCB、然后尝试。 我想问一些重要的问题。 我共享了 TAS5720初始化代码、如您所见。 是否可以检查我的代码? 在设置与 TAS5720的通信之前,硬件是否有任何作用? 可能会将低电平或高电平拉至关断等状态?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ismail、

    您手头上是否有 EVM? 您可以在 EVM 板上尝试代码。 有关启动过程、请参阅数据表中的9.2.2.2.1部分。

    我建议您首先检查电路板上的电源电压、然后监控 I2C 波形。 BTW、您能否访问电路板上的其他 I2C 从器件?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不幸的是、我没有。 这相当昂贵。 我只有4个样本。 SPK_SD 可由 SW 或 HW 拉取。我不确定是否 在 I2C 启动之前由硬件将该引脚拉至低电平。  

    if (HAL_I2C_IsDeviceReady (&i2cx、device_ID、1、time_out)!=HAL_OK)
    {
    ERROR_Handler();
    }
    //(2):扬声器先关闭。 以减少初始化时的功耗。
    iDATA[1]= 0x00;
    WRITE_register (REG_ADR_POWER_CONTROL、iData);//关闭正常。 

    如您所见、在 器件 ID 匹配提供之后、我通过软件进入器件的 SD 模式。 但始终返回错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ismail、

    建议仅在关断模式下修改寄存器(除非您正在调整音量)。 您可以通过 HW 或 SW 将器件置于 SD 模式。