一、I2S引腳介紹
I2S是全雙工,即同時接收和發送,重要有三個時鐘信號(主時鐘MCLK,幀同步時鐘左右切換時鐘WS,資料時鐘BCLK),和一個資料接收SD_RX,一個資料發SD_TX送,可設定主從模式,主控是主模式的話,由主控引數所有用到的時鐘,ad芯片即是從模式,主控是從模式的話,由ad芯片外接27mhz晶振,產生時鐘,接收和發送可以共用時鐘,如果只接一個ad芯片,資料精度可用16/32/24位來表示,
MCLK = 256 * WS
BCLK = WS * 左右通道數 * 位寬 如; 2 * 16 * WS
WS = 1 / 采樣頻率

單通道,左右聲道,示意圖,16/24/位資料

hisi的多通道示意圖,可以接多路輸入,ktv可以多個話筒一個意思,不是左右聲道的意思,不要搞混了,

聲音是模擬信號,通過ad芯片,對輸入的模擬量進行數字化,根據設定的采樣頻率,抽樣采集電壓信號,轉化為數字信號,最終保存檔案,編碼,然后解碼,由數字信號,轉化還原模擬信號,由喇叭播放聲音

一、hisi的音頻采集播放原理圖
ad就是音頻芯片,i2s與hisi主控連接,hisi的采集和輸出為ai和ao設備,通過內部的dma,將資料進行保存,不需我們關心,

二、hisi的I2S檔案介紹
在介紹之前,先介紹hisi檔案關于音頻的說明,多媒體開發檔案


2、編解碼處理器指南介紹

根據檔案,對講只用一個ad芯片時的引腳設計,ad芯片作為主模式可以外接晶振,供芯片輸出時鐘,我選擇ad芯片作為從模式,hisi就是主模式,提供時鐘給ad芯片,輸入和輸出共用時鐘,如下圖,WS_TX,BCLK_TX,MCLK是時鐘,SD_TX,SD_RX是資料

三、hisi的I2S引腳和tl芯片引腳介紹**
I2S有四個比較重要的腳
如下原理圖,我接的音頻芯片是TL3101,主控是海思的3520/3521DV400,hisi的主控,有兩個輸入,兩個輸出,檔案說明,規定兩組混合使用,我使用的是I2S2和I2S1,
I2S2作為發送,提供主時鐘MCLK,同步時鐘,BCLK,WS,和輸出SD_TX,I2S1僅提供接收SD_RX,同步時鐘和I2S2共用,和一組I2C用于控制芯片,設定引數,
hisi主控引腳圖,注意i2s1的ws,原理圖是沒用到的,

音頻芯片是TL3101,引腳圖如下,

咪頭,是標準的3mm介面,插入耳機,連線如下圖,


四、驅動除錯
1、準備ko驅動檔案,根據hisi檔案,demo使用的是tl3101芯片,接的也是這款芯片,所以不要從新寫驅動,如果其他芯片,就要自己寫驅動,除錯內核,對于沒搞過驅動開發的同志,這是困難,老衲懂驅動和系統,所以簡單,直接用hisi的sdk下ko下tl3101下的ko檔案,在啟動時加在,插斷題外話,ko,可以在內核啟動時加載,可以在根檔案系統掛載后,腳本命令加載或收到加載,

根據驅動原始碼,芯片默認是從模式,48k采樣率,16位,i2s,這個很重要,下面設定時鐘時,就知道設定多少,剛開時除錯,就按默認設定

1、根據多媒體檔案除錯指南,

*i2s的時序圖如下,WS,是左右聲道切換時鐘,fs就是采樣率,1/fs就是ws但我時鐘,bclk就是資料時鐘,sd的時鐘,bclk = fs * 位寬*通道數,我們是左右聲道,選擇16位的位寬,所以是 fs * 2 16,那主時鐘mclk 就是256 * fs,

2、根據原理圖,先將hisi的引腳,復用為I2S,和i2c,找到hisi的檔案Hi3520DV400_PINOUT_CN.xlsx
3、將I2S和I2C_管腳復用,
在load自啟動腳本加如下命令,
himm 0x120F00AC 0x2; #GPIO9_3 I2S1_BCLK_RX I2S2_MCLK
himm 0x120F00B8 0x1; #GPIO9_6 I2S2_BCLK_RX
himm 0x120F00BC 0x1; #GPIO9_7 I2S2_WS_RX
himm 0x120F00C0 0x1; #GPIO5_4 I2S2_SD_RX
himm 0x120F00B4 0x1; #GPIO9_5 I2S1_SD_RX
himm 0x120F00E0 0x1; #GPIO12_6 I2C_SDA
himm 0x120F00E4 0x1; #GPIO12_7 I2C_SCL
4、加載驅動,
上面的管腳設定好后,加載ko檔案,把hisi默認加載nv6134屏蔽掉,加載音頻ko要放在hisi系統system驅動后,否則打開ai,ao失敗,
insert_audio()
{
insmod tlv_320aic31.ko
insmod hi3521d_aio.ko
insmod hi3521d_ai.ko
insmod hi3521d_ao.ko
insmod hi3521d_aenc.ko
insmod hi3521d_adec.ko
}
remove_audio()
{
rmmod hi3521d_adec
rmmod hi3521d_aenc
rmmod hi3521d_ao
rmmod hi3521d_ai
rmmod hi3521d_aio
rmmod tlv_320aic31
}
啟動系統后,啟動時會看到ai,ao,之類的,tl32031驅動加載成功的資訊,看看是否有這個設備,ls /dev 可以看到有tlv320aic31這個設備,沒有的話,就是驅動未加載成功,i2c有問題或,編譯的ko有問題,看除錯列印是什么情況,確定是否i2c沒有通,還是ko的問題,和i2s沒關,這一步,還沒到i2s,
4、時鐘設定
//rg8
himm 0x13140140 0x003254E7; #I2S2MCLK 12.288MHZ
himm 0x13140144 0x00000133; #I2S2CLK 12.288/4MHZ
//rg1
himm 0x13140108 0x003254E7; #I2S1MCLK 12.288MHZ
himm 0x1314010C 0x00000133; #I2S1CLK 12.288/4MHZ

****設定時鐘,這里去設定時鐘,tl芯片驅動原始碼,默認是48khz采樣率,所以主時鐘mclk是256* bck(48k)= 12MHZ,上圖hisi檔案介紹了,48k采樣率時,輸出主時鐘是12.288mhz,
這里根據實際操作感覺不需,hisi加載ai,ao,驅動時,自動設定了時鐘,量了主時鐘是12.2mhz,
后面啟動應用層demo后,啟動ai和ao設備,設定是主模式,48k采樣率,后面量時鐘,bclk是1.5mhz,wclk是48khz,這里很重要,可以確定我們的管腳設定沒有錯,應用設定也沒有錯,否則是不會有資料的,除錯驅動時,一定要確保時鐘是正確的,用示波器量時鐘,再除錯應用,****
應用層設定,采集音頻,在下章節講,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299745.html
標籤:其他
上一篇:【歷史上的今天】9 月 12 日:世界上第一塊集成電路誕生;QNX 作業系統開源;蘋果推出 iPhone X
下一篇:匯編:基礎知識
