ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Bios工程师手边事—HDA Audio

2022-01-05 19:02:59  阅读:315  来源: 互联网

标签:控制器 Codec Bios Verb HDA verb table Audio


 转自:Bios工程师手边事—HDA Audio

   

  目前正在做一款至强服务器平台,发现居然有接ALC282声卡。一个服务器要声卡做什么呢?百思不得其解。不过既然原理图都画出来了,BIOS就需要将其调试出来。毕竟BIOS就是不做它,也省不了啥成本。

 

    我们先来看下两个最基本的概念:

1,     HDA控制器:计算机的核心部件是CPU,执行计算机功能的是IO设备。但是同种IO设备有很多,厂商也会有很多,自然各个厂商的IO设备实现方法也不一样。CPU是怎么兼容那么多设备的呢?答案是控制器。CPU厂商将控制器做出来,IO设备厂商都需要照着这种控制器的接口来做。现在声卡控制器最流行的就是HDA。

2,     HDA Codec:就是我们常说的声卡。有了控制器,只是提供了统一的接口。真正功能的实现,还需要设备来完成。HDA Codec就是负责将我们的模拟信号转成数字信号,有时将数字信号转成模拟信号。总之,将现实的声音转成可以存储在计算机的二进制,或将二进制转换成人耳能听到的模拟信号。说白了,声卡就是干DSP干的事。

 

    那么做BIOS需要对声卡功能做哪些部分呢?其实挺简单的,只要按照我们的线路图配一个verbtable,然后将其写入HDA Codec即可。

 

    Verb table是由N多Verb组成。那么Verb是什么样子呢?请看下图所示:

图1,Verb结构


 

从该图可以看出:

1,  CAD占4个BIT,0xF的功能为广播,所以一个HDA控制器原则上可以连接15个Codec。

2,  配置HDA Codec是以节点为对象。节点域占了7位,但HDA控制器要求必须有一个节点作为root节点,而且许多节点作为group node,将widget进行分类,所以真正作为widget节点并不会占满128个。

3,  真正的数据是通过verb&Commanddata传入HDA Codec的。

 

这个Verb table并不是一个很困难的东西。但很惭愧,本人到现在都不会配置Verb table。我现在所在的公司不是一个专业的主板公司,所以HW工程师也都不懂如何配置。以前公司的HW还是挺牛的,他们都能根据自己设计的原理图配置Verb table。那么Verb table究竟包括哪些东西呢?让我们来看一下下图所示:

图2,Verb真实数据


从上图可以看出来。Verb可以配置连接的Port,位置,连接部件类型,声道,颜色等等。但有了上述信息,我们是不是可以手动填写一个verb table吗?理论上可以,但最好不要这样做。厂商会有相应的配置工具,像realtek的HDACfg.exe,会给我们提供极大的便利。

 

         我们怎么将VerbTable写入Codec呢?我们需要借助三个寄存器:ICW,IRR和ICS。在Intel的桥片上,我们可以在HDA Controller上的BAR所映射的内存空间里找到这三个寄存器。

操作这一个寄存器的步骤是:

1,  将verb写入ICW里。

2,  将ICS的低2位写1s。

3,  检查ICS的BIT0,确认Command执行完毕。

4,  从IRR中将结果读出来。

 

上述步骤,就是我们写一个verb到codec的步骤。从第3步可以看到,该方法效率并不高。所以我们将其称为PIO的方式。像写verb table这样的小数据还行,如果放歌曲,录制东西等,这种方式肯定不行了。所以HDA控制器还支持DMA的方式。

 

         对于BIOS工程师而言,发现设备管理器下没有相应的HDA CODEC,又看不太懂HW线路图,怎么办?INTEL桥片的HDA控制器一般支持三个CAD,所以我们可以使用工具找到上面三个寄存器所映射的内存处,分别执行NID=0,Verb ID=0xF00,Parameter ID=0x0的Verb Command。三次即可。如果都看不到正确的VID,DID返回,那么很有可能硬件没有上料。如果有ICS的BUSY位一直为1,很有可能硬件供电有问题。

 

下面,我们来看一下BIOS代码怎么操作verb table的:

(1)      reset HDA控制器

(2)      遍历HDA控制器上所有的CAD,读取VID和DID

(3)      找到VID和DID后,和代码注册的verb table数组分别比较一遍。如果有相同的,便读取Jack总数。

(4)      Verb table包括4*Jack个verb。按照PIO方式将各个verbcommand分别执行即可。

 


 

标签:控制器,Codec,Bios,Verb,HDA,verb,table,Audio
来源: https://www.cnblogs.com/wanglouxiaozi/p/15768362.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有