总结一些调试的心得,ES7243
這兩天在調試一個與語音ADC芯片,也遇到了一些問題,到目前位置也解決了問題,所以想說一下嵌入式調試的一些心得,如果大家在調試設備的時候遇到問題,可以回頭來看看這篇文章,可能會得到一些啟發。
我調試的系統架構
硬件方案如上圖
我們一共可以采集到10ch音頻數據,其中有兩路是最后的ES7243E給出來的,然后最后送給CPU的是最前面的那個ES7210.
CPU給ES7243E提供MCLK,但是另外兩個ES7210芯片的時鐘是由ES7243ET提供的。
音頻調試就必須提到ALSA,ALSA就必須提到三個很重要的東西。
像應用用到的很多接口,都是由alsa接口提供的。
現在說下我遇到的問題
第一個問題,我通過錄音命令可以錄取到兩個7210芯片上面的麥克風數據,但是錄取不到ES7243E上面的兩個麥克風的數據。
1、排查寄存器
這個是最重要的,如果寄存器設置的模式不正確,那么工作就不可能正常。上面的圖中可以看到,7210的時鐘是由7243E提供的,所以7243E需要設置成master模式。
2、測量時鐘
這個是最關鍵的,音頻調試,需要測量MCLK、LRCK、BCLK。
3、電源測量,這個時候比較次要了
然后經過各種調試,在順芯的FAE王工的指導下,發現是LRCK不正確的原因,而且因為設置的寄存器相差一個bit位,我們用示波器看到的時鐘是15.99K,實際需要的是16K。當時還懷疑示波器的問題。
那個關鍵的寄存器如下:
這里寄存器的解釋,如果設置為0,那么時鐘就會從MCLK除以1,如果是4095,那么BCLK = MCLK 除以 4096。
我的MCLK = 12288000HZ
我的BCLK = 16000HZ? 采樣
那么我就需要設置這個寄存器位?
寄存器的值是?12288000 除以?16000 =?768
然后寄存器設置的話,我就需要設置成??768 - 1 = 0x2FF
寄存器設置正常后,可以看到LRCK非常穩定在16K。
并且,之前看到的,BCLK和LRCK下降沿不對齊的情況也沒有出現了。
正確的波形如下:(兩個時鐘的下降沿可以正確對齊)
第二個問題
我們錄音的時候,使用12ch來錄音,但是錄取到的音頻發現有時候物理麥克風1的音頻在通道1上,有時候在通道6上。
我們使用的TDM錄音格式如下:
這是一個非常典型的錄音格式,我們平時用的聲道只有兩個,所以在LRCK低電平的時候傳左聲道,LRCK在高電平的時候傳右聲道。
TDM格式可以允許在LRCK上傳輸多個聲道。
正常的時候,我們錄取的音頻如下
出問題的時候,我們的錄取音頻如下:
也就是LR音頻變成了RL的音頻
因為這個問題,我用示波器看了TDM格式的音頻,7243E上的其中一個麥克風錄取正弦波1K信號的時候波形如下:
?檢查這個的原因是想確認下,在傳輸過程中,每個ADC芯片的輸出在LRCK的位置是不是正確的。
然后,確認了一遍后確定沒有問題。
之后是和同事討論后,問題出現在每次錄音的時候,可能ADC的狀態不一致導致。
然后我們抓取了ADC錄音的LRCK和BCLK的波形。
正常情況下:
另一種情況:
上面兩張圖能說明的問題是,在每次開始錄音的時候,LRCK的電平跳變是不同的。
然后我們檢查電路,發現電路是沒有上拉電阻在LRCK上的。
然后檢查寄存器,發現寄存器有配置上拉電阻的情況,而且已經配置上了。
最后就是在不斷測試和驗證上下功夫,shutdown的時候,關閉掉ADC的使能,startup后,用work來使能寄存器讓ADC正常工作。
研究發現如果不是代碼設置,用i2ctool設置還可能因為時序問題還會出現偶發的上述問題。
在不斷的測試后,才找到正確的情況,用示波器抓的開始信號也一直是正常的。
整理的不是十分充分,在調試通信問題上,最好還是以波形為主,不要著急,但是也要想清楚原理。
而且在第一個問題的解決上,我覺得還是有疑問
時鐘是由7243E提供的,7243E錄音出現問題,那為什么另外兩顆7210錄音正常?
我只能說7210對時鐘的要求不是那么嚴格了。
第二個問題
TDM格式已經說明高電平傳的是偶數通道數音頻,為什么還可能出現亂序,我這里只能猜測是音頻平臺部分的cpu dai軟件部分處理的不夠完美。
即使在開始部分有異常,但是只要保證高低電平差異,我認為TDM都應該要處理正確。
好了,就這些,歡迎大家評論討論~
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~
總結
以上是生活随笔為你收集整理的总结一些调试的心得,ES7243的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios 常见手势
- 下一篇: 企业财务分析一头雾水?有了这个财务报表工