Bios工程師手邊事—HDA 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分別執行即可。

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM