0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

IIS總線規(guī)范和軟件模擬

嵌入式星球 ? 2020-10-13 18:43 ? 次閱讀

引言
I2S(InterIC Sound Bus)是飛利浦公司針對(duì)數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標(biāo)準(zhǔn),采用沿獨(dú)立的導(dǎo)線傳輸時(shí)鐘與數(shù)據(jù)信號(hào)的設(shè)計(jì),通過分離數(shù)據(jù)和時(shí)鐘信號(hào),避免了時(shí)差誘發(fā)的失真。I2S總線簡(jiǎn)單有效,可以有效提升輸出數(shù)據(jù)的質(zhì)量,在各種嵌入式音頻系統(tǒng)中有廣泛應(yīng)用。但是在嵌入式音頻系統(tǒng)設(shè)計(jì)中,并不是所有的MCU都支持I2S總線格式,再加上I2S還沒有統(tǒng)一的接口標(biāo)準(zhǔn),不同的廠家生產(chǎn)的設(shè)備接口也是五花八門,采用軟件模擬實(shí)現(xiàn)I2S總線可有效解決在不支持其的MCU和設(shè)備之間通過I2S總線實(shí)現(xiàn)數(shù)據(jù)傳輸時(shí)出現(xiàn)的問題。
本文通過在以太網(wǎng)數(shù)字語音廣播系統(tǒng)中軟件模擬I2S總線實(shí)現(xiàn)語音數(shù)據(jù)傳輸,給出了軟件模擬實(shí)現(xiàn)I2S總線的方法。

1、I2S總線規(guī)范
I2S為三線總線,3個(gè)信號(hào)分別為:
① 串行時(shí)鐘SCK,也叫位時(shí)鐘(BCK)。即每發(fā)送1位數(shù)字音頻數(shù)據(jù),SCK上都有1個(gè)脈沖。SCK的頻率=2×采樣頻率×采樣位數(shù)。在數(shù)據(jù)傳輸過程中,I2S總線的發(fā)送器和接收器都可以作為系統(tǒng)的主機(jī)來提供系統(tǒng)的時(shí)鐘頻率。
② 幀時(shí)鐘WS,即命令(聲道)選擇,用于切換左右聲道的數(shù)據(jù)。WS的頻率等于采樣頻率,由系統(tǒng)主機(jī)提供。WS為“1”表示傳輸?shù)氖亲舐暤赖臄?shù)據(jù),WS為“0”表示傳輸?shù)氖怯衣暤赖臄?shù)據(jù)。
③ 串行數(shù)據(jù)信號(hào)SD,用于傳輸二進(jìn)制補(bǔ)碼表示的音頻數(shù)據(jù)。
I2S格式的信號(hào)無論有多少位有效數(shù)據(jù),數(shù)據(jù)位的最高位(MSB)總是被最先傳輸,1次能夠發(fā)送的數(shù)據(jù)決定于I2S格式的有效位數(shù)。
1個(gè)典型的I2S信號(hào)時(shí)序如圖1所示

1.jpg

圖1 I2S總線典型時(shí)序圖


隨著技術(shù)的發(fā)展,在統(tǒng)一的I2S接口下出現(xiàn)了多種不同的數(shù)據(jù)格式。根據(jù)SD信號(hào)相對(duì)于SCK和WS位置的不同,分為左對(duì)齊和右對(duì)齊2種格式,如圖2和圖3所示。

2.jpg

圖2 16位有效位數(shù)的左對(duì)齊格式


3.jpg

圖3 16位有效位數(shù)的右對(duì)齊格式


在上面2種數(shù)據(jù)傳輸格式中,當(dāng)WS為“1”時(shí)傳輸?shù)氖亲舐暤赖臄?shù)據(jù),當(dāng)WS為“0”時(shí)傳輸?shù)氖怯衣暤赖臄?shù)據(jù)。為了保證數(shù)字音頻信號(hào)的正確傳輸,發(fā)送端和接收端必須采用相同的數(shù)據(jù)格式。


2、軟件模擬I2S

以太網(wǎng)數(shù)字語音廣播系統(tǒng)主要是指以以太網(wǎng)為傳播介質(zhì)提供音頻服務(wù)的廣播系統(tǒng),將語音信號(hào)以標(biāo)準(zhǔn)IP包的形式在以太網(wǎng)上進(jìn)行傳送,以實(shí)現(xiàn)語音廣播功能。該系統(tǒng)在PC機(jī)端通過麥克風(fēng)采集語音數(shù)據(jù),然后將采集到的語音數(shù)據(jù)通過以太網(wǎng)發(fā)送給嵌入式終端,嵌入式終端將接收到的語音數(shù)據(jù)進(jìn)行數(shù)/模轉(zhuǎn)換后進(jìn)行播放。系統(tǒng)實(shí)現(xiàn)框圖如圖4所示[5]。

