关于A2B AD24xx调试步骤:
-
编译 ADI 代码:首先需要下载 ADI 提供的 A2B 软件开发工具包(SDK),A2B 软件 SDK 官方下载,
-
文中提到的所有代码和文档都在这款软件的安装路径下。然后按照SDK提供的
AE_09_A2B_Stack_UserGuide.pdf
文档编写需要的代码的Makefile,并将代码加入到自己驱动中。 -
必须的函数实现:我们需要实现 I2C 和 time 功能接口。这些接口通常由硬件提供商或芯片制造商提供,然后需要参考 ADI 提供的
AE_09_A2B_Stack_UserGuide.pdf
文档3.2.1章节,按照说明实现adi_a2b_pal.c
中的一些接口,建议复制 a2b-bf 目录下东西作为自己开发基线。 -
SigmaStudio+ 导出配置:SigmaStudio+ 是一款音频处理软件,可以用于对 AD24xx 系列芯片进行配置。在使用 SigmaStudio+ 导出之前,需要先配置 A2B 链路,然后导出生成.c文件。这些需要参考 SigmaStudio+ 相关文档,按照说明完成。
设备发现流程
Early Sync
A2B_I2SGCFG.EARLY
位控制的是A2B_SYNC
引脚是否在数据槽 0 的 MSB(最重要位)之前的一个周期发生变化- 如果
EARLY = 1
,A2B_SYNC
引脚会在数据槽 0 的 MSB 之前的一个时钟周期变化(提前同步)。如果设备需要更严格的同步时序,可能需要EARLY = 1
- 如果
EARLY = 0
,A2B_SYNC
引脚会与数据槽 0 的 MSB 在同一周期内发生变化。如果设备对时序要求不太严格,或者数据槽 0 的 MSB 变化时就可以开始同步信号,可以设置为EARLY = 0
数据槽 0: [---- MSB ----] [---- LSB ----]
A2B_SYNC: ↑------------------------------- (EARLY = 1, 提前一个周期)
------------------------------- ↑ (EARLY = 0, 同周期)
Alternating Sync(Sync Mode)
A2B_I2SGCFG.ALT
位控制的是A2B_SYNC
引脚在立体声模式下(I2S Stereo Mode)如何变化- 如果
ALT = 1
,A2B_SYNC
引脚会在每个采样周期的开始时脉冲高电平(持续一个周期)。更适合需要明确周期性同步信号的情况(比如采样周期的开始标识) - 如果
ALT = 0
,A2B_SYNC
引脚会在右声道数据期间保持高电平,而在左声道数据期间保持低电平。更适合左右声道(或多个通道)之间交替变化的同步方式,特别是在 I2S 立体声或 TDM 模式下
数据槽 0: [ 右声道数据 ] [ 左声道数据 ] [ 右声道数据 ] [ 左声道数据 ]
A2B_SYNC: ↑ ↓ ↑ ↓ (ALT = 0)
------------------------> 同周期 右/左声道数据
(ALT = 1):
A2B_SYNC: ↑----------------------↑---------------------↑
TDM Channel Size(Sync)
AD2433(TDM8)
/dev/i2c-16 write device(0x68) reg=0x12 018, val=0x04 (0000 0100), cnt=1
sleep 0x19ms
/dev/i2c-16 read device(0x68) reg=0x16 022, val=0x00 (0000 0000), cnt=1
/dev/i2c-16 read device(0x68) reg=0x02 002, val=0xAD (1010 1101), cnt=3
/dev/i2c-16 read device(0x68) reg=0x03 003, val=0x33 (0011 0011), cnt=3
/dev/i2c-16 read device(0x68) reg=0x04 004, val=0x20 (0010 0000), cnt=3
/dev/i2c-16 read device(0x68) reg=0x5E 094, val=0x00 (0000 0000), cnt=1
/dev/i2c-16 write device(0x68) reg=0x12 018, val=0x84 (1000 0100), cnt=1
sleep 0x19ms
/dev/i2c-16 read device(0x68) reg=0x16 022, val=0x80 (1000 0000), cnt=1
/dev/i2c-16 read device(0x68) reg=0x17 023, val=0xFF (1111 1111), cnt=1
Interrupt Source: Master - Interrupt Type: Ignorable interrupt (Code: 255)
sleep 0x19ms
/dev/i2c-16 read device(0x68) reg=0x16 022, val=0x00 (0000 0000), cnt=1
/dev/i2c-16 read device(0x68) reg=0x02 002, val=0xAD (1010 1101), cnt=3
/dev/i2c-16 read device(0x68) reg=0x03 003, val=0x33 (0011 0011), cnt=3
/dev/i2c-16 read device(0x68) reg=0x04 004, val=0x20 (0010 0000), cnt=3
/dev/i2c-16 write device(0x68) reg=0x1B 027, val=0x77 (0111 0111), cnt=3
/dev/i2c-16 write device(0x68) reg=0x1C 028, val=0x78 (0111 1000), cnt=3
/dev/i2c-16 write device(0x68) reg<