硬件配置

硬件引脚说明:


数据手册第七页


10 引脚 DIF0 在寄存器控制模式下的 Lch 零 输入检测引脚(内部下拉引脚)


11 引脚 DIF1 在寄存器控制模式下的 Rch 零输入检测引脚 (内部下拉引脚)


12 引脚 DIF2 在寄存器控制模式下的芯片地址 0 引脚


13 引脚 PSN 引脚控制模式或寄存器控制模式选择引脚 (内部上拉引脚)

引脚 拉低“LOW”: 寄存器控制模式
引脚 拉高“HIGH”: 引脚控制模式

14 引脚 I2C 寄存器控制模式下的控制接口引脚, 拉高(HIGH)使用I2C总线控制模式 拉低(LOW)使用3线μP接口控制模式


如何设置寄存器控制模式

硬件引脚设置:

  1. 13 引脚 PSN 拉低 让芯片处于寄存器控制模式下

  2. 14 引脚 I2C 拉高 让芯片寄存器通讯协议处于I2C总线控制模式下

  3. 芯片I2C通讯地址位配置

    1. 芯片地址0 CDA0 拉高 1
    2. 芯片地址1 CDA1 拉高 1 从上面配置可以知道,从机地址为:00100 固定位+ 1 +1+R/W位 0x13
  4. 采样率自动设置与手动设置

寄存器控制模式

1. PCM 模式 引脚配置

分类 引脚名称 状态
模拟 AOUTLP 断开连接
AOUTLN 断开连接
AOUTRP 断开连接
AOUTRN 断开连接
数字 WCK 连接到DVSS
DEM0 连接到DVSS或未连接
TESTE 连接到DVSS或未连接
DZFL 断开连接
DZFR 断开连接

寄存器控制接口 通讯方式选择

寄存器控制接口有好几种:

引脚编号 引脚名称 描述
8 SD 数字滤波器选择引脚,在引脚控制模式下为 /DVSS
CCLK 寄存器控制模式下的控制数据时钟引脚,高阻态
SCL I2C=“H”: 寄存器控制模式下的控制数据时钟输入引脚
9 SLOW 数字滤波器选择引脚,在引脚控制模式下为 /DVSS
CDTI 寄存器控制模式下的控制数据输入引脚,高阻态
SDA I2C=“H”: 控制数据输入引脚(输入/输出)

硬件配置说明:

当I2C引脚拉处于高电平,配置芯片处于I2C总线控制模式,通过I2C总线(SDA 、SCL)读写寄存器来控制芯片工作。 所有的配置通过寄存器控制模式来配置。

(1) I2C总线控制模式(I2C引脚 = “H”)

AK4493S支持快速模式I2C总线(最大速度:400kHz,版本1.0)。

(2)-1. 写操作

图68显示了I2C总线模式的数据传输顺序。所有命令都以起始条件为前提。

在SCL高电平时,SDA线由高电平转为低电平表示起始条件(图74)。

在起始条件之后,发送从设备地址。

此地址长度为7位,接着是第八位的数据方向位(R/W)。

从设备地址的最高五位固定为“00100”。

接下来的位是CAD1和CAD0(设备地址位)。

这些位标识总线上特定的设备。硬连线输入引脚(CAD1引脚,CAD0引脚)设置这些设备地址位(图69)。

如果从设备地址匹配AK4493S的地址,AK4493S生成一个确认,操作即执行。主控必须在确认相关的时钟脉冲期间生成确认相关的时钟脉冲,并释放SDA线(高电平)(图75)。R/W位值为“1”表示将执行读操作,“0”表示将执行写操作。

第二字节包括AK4493S的控制寄存器地址,格式为最高位优先。

最高三位固定为“000”(图70)。

第二字节后的数据包含控制数据。

格式为最高位优先,8位(图71)。

每接收一个字节后,AK4493S生成一个确认。

数据传输总是由主控生成的停止条件结束。在SCL高电平期间,SDA线上的数据必须保持稳定。数据线的高电平或低电平状态只能在SCL线的低电平时改变(图76),除了起始和停止条件。 AK4493S可以在一个序列中执行多个字节的写操作。

接收第三个字节后,AK4493S生成一个确认并等待下一个数据。

主控可以传输多个字节,而不是在传输第一个数据字节后终止写周期。在接收每个数据包后,内部地址计数器增加1,并且下一个数据自动进入下一个地址。如果在生成停止条件之前地址超过“15H”,地址计数器将“回卷”至“00H”,并且之前的数据将被覆盖。

(2)-2. 读操作

设置R/W位=“1”进行AK4493S的读操作。在传输数据后,主控可以通过生成确认而不是在接收第一个数据字之后终止写周期,来读取下一个地址的数据。在接收每个数据包后,内部地址计数器增加1,下一个数据会自动进入下一个地址。如果在生成停止条件之前地址超过“15H”,地址计数器将“回卷”至“00H”,并且将读取“00H”的数据。 AK4493S支持两种基本的读操作:当前地址读和随机地址读。