4.jpg

圖4 以太網(wǎng)數(shù)字語音廣播系統(tǒng)框圖


5.jpg

圖5 LM3S8962與MS6336的連接圖


廣播系統(tǒng)終端的MCU LM3S8962將接收到的語音數(shù)據(jù)通過I2S總線發(fā)送給語音解碼芯片MS6336進(jìn)行數(shù)/模轉(zhuǎn)換并播放,

LM3S8962和MS6336的連接如圖5所示。為了完整還原出語音信號(hào),需要保證軟件模擬I2S信號(hào)時(shí)序嚴(yán)格精確,高低電平的轉(zhuǎn)換采用延時(shí)程序?qū)崿F(xiàn)。MS6336為16位D/A芯片,其I2S時(shí)序如圖6所示。

6.jpg

圖6 MS6336的典型I2S時(shí)序圖


該系統(tǒng)中的語音數(shù)據(jù)雙聲道,16位采樣,1個(gè)采樣點(diǎn)的數(shù)據(jù)為4字節(jié),1個(gè)采樣點(diǎn)數(shù)據(jù)通過MCU發(fā)送給MS6336,數(shù)據(jù)發(fā)送流程如圖7所示。

7.jpg

軟件模擬I2S引腳的定義如下:
#define I2S_WS GPIO_PIN_5//模擬I2S聲道選擇時(shí)鐘控制位
#define I2S_BCK GPIO_PIN_6//模擬I2S位時(shí)鐘控制位
#define I2S_DATA GPIO_PIN_7//模擬I2S數(shù)據(jù)傳送位
根據(jù)MS6336的I2S總線格式以及數(shù)據(jù)發(fā)送流程,軟件模擬I2S總線的步驟如下:
① 根據(jù)語音數(shù)據(jù)采樣率及采樣位數(shù)計(jì)算得到SCK的值和WS的值(WS的值等于采樣頻率)。
系統(tǒng)采樣率為44.1 kHz,則SCK=2×44.1 kHz×103×16=1 411 200 Hz,WS=44 100 Hz。1個(gè)SCK時(shí)鐘周期T=1/SCK=07 μs。采用延時(shí)程序模擬SCK時(shí)鐘周期需要應(yīng)用示波器來精確延時(shí)時(shí)間。本系統(tǒng)中一個(gè)SCK周期的延時(shí)為delayI2S(2)。
② 將WS、BCK和DATA均置為高電平。
③ 選擇左右聲道。首先發(fā)送左聲道數(shù)據(jù),將WS置低(若發(fā)送右聲道數(shù)據(jù)則將WS置高)。

for(ChannelCnt=0;ChannelCnt<2;ChannelCnt++){//雙聲道選擇播放
if(ChannelCnt==0){//右聲道選擇信號(hào)為高電平
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = ~I(xiàn)2S_WS;
}
else{//左聲道選擇信號(hào)為低電平
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = I2S_WS;
}
……
}

④ 選擇高低字節(jié)。將左聲道數(shù)據(jù)以高低字節(jié)的順序發(fā)送,在發(fā)送高字節(jié)第1位數(shù)據(jù)之前先發(fā)送1個(gè)周期的串行時(shí)鐘。

for(HorLCnt=0;HorLCnt<2;HorLCnt++){//聲道數(shù)據(jù)高低字節(jié)選擇
if(ChannelCnt==1){//左聲道
if(HorLCnt==0){//低字節(jié)
c=*(SampLEData+1);//SampleData指向音頻數(shù)據(jù)緩沖區(qū)首地址,即左聲道低字節(jié)
delayI2S(2);//發(fā)送第一個(gè)數(shù)據(jù)位之前需要延遲一個(gè)位時(shí)鐘周期
}
else{//低字節(jié)
c=*SampleData;
}
}
……
}

⑤ 開始傳輸音頻數(shù)據(jù)(音頻數(shù)據(jù)的傳輸在SCK下降沿準(zhǔn)備數(shù)據(jù),在SCK的上升沿發(fā)

送給數(shù)據(jù)接收端)。將采樣點(diǎn)左聲道數(shù)據(jù)的高字節(jié)最高位送給SD,設(shè)置SCK為低電平,此時(shí)為SCK的下降沿,數(shù)據(jù)準(zhǔn)備好。延時(shí)半個(gè)SCK周期以后將SCK置為高電平,此時(shí)SD線上的數(shù)據(jù)發(fā)送給數(shù)據(jù)接收端,延時(shí)半個(gè)SCK周期。依次將左聲道剩余位數(shù)據(jù)按照最高位的方式發(fā)送出去。

