嵌入式linux下復位音效卡驅動
最近在做一個對講系統,平臺是tiny6410搭載的linux.遇到的問題是對講一段時間後音效卡會掛掉,報出的錯誤是s3c64xx_dma_stop: channel still active.經過長時間除錯,發現問題根源在於硬體佈線.tiny6410自帶開發板依然有此問題.硬體改正之後,音效卡掛的頻率降低到平均2天1次.不過作為產品還是不夠的,所以我就準備在系統檢測到音效卡掛掉時自動復位音效卡.
linux下音效卡驅動結構包括兩部分AC97驅動+音效卡晶片驅動。具體驅動檔案為/sound/soc/samsung/ac97.c,
/sound/soc/codecs/Wm9713.c,/sound/soc/samsung/Mini6410_wm9713.c.
6410帶ac97硬體控制器,以下為ac97工作的狀態機:
正常情況下ac97狀態機工作於active狀態,如果音效卡掛掉,ac97狀態機將會一直處於ready狀態,從而無法傳送資料.我沒有在上述3個驅動檔案中進行修改,而是單獨寫了一個驅動,命名為ac97_reset.c檔案.這個檔案的功能是可以warm reset ac97驅動.warm reset和cold reset的區別在於warm reset不會將9714晶片暫存器配置成預設值.warm
reset過後,再根據狀態機用第3個訊號觸發,即CODEC_READY & TRANS_DATA & NORMAL_SYNC,然後AC97驅動將工作與ACTIVE狀態,也就是說AC97工作正常.
以上的復位以及訊號觸發操作,都是直接操作AC97的全域性控制暫存器AC_GLBCTRL.這個暫存器共有4個位元組32位,warm復位為第1位,第3個訊號觸發為第2,3,22位.
完成這個工作後,我發現當我播放音訊檔案時,AC97資料線SDO有訊號傳到音效卡,但音效卡沒有聲音,原因是音效卡晶片的暫存器配置此時不是我們需要的配置.於是我在音效卡正常時,用AC_CODEC_CMD與AC_CMD_STAT兩個暫存器讀入9714全部的暫存器配置,然後在音效卡復位成功後,將這個配置重新寫入9714,然後音效卡就能正常工作,工作完成!
我在程式中讀寫音效卡是用alsa模擬的oss方式來讀寫的,當音效卡掛掉後,read和write函式將讀取不到資料,從而報錯,然後我就可以復位音效卡,從讀取到復位總時間大概15S以內.主要是阻塞式讀取花費的時間,真正復位音效卡的時間小於1S.
相關推薦
嵌入式linux下復位音效卡驅動
最近在做一個對講系統,平臺是tiny6410搭載的linux.遇到的問題是對講一段時間後音效卡會掛掉,報出的錯誤是s3c64xx_dma_stop: channel still active.經過長
基於arm平臺linux下USB音效卡驅動安裝和使用
核心配置 <*> Advanced Linux Sound Architecture —> usb音效卡安裝 1.apt-get install alsa-base 2
android下除錯音效卡驅動之概述
在Android中音訊系統使用的是ALSA系統架構。ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援 嵌入式處理器和移動裝置中的音訊Cod
android下除錯音效卡驅動之總結
1、在除錯中出現問題後,首先看I2C通訊有沒有問題,wm8960暫存器的設定是靠I2C來完成,另外I2C通訊不成功在開發板中是沒 有音效卡相關的裝置節點。 a、首先檢視Machi
android下除錯音效卡驅動之wm8960介紹二
三、LINPUT輸入通道介紹 有關LINPUT的主要配置如下: R32的bit8(LMN1)置1:LINPUT1連線PGA; R0
android下除錯音效卡驅動之wm8960介紹一
經過了一段時間的Android下wm8960驅動的除錯,終於實現錄音和播放功能了,在除錯過程中有了一些心得,與大家分享一 下,由於能力有限,錯誤之處還望海涵和指教。 一、總述
Linux ALSA音效卡驅動之六:ASoC架構中的Machine
前面一節的內容我們提到,ASoC被分為Machine、Platform和Codec三大部分,其中的Machine驅動負責Platform和Codec之間的耦合以及部分和裝置或板子特定的程式碼,再次引用上一節的內容:Machine驅動負責處理機器特有的一些控制元件和音訊
Linux ALSA音效卡驅動之八:ASoC架構中的Platform
1. Platform驅動在ASoC中的作用 前面幾章內容已經說過,ASoC被分為Machine,Platform和Codec三大部件,Platform驅動的主要作用是完成音訊資料的管理,最終通過CPU的數字音訊介面(DAI)把音訊資料傳送給Codec進行處理,最終由Co
Linux ALSA音效卡驅動之三:PCM裝置的建立
1. PCM是什麼 PCM是英文Pulse-code modulation的縮寫,中文譯名是脈衝編碼調製。我們知道在現實生活中,人耳聽到的聲音是模擬訊號,PCM就是要把聲音從模擬轉換成數字訊號的一種技術,他的原理簡單地說就是利用一個固定的頻率對模擬訊號進行取
Linux ALSA音效卡驅動之五:移動裝置中的ALSA
1. ASoC的由來 ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援嵌入式處理器和移動裝置中的音訊Codec的一套軟體體系。在ASoc出現之前,核心對於SoC中的音訊已經有部分的支援,不過會有一些侷限性:
Linux ALSA 音效卡驅動之一:ALSA架構簡介
一. 概述 ALSA是Advanced Linux Sound Architecture 的縮寫,目前已經成為了linux的主流音訊體系結構,想了解更多的關於ALSA的這一開源專案的資訊和知識,請檢視以下網址:http://www.alsa-project.org/。 在核心裝置驅動層,
基於S3C2440的Linux-3.6.6移植——音效卡驅動
Linux的ALSA音效卡驅動較為複雜,它需要註冊多個平臺裝置。在mach-zhaocj2440.c檔案中的平臺裝置陣列內一共有四個與ALSA相關的平臺裝置: &s3c_device_iis, &uda1340_codec, &mini2440_au
Linux ALSA音效卡驅動之五:移動裝置中的ALSA(ASoC)
1. ASoC的由來 ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援嵌入式處理器和移動裝置中的音訊Codec的一套軟體體系。在ASoc出現之前,核心對於SoC中的音訊已經有部分的支援,不過會有一些侷限性: C
Linux ALSA音效卡驅動之二:音效卡的建立
1. struct snd_card 1.1. snd_card是什麼 snd_card可以說是整個ALSA音訊驅動最頂層的一個結構,整個音效卡的軟體邏輯結構開始於該結構,幾乎所有與聲音相關的邏輯裝置都是在snd_card的管理之下,音效卡驅動的第一個動作通常就是建立一
Linux ALSA音效卡驅動之七:ASoC架構中的Codec
1. Codec簡介 在移動裝置中,Codec的作用可以歸結為4種,分別是: 對PCM等訊號進行D/A轉換,把數字的音訊訊號轉換為模擬訊號對Mic、Linein或者其他輸入源的模擬訊號進行A/D轉換,把模擬的聲音訊號轉變CPU能夠處理的數字訊號對音訊通路進行控制,比如
Linux 系統下 NVIDIA 顯示卡驅動,GNOME 桌面環境不相容
NVIDIA 顯示卡驅動在 Windows 系統下的安裝非常方便,大部分第三方軟體都能直接自動檢測型號,並從 NVIDIA 官網上下載驅動安裝。但是在 Linux 作業系統下,NVIDIA 顯示卡的驅動需要手動安裝,而且需要手動設定,其中有幾步需要注意的地方,詳
Linux ALSA音效卡驅動之一:ALSA架構簡介
一. 概述 ALSA是Advanced Linux Sound Architecture 的縮寫,目前已經成為了linux的主流音訊體系結構,想了解更多的關於ALSA的這一開源專案的資訊和知識,請檢視以下網址:http://www.alsa-project.org/。 在核心裝置驅動層
Linux ALSA音效卡驅動之一:ALSA系統架構
Linux ALSA 系統架構ALSA 是Linux音效卡驅動的架構,下面基於linux-2.6.32描述下ALSA系統架構。ALSA系統可以分為alsa-lib、alsa- driver,而alsa-driver又分為core層和底層硬體層。作為開發者,我們只需移植底層硬
Linux ALSA音效卡驅動之四:Control裝置的建立
Control介面 Control介面主要讓使用者空間的應用程式(alsa-lib)可以訪問和控制音訊codec晶片中的多路開關,滑動控制元件等。對於Mixer(混音)來說,Control介面顯得尤為重要,從ALSA 0.9.x版本開始,所有的mixer工作都是通過co
linux下查詢網絡卡型別和驅動資訊
1、查網絡卡型別 ethtool -i 網絡卡名 如: ethtool -i enp0s3 結果如下: driver: e1000 version: 7.3.21-k8-NAPI firmwa