HDA 通常指 High Definition Audio(高清晰度音频),它是由 Intel 主导制定的一种 PC 音频硬件规范与总线协议。
如果说I2S支持大约96khz的8bit频率(ES8326),HDA支持大约192khz的32bit数据传输。
HDA的核心数据线一般被认为是4条:
BCLK:位时钟线,由控制器提供,频率通常为 24 MHz
SYNC:帧同步线,提供 48 kHz 的帧同步信号,同时也用于编码数据流标签
SDO:串行数据输出线,负责从控制器向 Codec 传输命令和音频数据
SDI:串行数据输入线,负责从 Codec 向控制器回传响应和音频数据
其中SDO和SDI可以在同一块CODEC上进行拓展。HDA的codec主要以瑞昱的ALC系列芯片为主要参考。
HDA协议简介
HDA的官方文档为《High Definition Audio Specification》
high-definition-audio-specification.pdf
具体到HDA芯片,可以参考ALC1200的手册:
具体来说,HDA协议可以参考这张图:

其中SDO是控制器发送给CODEC的,所以遵循前40bit为command,后面传数据这么一个格式。
SYNC线用于描述帧的起始边界、特殊控制时序、以及后续数据流的身份标签。
注意,HDA的寄存器控制也可以由HDA本身来执行,不依赖I2C。
HDA外设简介
HDA的外设在kernel中隶属于/sound/hda/codecs/下的各个驱动:
这是一个由Takashi Iwai维护的git项目(hda):https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git/tree/sound/hda/codecs
在其上一级目录中可以清晰的看出,kernel侧拥有独立驱动的厂家有:
Realtek(瑞昱)
Analog Devices(亚德诺)
Conexant(科胜讯)
VIA(威盛)
Cirrus Logic
Senarytech(顺芯微)
C-Media(骅讯)
HDA工具简介
这一部分跟I2S差不多,都是alsa-utils下的各个工具。