for(BitCnt=0;BitCnt<8;BitCnt++){//1次傳送的數(shù)據(jù)長(zhǎng)度為8位,先傳送高字節(jié)再傳送低字節(jié)置時(shí)鐘線SCK為低,開始準(zhǔn)備數(shù)據(jù)位
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = ~I(xiàn)2S_BCK;
if((c<

⑥ 當(dāng)將1個(gè)采樣點(diǎn)的左聲道的數(shù)據(jù)發(fā)送完以后,延時(shí)2個(gè)SCK周期,然后發(fā)送右聲道的數(shù)據(jù)(同左聲道數(shù)據(jù)的發(fā)送過程)。
根據(jù)以上的過程對(duì)每個(gè)采樣點(diǎn)的數(shù)據(jù)進(jìn)行處理,就可以實(shí)現(xiàn)通過軟件模擬I2S總線傳輸音頻數(shù)據(jù)了。以上實(shí)現(xiàn)的是典型I2S時(shí)序模擬,而左對(duì)齊和右對(duì)齊2種格式只是時(shí)序稍有差異,模擬實(shí)現(xiàn)過程同典型I2S總線模擬實(shí)現(xiàn)過程基本相同。

結(jié)語
在以太網(wǎng)數(shù)字語音廣播系統(tǒng)中應(yīng)用軟件模擬實(shí)現(xiàn)I2S總線時(shí)序,能夠成功地實(shí)現(xiàn)語音信號(hào)的數(shù)據(jù)傳輸,實(shí)現(xiàn)語音信號(hào)的實(shí)時(shí)廣播,表明了軟件模擬實(shí)現(xiàn)I2S總線的可行性,為解決不支持I2S總線的MCU和各種I2S總線設(shè)備間的通信提供了一種可行的方法。但是,在應(yīng)用軟件模擬實(shí)現(xiàn)I2S的以太網(wǎng)數(shù)字語音廣播系統(tǒng)實(shí)時(shí)播放語音信號(hào)時(shí),存在一些噪聲,表明在采用軟件模擬實(shí)現(xiàn)I2S的時(shí)序精確性上存在一些欠缺。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • IIS
    IIS
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    19614
  • IIS總線
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8919
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    tlv320aic12k可以使用IIS接口嗎?

    你們好!tlv320aic12k與cpu通信可以使用I2S接口模式?jīng)],他可以使用McAsp接口格式與CPU進(jìn)行通信,也有看到MCASP使用的是IIS協(xié)議,所以請(qǐng)教下tlv320aic12k可以使用IIS接口么,怎么和cpu通信,謝謝!
    發(fā)表于 10-31 08:33

    aic3106通過mic在收到數(shù)據(jù)發(fā)送給IISIIS將數(shù)據(jù)發(fā)送給軟件編碼,編解碼后有回音怎么解決?

    aic3106通過mic在收到數(shù)據(jù)發(fā)送給IIS,IIS將數(shù)據(jù)發(fā)送給軟件編碼,然后軟件解碼,將數(shù)據(jù)發(fā)送給IIS,
    發(fā)表于 10-17 08:17

    了解TI基于PCB布線規(guī)則的DDR時(shí)序規(guī)范

    電子發(fā)燒友網(wǎng)站提供《了解TI基于PCB布線規(guī)則的DDR時(shí)序規(guī)范.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 11:47 ?1次下載
    了解TI基于PCB布<b class='flag-5'>線規(guī)</b>則的DDR時(shí)序<b class='flag-5'>規(guī)范</b>

    USB轉(zhuǎn)IIS應(yīng)用SSS1700參考電路圖

    SSS1700設(shè)計(jì)參考電路,SSS1700應(yīng)用USB轉(zhuǎn)IIS方案設(shè)計(jì)電路,鑫創(chuàng)SSS1700設(shè)計(jì)方案
    發(fā)表于 07-31 10:38 ?5次下載

    為什么CAN總線分支在0.3米內(nèi)是最可靠的?

    線性拓?fù)涫荂AN總線線規(guī)范中最為常見的,如果采用了線性拓?fù)渲械摹癟”型分支連接,按規(guī)定分支長(zhǎng)度是不能大于0.3m的,需要更長(zhǎng)的分支應(yīng)該怎么辦呢?CAN拓?fù)浞诸怌AN(控制器局域網(wǎng)
    的頭像 發(fā)表于 07-05 08:25 ?1728次閱讀
    為什么CAN<b class='flag-5'>總線</b>分支在0.3米內(nèi)是最可靠的?

    ESP32同時(shí)使用IIS和UART時(shí)出錯(cuò),為什么?

    ESP32同時(shí)使用IIS和UART時(shí)出錯(cuò),如果不使用IIS,三個(gè)串口都可以正常使用... 如果使用IIS只打開串口1,會(huì)出現(xiàn)如下圖錯(cuò)誤(但是程序可以運(yùn)行,只是串口部分有問題) 如果使用IIS
    發(fā)表于 06-26 07:21

    高速pcb布線規(guī)則有哪些

    高速pcb布線規(guī)則有哪些 高速PCB布線規(guī)則 摘要:隨著電子技術(shù)的快速發(fā)展,高速PCB設(shè)計(jì)變得越來越重要。為了確保信號(hào)完整性和電磁兼容性,遵循一定的布線規(guī)則至關(guān)重要。本文將詳細(xì)介紹高速PCB布
    的頭像 發(fā)表于 06-10 17:33 ?718次閱讀

    釋放總線潛力:汽車總線離線模擬解決方案

    傳統(tǒng)的ECU模擬工具通常需要依賴上位機(jī)軟件來發(fā)起通信,這在離線場(chǎng)景和自動(dòng)化產(chǎn)線中帶來不便。為了應(yīng)對(duì)這一挑戰(zhàn),虹科推出了創(chuàng)新的汽車總線離線模擬解決方案,基于PCAN-Router系列網(wǎng)關(guān)
    的頭像 發(fā)表于 02-20 14:38 ?442次閱讀
    釋放<b class='flag-5'>總線</b>潛力:汽車<b class='flag-5'>總線</b>離線<b class='flag-5'>模擬</b>解決方案

    虹科方案|釋放總線潛力:汽車總線離線模擬解決方案

    導(dǎo)讀: 傳統(tǒng)的ECU模擬工具通常需要依賴上位機(jī)軟件來發(fā)起通信,這在離線場(chǎng)景和自動(dòng)化產(chǎn)線中帶來不便。為了應(yīng)對(duì)這一挑戰(zhàn),虹科推出了創(chuàng)新的汽車總線離線模擬解決方案,基于PCAN-Router
    的頭像 發(fā)表于 01-30 11:10 ?395次閱讀
    虹科方案|釋放<b class='flag-5'>總線</b>潛力:汽車<b class='flag-5'>總線</b>離線<b class='flag-5'>模擬</b>解決方案

    電動(dòng)機(jī)繞組的接線規(guī)

    以U相繞組為例,說明其接線規(guī)律:因?yàn)閮蓚€(gè)相鄰的極相組處在不同極性的磁極下,所以,它們的電流繞行方向是相反的。于是得到兩個(gè)相鄰極相組之間的接線規(guī)律:下層邊與下層邊相接,上層邊與上層邊相接。
    發(fā)表于 01-22 09:54 ?926次閱讀
    電動(dòng)機(jī)繞組的接<b class='flag-5'>線規(guī)</b>律

    iis的80端口被占用怎么解決?

    \"。記住次PID; 3、打開Windows任務(wù)管理器,在進(jìn)程中找到PID為\"4\"的程序,如下圖所示:顯示80端口被pid4 system占用。 二、或者修改IIS端口為其它未用端口,如81端口;相應(yīng)的,站點(diǎn)也修改到對(duì)應(yīng)的81端口。在IIS服務(wù)器里面綁定中改端口
    發(fā)表于 12-25 17:24

    PCI-Express總線接口的布線規(guī)

    PCI-Express總線接口的布線規(guī)
    的頭像 發(fā)表于 11-29 15:49 ?1031次閱讀
    PCI-Express<b class='flag-5'>總線</b>接口的布<b class='flag-5'>線規(guī)</b>則

    adau1452的iis接口硬件和軟件怎么設(shè)計(jì)?

    請(qǐng)問這個(gè)硬件部分是兼容所有iis接口的音頻芯片么?有沒有較多的參考設(shè)計(jì),目前的需求有兩類,一類是一路入,一路出,一類是兩路入,16路出,后面的我可以參考官方 的板子,但是前面的設(shè)計(jì)沒辦法,之前我是用wm8978或者es8388這類芯片,看接口不知道怎么連接,軟件部分怎么設(shè)
    發(fā)表于 11-28 08:01

    ADAU1452是否支持多路IIS主從同時(shí)輸入?如何做到同步?

    如圖我們想將5.1 (伴奏)3路IIS信號(hào)與 2.01路IIS 信號(hào)通過ADAU1452進(jìn)行混音后 輸出5.13路 IIS信號(hào). 請(qǐng)問:由于5.1 伴奏只能作為IIS master
    發(fā)表于 11-28 06:34

    分享I2C總線規(guī)范

    電子發(fā)燒友網(wǎng)站提供《分享I2C總線規(guī)范.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 10:49 ?0次下載
    分享I2C<b class='flag-5'>總線規(guī)范</b>