ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PC音频总线之争:HDA为何二十年难被SoundWire取代?

PC音频总线之争:HDA为何二十年难被SoundWire取代? 1. 一个装了二十年驱动的名字HDA总线为什么还赖在PC主板上打开Windows设备管理器在“声音、视频和游戏控制器”里看到“Realtek(R) High Definition Audio”这行字对绝大多数人来说已经熟到可以无视。但如果你稍微有点硬件背景可能会觉得奇怪这个叫High Definition Audio以下简称HDA的东西是Intel在2004年提出的音频总线规范到今天已经快二十年了。中间经历了Vista、Win7、Win10、Win11经历了从板载声卡到HDMI音频再到USB耳机的各种变化它居然还是PC板载音频的默认底座。为什么一个二十年前的接口规范能活这么久而2014年就由MIPI联盟发布的SoundWire规范本应接替HDA成为新一代音频总线的候选者为什么至今在PC上依然难觅踪影这个问题比想象中有意思得多它牵扯到的根本不是“谁的音质好”而是芯片组集成度、驱动生态、产业惯性以及“够用就行”的市场逻辑。1.1 从AC97到HD Audio当年它要解决什么问题HDA的上一代是AC97那是1990年代中期的标准。AC97在当时是革命性的它把模拟音频处理从ISA声卡上剥离开来让codec芯片和数字控制器分离音频数据全部走PCI或前置总线。但到了2000年前后AC97明显不够用了最高只支持48kHz/20bit采样多声道要靠外置解码DVD-Audio和蓝光要求的192kHz/24bit根本跑不动。Intel推HDA开发代号Azalia的初衷就是要在PC平台上建立一套能覆盖高采样率、多声道、多音频流的音频总线。它在规范层面支持最高192kHz/32bit采样、8个codec设备、多路独立音频流比如游戏音效、语音通话、系统提示音可以走不同流并且把DMA直接内存访问能力做进了控制器里。这样音频数据可以不经过CPU的PIO搬运直接从内存搬到控制器再由控制器通过串行链路发给codec。可以说HDA是带着一整套“面向未来”的设计登场比AC97成熟得多也因此获得了微软的支持被纳入了UAAUniversal Audio Architecture体系。从Vista开始Windows原生带HDA总线驱动也就是说主板上的HDA控制器不需要厂商写底层驱动系统自己就能把它认出来并驱动起来。1.2 控制器、链路和codec一条音频总线的三件套要理解HDA为什么难以被替换先得知道它由哪几部分构成。HDA总线系统分三层控制器、链路和codec。控制器Controller集成在芯片组或SoC里在PCIe体系中它看起来是一个PCI设备负责DMA传输、中断管理、流调度。在Windows设备管理器里有个“High Definition Audio Controller”或者带Intel标识的音频控制器说的就是这个东西。链路Link是控制器和codec之间的物理连接由几根固定信号线组成复位线、位时钟BCLK、同步信号SYNC、串行数据输出SDO、串行数据输入SDI。这其实就是一组面向音频的同步串行总线BCLK通常工作在24.576MHz或12.288MHz一路从控制器源头送出去codec和控制器都靠它对齐时序。codec则是实际处理模拟音频的芯片挂在链路末端内部是一个由多个节点widget组成的图结构比如DAC、ADC、混音器、pin complex物理插孔等等。驱动可以通过HDA规范定义的verbs命令从控制器通过SDO线往codec里写控制命令再通过SDI线读回响应从而枚举并控制每个节点。这就是HD-Audio系统能自动识别麦克风插入、耳机插入、阻抗等信息的底层机制。1.3 UAA/UAD微软替它“续命”的关键操作HDA能活这么久的转折点在于微软的软件策略。Vista开始Windows内置UAA驱动把HDA控制器和codec的枚举逻辑做进了系统里到了Windows 10时代微软又进一步推UADUniversal Audio Driver让Realtek等厂商的HD Audio codec也走系统统一驱动框架。如今绝大多数Windows电脑上的板载声卡实际发声的底层驱动是微软写的hdaudio.sys厂商提供的只是音频效果APO、控制面板这类用户态组件。这个策略的结果是用户装系统根本不用管音频驱动系统装完声音就能响。对OEM和厂商来说省去了大量驱动适配工作对用户来说彻底告别了当年装声卡驱动要反复重启的年代。但也正因为如此整个PC音频生态被死死绑在HDA这条路上——不是HDA技术有多领先而是软件栈已经替它铺好了路谁也不愿意没事去动这个底座。2. 听着没毛病实际上全是账HDA的功耗、延迟与带宽硬伤说HDA是完美方案那肯定不对。它设计于2004年那个时代的PC对功耗不敏感对低延迟的要求也不高所以天生带着几个难以克服的毛病。这些年Intel、微软在推更低功耗设备、更轻薄笔记本的过程中其实不止一次想把HDA挪走但都因为兼容性而作罢。2.1 永远在跳的Bit Clock是功耗黑洞的根源HDA链路一通电BCLK就始终在跑哪怕没有播放任何声音。codec为了保持同步也得一直维持数字部分的工作状态。在台式机上这无所谓多几瓦少几瓦没人关心但在轻薄本上尤其是要求合盖待机一夜只掉几个电的现代设备上这种“始终在线”的链路就是纯负担。而且HDA的唤醒机制也要求codec的检测逻辑一直供电好让它能感知到3.5mm插孔插入、按键按下、线控信号等事件。这意味着休眠状态下整条链路不能完全断电必须保留一块低功耗区域持续工作。你可以把它理解成一栋楼里永远亮着的走廊灯——为了消防和监控不能关但谁都知道它在浪费电。2.2 不等时传输和DMA搬运低延迟场景的“先天不足”HDA本质上是一个共享串行总线多个音频流、控制命令、响应数据都在同一条SDO/SDI链路里分时传输。它虽然有多组DMA流和中断机制但整体调度是尽力而为的对时间精度没有做硬性保证。在实际使用中这意味着什么如果你只是听听歌、看看视频完全感觉不到问题但如果你用板载声卡跑DAW数字音频工作站或者直播机架开ASIO驱动后把buffer调到64或32 samplesAudio Glitch和爆音就会频繁出现。专业音频圈很早就有结论板载HDA不适合低延迟监听要么上USB音频接口要么上雷电音频接口。这背后就是总线级调度能力的差距不是某个厂商驱动勤更新就能解决的。2.3 模拟时代的协议包袱HDA链路里的非音频设备还有一个容易被忽略的细节HDA的规范设计之初不仅打算承载音频codec还想承载调制解调器Modem、通信设备等挂件。处在2004年这个时间点这种设计是合理的因为当时的PC还流行板载modemIntel希望一条总线能同时搞定音频和通信外设。但这个“把不同设备都塞进同一条链路”的做法放在今天的PC体系里就很尴尬。现在的PC既不用板载modem也不需要把廉价的调制解调器接到音频控制器旁边而HDA的链路帧结构、命令协议为了兼容这些非音频设备却必须保留一定冗余。结果是协议复杂度上去了但真正用到的功能很少。它就像一把瑞士军刀明明现在只用得到主刀却得为其他工具设计成本和重量买单。3. SoundWire到底“新”在哪两线制、批量传输与低功耗设计2014年MIPI联盟发布了SoundWire接口规范1.0。它在移动设备音频界相当受重视尤其在手机SoC上几乎成了连接音频codec、智能功率放大器、数字麦克风的标准总线。要理解它为什么适合取代HDA得先看看它和HDA的思路差异。3.1 两线制与停止时钟从“常亮灯泡”到“按需点火”SoundWire在物理上只需要两根线一根时钟SCLK和一根半双工数据线SDAT。时钟由主设备通常是SoC提供所有从设备挂在同一条总线上共享同一根时钟和数据线。重点在于这根时钟是可以停的。当总线上没有音频流需要传输时主设备可以停止输出时钟整个总线的数字部分可以进入极低功耗状态。需要通信时主设备再拉起时钟或者由某个从设备通过带内机制发出请求把主设备“叫醒”。对PC这种需要响应按键唤醒、语音唤醒的设备来说这正是低功耗待机需要的特性。对比一下HDA永远在跳的BCLKSoundWire的设计思路完全是按移动设备的需求来的——平时能睡就睡干活时才起来。3.2 批量传输与bank切换硬件自己完成时序重配SoundWire的另一大设计亮点是批量传输bulk transport和bank切换机制。批量传输把音频流高效地打包进帧结构里用最紧凑的方式在时钟和数据线上搬运PCM数据。更关键的是它引入了bank机制设备可以同时配置两套参数一套是当前正在用的active bank另一套是准备切换的目标next bank。当系统需要改变采样率、通道数或者数据格式时可以在某一帧边界上由硬件统一切换不需要中断也不会有音频撕裂或杂音。这对于需要动态调整音频管线的现代设备来说非常实用。简单类比就是HDA切换采样率可能要停一下声音、重新配命令再起流SoundWire则是红灯变绿灯前所有方向的车辆都已经准备好了一到边界自然切换。3.3 一主多从一条总线挂一堆设备的拓扑能力在SoundWire协议里一个主设备理论上可以带多个从设备不同从设备通过设备号区分。这意味着SoC旁边可以只拉一对线就能挂上一个音频codec、两个智能功放、三颗数字麦克风。放在笔记本上最大的好处是走线少了——从主板到转轴、再到摄像头模组的麦克风阵列只需要两根线就能把全部音频设备串联起来。HDA链路本身也确实支持多codec但在物理上需要更多的信号线而且命令协议更重。SoundWire把“少线、多设备、易扩展”这件事做到了极致这正是移动设备和轻薄本最需要的。4. 技术不背锅SoundWire在PC上推不动的真实原因看到这里你可能会问既然SoundWire这么多优点为什么PC上还是HDA大行其道这就得从商业和产业生态的角度看了。音频总线从来不只是“协议愿不愿意换”的问题而是“整条产业链愿不愿意动”的问题。4.1 Realtek一家独大生态位决定了总线切换成本PC板载音频的codec市场很长一段时间里是Realtek的天下。从AC97年代到HDA年代Realtek的ALC系列codec几乎覆盖了所有主板和笔记本电脑。它手里积累了海量的驱动、音效调校、兼容性数据几乎所有笔记本制造商都围绕它的codec做音频方案。换到SoundWire则意味着Realtek得针对新的总线协议重新设计codec前端、更新驱动、重新过Windows WHQL认证而PC市场这些年整体增长缓慢音频是无偿附赠的卖点之一投入产出比极低。所以在PC端Realtek没有动力急着做SoundWire产品这是最直接的原因。4.2 芯片组集成IP太成熟板厂和OEM都没动力改HDA的控制器IP在Intel、AMD的芯片组里已经积淀了十几年稳定、免费、驱动配套齐全。板厂出货时直接参考设计改一改就能用成本几乎为零。而SoundWire控制器IP在PC芯片组里要到比较新的移动SoC平台才开始集成传统桌面主板芯片组基本都没有。另外对PC主板来说音频链路多几根线、多占一点PCB面积根本无所谓——主板上有的是空间。HDA的问题是在功耗和灵活性上而不是在布线空间上。这跟手机里寸土寸金的情况完全相反所以HDA在PC上依然“够用”。4.3 驱动栈的沉默成本从Windows XP到Win11都是HDA的形状如果你看过Windows里的音频底层组件会发现整个架构从Vista到Win11几乎没有变过核心就是为HDA准备的。微软UAA/UAD的路线已经运行了十几年数百万设备、无数API兼容性都押在这条线上。SoundWire要走PC第一关就是Windows的音频框架要不要原生支持。尽管微软近年在推进现代待机和新的音频类SDCA规范SoundWire Device Class for Audio但这个推进更多发生在Arm笔记本和IoT设备上传统x86 PC的更新节奏非常慢。驱动栈一旦切换OEM、芯片厂商、微软三方都要投入巨大的人力做适配和测试没有人愿意当出头鸟。4.4 手机端很热闹PC端没动静标准打架的典型剧本一个容易被忽略的事实是SoundWire从诞生起就是面向移动场景的。它由MIPI联盟主导高通的骁龙SoC、联发科的天玑SoC很早就集成SoundWire控制器手机里的音频codec、smart PA、麦克风都通过它连接。反正手机主板空间小、电池敏感、布线困难SoundWire简直是量身定做。问题在于PC和手机是两条不同的技术演进曲线。手机因为功耗和体积必须换总线PC因为兼容和成本完全不换。于是出现了一个奇怪的错位SoundWire明明是个比HDA更新的好标准却迟迟无法进入PC——它的生态位恰恰是它所服务的那群移动设备而PC这个传统堡垒它推不进去。5. 一点风吹草动哪些新场景可能成为SoundWire的突破口虽然现在SoundWire在PC上很边缘但也不是完全没有松动。近几年的几股新需求正在倒逼PC厂商重新考虑音频总线的选型。5.1 现代待机与语音唤醒低功耗音频是刚需微软在推Modern Standby现代待机时笔记本在屏幕关闭、SoC深度睡眠的情况下仍要维持一部分后台功能比如语音唤醒、消息通知、远程管理。这些功能都依赖音频系统能保持一个极低功耗的侦听通路。HDA链路的问题在于它无法做到整个数字部分完全关闭想让它响应唤醒就得让codec和总线一直处于半通电状态这在现代待机里是非常大的功耗负担。SoundWire可以把数字部分全部停掉只留一个带内唤醒检测的极低功耗状态唤醒后才把时钟和数据线拉起来。对主打长续航的高端轻薄本来说这是一笔很划算的账。5.2 屏端麦克风阵列和AI降噪物理布线逼出来的方案这两年的笔记本为了做AI降噪、远场语音、摄像头模组内的麦克风阵列把麦克风越来越多地放到屏幕边框上。从主板到屏幕转轴再沿着屏线走到摄像头附近如果走传统I2S或HDA需要的信号线太多还容易受干扰。SoundWire两根线的优势在这里就很明显了屏幕排线里顺带拉两根音频线过去下面挂三五个数字麦克风都行。实际已经有一些高端笔记本和Chromebook在摄像模组里用SoundWire数字麦克风方案虽然从外面根本看不出来但这确实是一个真实发生的迁移过程。5.3 Chromebook和Arm笔记本可能是第一个大规模落地的PC形态Chromebook是观察SoundWire的好样本。ChromeOS的内核很早就加入了SoundWire驱动框架许多采用骁龙、MTK平台的Chromebook音频方案直接走SoundWirecodec因为它没有传统Windows PC那种沉重的驱动兼容性包袱。随着Windows on Arm设备越来越多同一套SoC方案上的音频总线也会跟着迁移。如果哪天你买了一台Arm笔记本或新款Copilot PC拆开看音频拓扑很可能发现它内部已经不是HDA链路了而是SoundWire或者USB音频。这批设备的体量一旦起来SoundWire在PC领域的渗透率也会悄悄上升。6. 平时修电脑、装系统时怎么判断机器走的是哪条音频总线说了这么多行业分析最后聊点动手向的经验。我自己在修机器、看系统日志、调试音频问题的时候已经习惯先确认机器内部音频总线到底走的是哪一套方案这能省掉很多瞎折腾的时间。6.1 Windows下快速识别HDA设备与驱动类型打开设备管理器展开“声音、视频和游戏控制器”看到“Realtek(R) High Definition Audio”或者带“High Definition Audio”字样的设备基本就是传统HDA方案。如果看到“Intel(R) Smart Sound Technology (Intel SST)”这类带DSP字样的设备说明平台在HDA链路上多加了一个音频DSP但总线本质上还是HDA只是驱动栈更复杂。想确认驱动是不是微软UAD可以打开设备属性看驱动程序提供商是不是“Microsoft”版本日期是Windows Update同步过来的。如果是那就是UAD在用系统自带的hdaudio.sys驱动。判断Laptop内是否真有SoundWire设备可以在设备管理器的“系统设备”里搜索“SoundWire”关键词或者用AIDA64/设备信息工具查看ACPI枚举的设备列表。能看到SoundWire Controller或SDCA设备说明这台机器已经开始用新技术了但目前大多数PC用户是看不到的。6.2 Linux下查看HD-Audio链路与codec信息Linux里查看音频总线很简单。终端跑一条lspci -nn | grep -i audio能看到类似“Audio device [0403]: Intel Corporation Sunrise Point-LP HD Audio”的输出这就是HDA控制器。想看codec内部节点拓扑可以查看cat /proc/asound/cards cat /proc/asound/card0/codec#0后面那条命令会列出HDA codec的所有widget节点、音频格式、插孔检测信息。这是调试无声、麦克风不识别、耳机插拔不响应等问题的利器。如果机器上有SoundWire外设Linux会出现sysfs设备节点ls /sys/bus/soundwire/devices/不过如前所述在传统PC上这一般是空的要等到带SoundWire的平台普及后才会有内容。6.3 踩坑心得为什么换了驱动还爆音问题出在总线上最后分享一个真实的排查经验。有一台老笔记本用户反馈播放音频时偶尔爆音尤其是在打开多个程序、硬盘读写频繁时更明显。换了Realtek驱动、升级了BIOS、换了播放器都不行。后来我用hda-verb脚本查到codec侧没有任何错误计数但通过lspci -vv看到HD-Audio Controller的中断被系统指派到了CPU某个核心上而那个核心又要处理大量网卡和存储中断两者互相抢时间才导致DMA调度不及时。这种问题在HDA总线上几乎是无解的。解决办法要么换USB声卡要么在BIOS里调整中断分配。也是这次经历让我彻底明白板载音频的稳定性天花板不在codec本身而在总线调度。这也是为什么专业音频用户宁愿多花钱买USB/雷电音频接口也不愿意跟板载HDA死磕。如果你在旧电脑上遇到类似问题不要指望某个驱动能彻底解决先判断一下是不是总线级限制。具体操作是把音频输出切换到一个USB耳机或USB声卡如果爆音消失那基本可以确定是板载HDA链路的问题和codec驱动关系不大。音频总线这个领域看着冷门实际上埋了太多历史包袱。HDA死而不僵SoundWire推而不广背后全是商业节奏和生态惯性的拉锯。什么时候PC音频从“系统附赠功能”变成“智能交互核心”SoundWire才有真正的机会从移动端反攻桌面端。在那之前它还得继续当那个技术更先进、但只能寄居在Chromebook和Arm笔记本里的隐形赢家。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进