1. 程式人生 > >關於Atmel A5D31平臺ALC5640音訊晶片的問題記錄

關於Atmel A5D31平臺ALC5640音訊晶片的問題記錄

專案需要在A5D31平臺使用了ALC5640雙I2S帶功放的語音晶片,前期除錯挺順利,到後面除錯錄音時卡主了,問題是無法錄音,報input/output錯誤,也就是沒有資料流的意思。
花了兩天時間跟FAE搞定ALC5640錄音輸出的問題,也就是說通過示波器可以確定資料一定是產生了,那麼下面就是排除CPU這端的問題了。
又花了不少時間研究CPU的SSC介面(即I2S),最後鎖定SSC的RCMR暫存器,如下圖:
在這裡插入圖片描述
CKS這個配置(下圖所示),核心中有錯誤(這個是那其他人的核心),根據原理圖設計來說應該配置成1(不同的原理圖選擇不同,下圖是預設的畫法),也就是使用TK(BCLK)引腳輸入的時鐘訊號。核心中預設配置成了2,所以不對。
在這裡插入圖片描述


在這裡插入圖片描述
在這裡插入圖片描述
改了以為就可以了,結果還是報input/output錯誤,鬱悶死了。繼續研究(對該CPU的I2S機制並不是非常瞭解,可能其他的CPU並無該問題),時鐘部分解決了(這裡通過讓接收時鐘輸出到IO引腳確定時鐘無問題),最後鎖定到錄音採集開始觸發的位置,如下圖:
在這裡插入圖片描述
時鐘什麼的沒問題了,放音沒問題說明DMA和中斷OK,那麼就剩下這個觸發了。看下暫存器對這個觸發的定義描述:
在這裡插入圖片描述
除了0,1,8這三個值外,其他都需要RF引腳的訊號,再對比核心中的配置發現(函式名atmel_ssc_hw_params),不管怎樣都會需要RF訊號的參與。為此修改它強制為0(1和8的值就不試了),再測試錄音,郭然可以了,而且錄音檔案大小也正常。
以為總算可以了,但是還是不行,錄音的檔案雜聲或者底噪非常大(人聲可忽略了),但是有時候錄音卻是正常的(機率比較小),雖然還不行但起碼可以錄音了,很多的努力沒白費。
有時行,有時不行,而且大部分不行,這下比根本不行更難辦了,是配置問題?還是硬體模擬部分問題,無法確定。最後跟FAE借來了Demo板再測試,發現效果一樣,那麼可以確定不是硬體部分了。用的是alsa原版錄音軟體和庫,也不懷疑。那麼問題就是出在了核心或者原理設計上了。
最後回到觸發開始採集部分,由於設定的為0沒有使用同步訊號這部分是不是有問題(當時並沒有這麼思考問題,繞了很大的彎,對於人來說最恐怖的是未知,唉沒辦法,想到這個問題花了有一天多,其他都測試完了,真沒法了),然後決定把RF和TF短接,這時候核心中配置把SSC的RCMR中start位設定為7.
再測試,錄音正常,播放錄音檔案很清晰(調整了運放放大倍數之後,剛開始有點破音),無雜音,整個清爽多了。
到此算是搞定了,後邊再繼續深測。這樣的配置就跟通常的設計不同了,需要把傳送和接收的兩個同步訊號引腳短接才行,之前的音訊除錯並不需要這樣,坑。