(2)-2-1. 当前地址读

AK4493S具有内部地址计数器,它维护上一次访问的地址,加1。因此,如果上一次访问(无论是读取还是写入)的地址为“n”,下一个当前读操作将从地址“n+1”读取数据。在接收R/W位为“1”的从设备地址后,AK4493S生成一个确认,将1字节数据传输到内部地址计数器设定的地址,并将内部地址计数器增加1。如果主控不生成确认,而是生成停止条件,AK4493S将停止传输。

(2)-2-2. 随机地址读

随机读操作允许主控随机访问任何存储器位置。在发出带有R/W位“1”的从设备地址之前,主控必须首先执行“虚拟”写操作。主控发出启动请求、一个从设备地址(R/W位 = “0”)和要读取的寄存器地址。在寄存器地址得到确认后,主控立即重新发出启动请求和带有R/W位“1”的从设备地址。AK4493S随后生成一个确认、1字节数据,并将内部地址计数器增加1。如果主控不生成确认,而是生成停止条件,AK4493S将停止传输。

(2)3线串行控制模式(I2C引脚 = “L”)

引脚(引脚控制模式)或寄存器(寄存器控制模式)可以控制AK4493S的功能。

在引脚控制模式下,将忽略寄存器设置,在寄存器控制模式下将忽略引脚设置。

当PSN引脚的状态改变时,AK4493S应通过PDN引脚断电。

否则,可能会出现故障,因为之前的设置没有初始化。

通过设置PSN引脚 = “L” 可启用寄存器控制接口。

内部寄存器可以通过3线µP接口引脚进行写入:CSN、CCLK和CDTI。

该接口的数据包括芯片地址(2位,C1/0)、读/写(1位;固定为“1”,仅写入)、寄存器地址(高位优先,5位)和控制数据(高位优先,8位)。

数据在CCLK下降沿上输出,并在CCLK上升沿上接收。

当CSN“”时,数据的写入是有效的。CCLK的时钟速度为5MHz(最大)。

将PDN引脚设置为“L”会将寄存器重置为其默认值。在寄存器控制模式下,数字块除控制寄存器和时钟分频器外会通过将RSTN位设置为“0”来重置。

在这种情况下,寄存器的值不会被初始化。

CDTI CCLK C1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 C0 R/W A4 A3 A2 A1 A0 D7 D6 D5 D4 D3 D2 D1 D0 CSN C1-C0:芯片地址(C1位=CAD1引脚,C0位=CAD0引脚) R/W:读/写(固定为“1”,仅写入) A4-A0:寄存器地址 D7-D0:控制数据 图67. 控制接口时序

AK4493S不支持3线串行控制模式中的读取命令。

当AK4493S处于断电模式(PDN引脚 = “L”)时,禁止向控制寄存器写入。 当CSN为“L”时,在CCLK上升沿为15次或更少次,或17次或更多次时,不能写入控制数据。 CONFIDENTIAL [AK4493S] Rev. 00 2021/06

寄存器

地址 寄存器名 D7 D6 D5 D4 D3 D2 D1 D0
00H Control 1 ACKS EXDF ECS 0 DIF2 DIF1 DIF0 RSTN
01H Control 2 DZFE DZFM SD DFS1 DFS0 DEM1 DEM0 SMUTE
02H Control 3 DP ADP DCKS DCKB MONO DZFB SELLR SLOW
03H Lch ATT ATTL7 ATTL6 ATTL5 ATTL4 ATTL3 ATTL2 ATTL1 ATTL0
04H Rch ATT ATTR7 ATTR6 ATTR5 ATTR4 ATTR3 ATTR2 ATTR1 ATTR0
05H Control 4 INVL INVR 0 0 0 0 DFS2 SSLOW
06H DSD1 DDM DML DMR DDMOE DDMT1 DDMT0 DSDD DSDSEL0
07H Control 5 0 0 0 0 GC2 GC1 GC0 SYNCE
08H Sound Control 0 0 0 0 SC2 SC1 SC0 -
09H DSD2 0 0 0 0 0 0 DSDF DSDSEL1
0AH Control 6 TDM1 TDM0 SDS1 SDS2 0 PW 0 0
0BH Control 7 ATS1 ATS0 0 SDS0 0 0 0 TEST
0CH Reserved 0 0 0 0 0 0 0 -
0DH Reserved 0 0 0 0 0 0 0 -
0EH Reserved 0 0 0 0 0 0 0 -
0FH Reserved 0 0 0 0 0 0 0 -
10H Reserved 0 0 0 0 0 0 0 -
11H Reserved 0 0 0 0 0 0 0 -
12H Reserved 0 0 0 0 0 0 0 -
13H Reserved 0 0 0 0 0 0 0 -
14H Reserved 0 0 0 0 0 0 0 -
15H Control 8 ADPE ADPT1 ADPT0 0 0 0 0 0

