尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

HD Audio与SoundWire总线之争:Realtek Codec如何二十年不倒

HD Audio与SoundWire总线之争:Realtek Codec如何二十年不倒 1. 从一块主板上的两颗芯片说起如果你拆开过最近十年的任何一块台式机主板或者笔记本大概率会在音频接口附近找到一颗指甲盖大小的芯片上面印着Realtek的logo型号通常是ALC897、ALC1220或者ALC4080这类编号。这颗芯片就是Codec中文一般叫编解码器它负责把数字信号变成模拟波形推给耳机和音箱也负责把麦克风传来的模拟波形转回数字信号。而把这颗Codec和CPU、芯片组连接起来的那条路就是HD Audio总线全称High Definition Audio英特尔在2004年随915芯片组一起推出来的规范。二十年过去了PCIe从1.0走到了6.0USB从2.0走到了4.0DDR内存换了五代连CPU的供电模块都重新设计了好几轮但HD Audio这条总线依然稳稳地待在几乎每一台x86机器上。与此同时另一套叫SoundWire的音频总线规范从移动端杀出来被写进了Intel的现代平台文档里很多人开始问HD Audio是不是要被替换了这个问题我在实际做主板调试和驱动适配的时候被问过很多次。我的判断是HD Audio在可预见的未来不会消失但它的角色正在从唯一音频总线变成桌面音频总线而SoundWire接管的是另一块地盘。这篇文章我想把这两套总线的来龙去脉、设计取舍、实际使用中的坑以及为什么Realtek的Codec能在这两套体系里都活得很好完整地聊一遍。不管你是做驱动开发的、攒机折腾声卡的还是单纯好奇为什么2024年的主板还在用2004年的音频架构应该都能从里面找到答案。2. HD Audio总线的设计逻辑为什么它能活二十年2.1 它到底解决了AC97的什么问题要理解HD Audio为什么长寿得先看它替换掉的上一代规范——AC97。AC97是1997年的东西那会儿声卡还是独立PCI卡为主主板集成声卡刚刚起步。AC97的设计思路是把数字部分和模拟部分分开数字控制器放在南桥里模拟Codec放在主板角落中间用一条叫AC-link的串行总线连接。这条总线有个致命问题它是固定时分复用的带宽被死死锁在约11.5Mbps而且同一时刻只能有一个Codec在传数据。到了2004年问题就暴露了。一方面多声道音频开始普及5.1、7.1声道需要同时传输多路PCM流AC97的带宽不够用了另一方面主板厂商想在一台机器上塞多个Codec比如前置面板一个、后置面板一个、HDMI音频一个AC97的单Codec独占机制让这件事变得极其别扭。更麻烦的是AC97的时钟是固定的48kHz想跑44.1kHz的音乐就得做重采样音质损失是实打实的。HD Audio针对这三点做了彻底重构。它把总线改成基于帧的包传输每个帧Frame里可以携带多个流Stream每个流又可以绑定到不同的转换器Converter上。这就好比AC97是一条单车道公路所有车必须排队走HD Audio是一条多车道高速每辆车可以自己选车道、自己定速度。带宽从11.5Mbps直接拉到24Mbps后来实际部署中常见的是48Mbps甚至更高取决于链路时钟支持的最高采样率从48kHz提到192kHz位深从20bit提到32bit。2.2 控制器、链路、Codec的三层结构HD Audio的物理结构可以拆成三层来理解这个分层是它灵活性的根源。最上面是HD Audio控制器HD Audio Controller它通常集成在芯片组的PCH里对操作系统来说它就是一个PCI设备有自己的MMIO寄存器空间。控制器负责把驱动递过来的音频数据打包成总线帧也负责从Codec那边收数据。你在设备管理器里看到的High Definition Audio 控制器就是它。中间是HD Audio链路HD Audio Link这是一条串行双向总线由控制器发出的BIT_CLK位时钟通常24.576MHz、SYNC帧同步和SDO/SDI串行数据输出/输入组成。注意这条链路是点对多点的一个控制器可以挂最多15个Codec每个Codec有自己的地址0到14。这就是为什么一块主板上可以同时有Realtek的模拟Codec和HDMI的显示音频Codec它们共享同一条链路但地址不同。最下面是Codec它内部又分成几个功能组Function Group每个功能组下面挂Widget。Widget是HD Audio规范里最核心的抽象它可以是DAC数模转换、ADC模数转换、混音器Mixer、选择器Selector、**引脚Pin**等等。驱动通过向Widget的寄存器写数据来配置音频路径比如把DAC0的输出接到Pin 0x14上。这套Widget模型刚出来的时候被吐槽过于复杂但它恰恰是HD Audio长寿的关键。因为它把音频路径抽象成了可编程的图主板厂商想怎么连线就怎么连线驱动只要读Codec的能力描述就能自动发现拓扑。Realtek的Codec之所以能一个型号打天下靠的就是这套自描述机制。2.3 带宽和通道数那些被忽略的硬指标很多人以为HD Audio就是能出声其实它的规格比想象中宽裕。我整理了一张对比表把HD Audio和AC97的关键参数放在一起看参数AC97HD Audio链路带宽约11.5Mbps24Mbps起实际可达48Mbps最大采样率48kHz192kHz部分Codec支持384kHz位深20bit32bit同时流数1最多16个输出流16个输入流最大Codec数1实际可扩展但受限15时钟固定48kHz独立于采样率支持44.1kHz原生配置方式固定寄存器自描述Widget拓扑这张表里最容易被低估的是**独立于采样率**这一条。HD Audio的链路时钟是24.576MHz这个数字是48kHz的512倍也是44.1kHz的整数倍关系通过分频实现。这意味着播放44.1kHz的CD音质音乐时不需要做采样率转换直接分频就能得到精确的时钟。对发烧友来说这是刚需对普通用户来说这意味着更低的CPU占用和更少的音质损失。另一个被低估的是多流能力。HD Audio允许一个Codec同时处理多个独立的音频流比如你一边用音箱放音乐一边用耳机开视频会议两个流走不同的DAC互不干扰。这个特性在疫情之后远程办公普及的背景下变得特别实用也是HD Audio至今没被淘汰的重要原因。3. SoundWire的登场它想解决的是另一个问题3.1 移动端催生的低功耗总线SoundWire最早是MIPI联盟在2014年左右推出来的MIPI就是那个搞摄像头CSI和显示DSI接口的组织。SoundWire的全称是SoundWire Specification它的目标场景非常明确移动设备。手机、平板、轻薄本这些靠电池活着的设备对音频总线的第一要求不是带宽而是功耗。HD Audio在移动端的问题在于它的链路是持续运行的。BIT_CLK一直在跑SYNC一直在发即使没有音频播放控制器和Codec之间的链路也不会完全停下来。这对台式机无所谓但对手机来说就是实打实的电量消耗。SoundWire的设计哲学是事件驱动没有音频数据的时候链路可以进入低功耗状态时钟可以停Codec可以睡只有真正需要传数据时才唤醒。SoundWire的物理层也更适合移动设备。它用的是DDR风格的源同步一条时钟线加一条或多条数据线电压摆幅比HD Audio低走线更省电。而且它支持多主多从拓扑一条总线上可以挂多个主设备比如应用处理器和音频DSP和多个从设备Codec、功放、麦克风这在手机这种多个音频源的场景里很实用。3.2 和HD Audio的本质差异在哪把SoundWire和HD Audio放在一起对比最核心的差异不是带宽而是设计目标。HD Audio是为固定供电、追求音质、拓扑相对稳定的桌面场景设计的SoundWire是为电池供电、追求能效、拓扑高度集成的移动场景设计的。具体到技术层面差异体现在几个地方。第一是时钟架构HD Audio的控制器是时钟主Codec是时钟从链路时钟由控制器统一提供SoundWire支持更灵活的时钟模式主从之间可以协商。第二是数据格式HD Audio的帧结构是固定的每个帧里流的位置是预先分配好的SoundWire的帧结构更动态支持流的分组和优先级。第三是电源管理HD Audio有D0到D3的电源状态但链路本身的状态切换粒度较粗SoundWire定义了更细粒度的时钟停止和总线复位机制。这些差异导致了一个结果SoundWire不适合直接替换HD Audio。你在台式机上用SoundWire省下来的那点功耗毫无意义反而要付出拓扑复杂度和驱动成熟度的代价。反过来你在手机上用HD Audio续航会直接崩掉。所以这两套总线不是替代关系而是分工关系。3.3 为什么Intel的现代平台同时保留两者如果你去看Intel最近几代酷睿平台的文档会发现一个有意思的现象HD Audio和SoundWire是并存的。CPU或PCH上既有HD Audio控制器也有SoundWire主控。这不是Intel优柔寡断而是现实需求决定的。笔记本是一个典型的混合场景。它的内置扬声器和麦克风阵列走SoundWire更省电因为这两路音频在大部分时间里是空闲的事件驱动能省下可观的电量。但它的HDMI/DisplayPort音频输出走的是HD Audio因为显示音频的规范和HD Audio绑定得很深显卡驱动、显示器固件、操作系统音频栈都是围绕HD Audio建的换不动。还有3.5mm耳机口很多轻薄本依然保留HD Audio Codec来驱动它因为Realtek的模拟Codec在这块太成熟了成本也低。所以你在设备管理器里看到Realtek(R) Audio和SoundWire相关的设备同时存在是完全正常的。它们各管各的操作系统音频栈会把它们统一抽象成音频端点用户层面感知不到区别。4. Realtek Codec的生存之道一颗芯片吃两套总线4.1 ALC系列为什么能覆盖从入门到旗舰Realtek在PC音频Codec市场的地位用垄断来形容不算夸张。从十几块钱的入门主板到几千块的高端主板音频部分几乎清一色是ALC系列。这个局面的形成靠的不是某一项技术领先而是产品线的密度和生态的惯性。入门级有ALC887、ALC897这些芯片成本极低功能也简单就是基本的7.1声道输出加麦克风输入信噪比在90dB左右普通用户听不出问题。中端有ALC1200、ALC1220信噪比拉到110dB以上支持32bit/192kHz还带专门的耳机放大器能推高阻抗耳机。高端有ALC4080、ALC4082配合独立的DAC芯片和运放信噪比能到120dB已经摸到了独立声卡的门槛。这种一个系列覆盖全价位的策略让主板厂商的选型变得极其简单。想省钱就选ALC897想堆料就选ALC1220驱动都是同一套BIOS里的配置逻辑也差不多。这种生态惯性一旦形成后来者很难撬动。我见过一些国产Codec想切入这个市场参数做得不错但驱动适配和主板厂商的验证流程走不通最后只能停留在小众产品上。4.2 驱动栈里的那些坑从扬声器Realtek(R) Audio说起如果你在设备管理器里看到扬声器 (Realtek(R) Audio)这个设备名说明驱动装对了。但实际使用中Realtek的驱动栈是出了名的事多。我整理了几个最常见的坑都是实际调试中踩过的。第一个坑是驱动版本和Windows更新的冲突。Windows Update有时候会推送一个微软签名的Realtek通用驱动版本号比主板厂商官网的还新但功能是阉割的——没有Realtek音频控制面板没有DTS音效甚至前置面板检测都不正常。解决办法是去Realtek官方网站或者主板厂商的支持页面下载完整驱动包安装时选择卸载旧驱动再装。注意不要用第三方驱动工具那些工具经常装错版本。第二个坑是前置面板检测失效。HD Audio规范里有一个**插孔检测Jack Detection**机制Codec通过检测引脚上的阻抗变化来判断有没有插头插入。这个机制依赖BIOS里的正确配置如果BIOS把前置面板类型设成了AC97而不是HD Audio检测就会失效。进BIOS找到Front Panel Type或者HD Audio Front Panel选项改成HD Audio即可。第三个坑是采样率不匹配导致的爆音。HD Audio支持多采样率但如果播放软件、操作系统、Codec三者的采样率设置不一致就会出现重采样严重时会有爆音或断音。在Realtek音频控制面板里把默认格式设成和音源一致的采样率比如听CD就设44.1kHz/16bit能减少一层转换。4.3 当Realtek遇上SoundWireALC系列的新形态Realtek并没有在SoundWire浪潮里掉队。最近几年Realtek推出了支持SoundWire的Codec型号命名和ALC系列不太一样但内核架构是延续的。这些Codec主要出现在轻薄本和二合一设备上配合Intel的SoundWire主控工作。从驱动角度看SoundWire Codec的枚举方式和HD Audio完全不同。HD Audio靠的是链路地址和Widget自描述SoundWire靠的是**MIPI DisCoDiscovery and Configuration**规范通过ACPI或者设备树来描述拓扑。这意味着驱动模型要重写Realtek为此提供了新的驱动栈。实际使用中SoundWire Codec的功耗优势在笔记本上确实能体现出来待机时音频子系统的功耗能降到HD Audio方案的三分之一左右。但SoundWire Codec的调试比HD Audio麻烦。HD Audio的Widget拓扑是自描述的驱动可以自动适配SoundWire的拓扑依赖固件描述如果ACPI表写错了驱动就找不到设备。我在调试一台工程机的时候遇到过SoundWire Codec枚举失败的问题最后发现是BIOS里的DisCo描述符少了一个属性补上之后才正常。这种问题在HD Audio上很少见因为HD Audio的自描述机制容错性更强。5. 实际场景里怎么选、怎么调、怎么排错5.1 台式机、笔记本、迷你主机的不同策略不同形态的设备音频总线的选择逻辑完全不同。台式机基本是HD Audio的天下因为供电不是问题音质和扩展性是第一位的。你可以在台式机上看到很夸张的音频设计独立DAC芯片、可换运放、专门的音频电容这些都是围绕HD Audio Codec做的外围增强。笔记本是混合场景。轻薄本倾向SoundWire因为省电游戏本往往还是HD Audio因为要驱动大功率扬声器和高阻抗耳机HD Audio的模拟部分更成熟。迷你主机介于两者之间很多用的是HD Audio因为它的主板设计往往沿用笔记本方案但供电比笔记本宽裕没必要为了省电牺牲兼容性。我个人的经验是如果你在攒机或者选笔记本时对音频有要求优先看Codec型号而不是总线类型。ALC1220配HD Audio实际听感大概率好过某个不知名SoundWire Codec。总线决定的是功耗和拓扑灵活性Codec决定的是音质上限。5.2 排查音频问题的通用链路音频问题排查有一套通用的链路我把它总结成从下到上的顺序避免瞎试。第一步是确认硬件识别。在Windows里打开设备管理器看声音、视频和游戏控制器下面有没有Codec设备在系统设备下面有没有HD Audio控制器或者SoundWire主控。如果设备带黄色感叹号说明驱动没装好如果根本没有设备说明BIOS里可能禁用了音频或者硬件故障。第二步是确认链路状态。HD Audio的链路状态可以通过控制器的寄存器读取但普通用户没有这个工具。一个简单的判断方法是看Realtek音频控制面板能不能正常打开能不能识别到插孔。如果面板打不开大概率是驱动问题如果面板能开但插孔检测不对是BIOS配置问题。第三步是确认音频路径。HD Audio的Widget拓扑决定了音频从哪个DAC走到哪个Pin。如果声音只从后置输出、前置没声音可能是前置面板的Pin配置错了。在Realtek控制面板里可以手动重映射插孔把前置面板设成耳机而不是线路输出往往能解决问题。第四步是确认采样率和格式。在声音设置里找到播放设备进属性→高级看默认格式是不是和音源匹配。如果播放的是44.1kHz的音乐但设备设成了48kHz就会有重采样。把允许应用程序独占控制此设备勾上让播放软件直接控制采样率能绕过操作系统的混音器。5.3 那些年我们遇到的驱动冲突Realtek驱动和其他软件的冲突是老大难问题。我遇到过几次典型情况值得单独说说。一次是PotPlayer和Realtek驱动的冲突。PotPlayer有自己的音频解码器和输出模块如果选了DirectSound输出会和Realtek的驱动栈抢设备。表现是播放视频时声音断断续续或者切换视频后没声音。解决办法是在PotPlayer的音频设置里把输出改成WASAPI独占模式让PotPlayer直接接管音频设备绕过操作系统的混音层。另一次是HDMI音频和模拟音频的抢占。当显示器通过HDMI接入时Windows会把HDMI音频设成默认设备导致机箱音箱没声音。这个不是bug是操作系统的设备优先级逻辑。在声音设置里把默认设备手动改回扬声器 (Realtek(R) Audio)就行。如果经常插拔HDMI可以在Realtek控制面板里把模拟输出设成始终默认。还有一次比较隐蔽是USB音频设备和板载Codec的采样率冲突。用户同时插了USB耳机和板载音箱两个设备的采样率设置不同导致切换时爆音。这个问题的根源是Windows音频引擎的采样率转换解决办法是把两个设备都设成同一采样率或者用支持多设备独立时钟的播放软件。6. 二十年不倒的背后兼容性才是真正的护城河6.1 操作系统音频栈的路径依赖HD Audio能活二十年技术先进只是一部分原因更关键的是操作系统音频栈的路径依赖。Windows的音频架构从Vista开始重构WASAPI、音频引擎、端点抽象这一整套都是围绕HD Audio设计的。Linux的ALSA子系统里HD Audio有专门的HDA驱动代码量巨大覆盖了无数Codec的quirk。macOS虽然主要用自己的音频硬件但对HD Audio的兼容也做得很好。要替换HD Audio意味着这些操作系统音频栈都要大改。这不是技术问题是工程量和生态问题。SoundWire在移动端能推起来是因为Android和iOS的音频栈相对年轻改起来成本低。但在PC端HD Audio的沉没成本太高了没有厂商有动力去推倒重来。6.2 主板厂商的验证惯性另一个护城河是主板厂商的验证流程。一块主板从设计到量产音频部分要经过大量的兼容性测试不同操作系统的驱动安装、不同播放软件的兼容、不同耳机的阻抗匹配、前置后置面板的切换。这些测试用例都是围绕HD Audio积累的换一套总线意味着重新建立整套验证体系。我认识做主板硬件的朋友他们提到音频部分的改动是最谨慎的因为音频问题最容易引发用户投诉而且排查起来麻烦。HD Audio虽然老但它的行为是可预测的出了问题有成熟的排查路径。SoundWire在PC端的案例还太少厂商不敢贸然全面切换。6.3 未来五年的可能走向我的判断是未来五年HD Audio和SoundWire会继续并存但边界会慢慢移动。台式机和高端游戏本会坚守HD Audio因为音质和扩展性是核心诉求。轻薄本和二合一设备会更多转向SoundWire因为功耗和集成度是核心诉求。USB音频和蓝牙音频会继续蚕食3.5mm接口的份额但这和总线之争是两条线。对普通用户来说这个格局意味着你不需要关心总线类型只需要关心Codec型号和驱动质量。对开发者和硬件工程师来说这意味着两套总线的知识都要掌握因为很可能在同一个项目里同时遇到它们。Realtek在这两套体系里都有布局这也是它能持续占据市场的原因——它不赌某一套总线赢而是两边都下注。最后分享一个实际调试中的小技巧当你遇到音频问题又找不到原因时先用一个USB声卡做对照测试。如果USB声卡正常而板载Codec不正常问题就在板载音频子系统如果USB声卡也不正常问题就在操作系统音频栈或者播放软件。这个对照法能快速缩小排查范围比盲目重装驱动高效得多。
返回列表