设置PCM模式

硬件

3 引脚 BICK PCM 模式下的音频串行数据时钟引脚

4 引脚 SDATA PCM 模式下的音频串行数据输入引脚

5 引脚 LRCK PCM 模式下的 L/R 时钟引脚

寄存器设置


初始化和控制逻辑

用于初始化和控制AK4493 DAC(数字到模拟转换器)芯片。整个逻辑可以分为几个部分:

初始化DAC (AK4493Init 函数):

  • 清屏并显示初始化信息。
  • 通过MCP芯片重置DAC。
  • 检查DAC是否响应。
  • 如果启用了DUALMONO,检查第二个DAC是否响应。
  • 写入寄存器来初始化DAC。
  • 如果启用了AutoDSD,配置DAC以自动检测PCM或DSD。
  • 如果启用了DUALMONO,为双单声道模式配置两个DAC。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
graph TD
    A[开始] --> B[清屏并显示"Initializing AK4493....."]
    B --> C[通过MCP芯片重置DAC]
    C --> D{检查DAC是否响应}
    D -->|是| E[显示"AK4493 found!"]
    D -->|否| F[显示"No response from AK4493!"]
    E --> G{是否定义了DUALMONO}
    F --> G
    G -->|是| H[检查第二个DAC是否响应]
    G -->|否| I[初始化DAC(写入寄存器)]
    H -->|是| J[显示"AK4493r found!"]
    H -->|否| K[显示"No response from AK4493r!"]
    J --> I
    K --> I
    I --> L{是否定义了AutoDSD}
    L -->|是| M[启用PCM或DSD的自动检测]
    L -->|否| N[继续初始化流程]
    M --> N
    N --> O{是否定义了DUALMONO}
    O -->|是| P[为双单声道模式配置两个DAC]
    O -->|否| Q[完成DAC初始化]
    P --> Q[完成DAC初始化]
    Q --> R[结束]

设置DAC参数 (SetDACParam 函数):

根据采样率(SR_DAC变量)设置MCLK或者手动设置AK4493的采样率模式。

设置音量 (SetVol 函数):

写入左右声道的音量寄存器。 如果定义了DUALMONO,则对第二个DAC执行相同的操作。

读取PCM/DSD状态 (ReadAKStatus 函数):

读取DAC的状态寄存器,判断是PCM信号还是DSD信号。

设置DAC模式 (SetDACMode 函数):

根据dacMode变量设置DAC为PCM模式或DSD模式。 如果定义了DUALMONO,则对第二个DAC执行相同的操作。

设置DAC滤波器 (SetFilter 函数):

根据dacFilter变量设置DAC的滤波器类型。

启用DSD直通模式 (EnableDirectDSD 函数):

根据directDsd变量启用或禁用DSD直通模式。

设置DSD滤波器频率 (SetDSDFilter 函数):

根据dsdFilter变量设置DSD滤波器的截止频率。

设置声音模式 (SetSoundMode 函数):

根据soundMode变量设置DAC的声音模式。

设置正相或反相输出 (SetInvertPhase 函数):

根据InvertPhase变量设置DAC输出的相位。

设置DAC自动或手动模式 (SetDACAutoMode 函数):

根据DACAutoMode变量设置DAC的工作模式。

设置DAC采样率 (SetDAC_SR 函数):

根据SR_DAC变量设置DAC的采样率。 如果定义了DUALMONO,则对第二个DAC执行相同的操作。

结论

整个程序的目的是通过I2C接口与AK4493 DAC通信,根据用户的配置和输入信号类型(PCM或DSD)来设置DAC的工作参数。

这包括音量控制、滤波器选择、采样率设置、相位控制等。

如果系统配置为双单声道模式,那么所有的设置都会应用到两个DAC上。

硬件配置模式

开启硬件配置

引脚 名称 电平 连接方式 功能描述
6 WCK L 连接VSS
7 CSN L 连接VSS 将芯片控制模式设置为寄存器控制
8 I2C_SCL - 10k上拉 I2C时钟
9 I2C_SDA - 10K上拉 I2C数据
10 DZFL L 悬空
11 DZFR L 悬空
12 CAD0 H 连接VDD I2C从机地址选择
13 PSN L 连接VSS 高电平是PIN脚硬件控制模式,低电平是寄存器控制模式
14 I2C H 连接VDD I2C总线控制选择,高电平为I2C总线协议
15 DEM0 L 悬空
16 LDOE H 连接VDD 启用内部LDO1.8V
17 CAD1 H 连接VDD I2C从机地址选择