www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]嵌入式系統(tǒng)中I2S總線數(shù)據(jù)通信的軟件模擬

  引言

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

  本文通過(guò)在以太網(wǎng)數(shù)字語(yǔ)音廣播系統(tǒng)中軟件模擬I2S總線實(shí)現(xiàn)語(yǔ)音數(shù)據(jù)傳輸,給出了軟件模擬實(shí)現(xiàn)I2S總線的方法。

  1  I2S總線規(guī)范

  I2S為三線總線,3個(gè)信號(hào)分別為:

 ?、?nbsp; 串行時(shí)鐘SCK,也叫位時(shí)鐘(BCK)。即每發(fā)送1位數(shù)字音頻數(shù)據(jù),SCK上都有1個(gè)脈沖。SCK的頻率=2×采樣頻率×采樣位數(shù)。在數(shù)據(jù)傳輸過(guò)程中,I2S總線的發(fā)送器和接收器都可以作為系統(tǒng)的主機(jī)來(lái)提供系統(tǒng)的時(shí)鐘頻率。

  ②  幀時(shí)鐘WS,即命令(聲道)選擇,用于切換左右聲道的數(shù)據(jù)。WS的頻率等于采樣頻率,由系統(tǒng)主機(jī)提供。WS為“0”表示傳輸?shù)氖亲舐暤赖臄?shù)據(jù),WS為“1”表示傳輸?shù)氖怯衣暤赖臄?shù)據(jù)。

  ③ 串行數(shù)據(jù)信號(hào)SD,用于傳輸二進(jìn)制補(bǔ)碼表示的音頻數(shù)據(jù)。

  I2S格式的信號(hào)無(wú)論有多少位有效數(shù)據(jù),數(shù)據(jù)位的最高位(MSB)總是被最先傳輸,1次能夠發(fā)送的數(shù)據(jù)決定于I2S格式的有效位數(shù)。

  1個(gè)典型的I2S信號(hào)時(shí)序如圖1所示


圖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  16位有效位數(shù)的左對(duì)齊格式


圖3  16位有效位數(shù)的右對(duì)齊格式[!--empirenews.page--]

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

 


 

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


圖5  LM3S8962與MS6336的連接圖

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

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


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

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


圖7  1個(gè)采樣點(diǎn)數(shù)據(jù)發(fā)送流程

  軟件模擬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ù)傳送位[!--empirenews.page--]

  根據(jù)MS6336的I2S總線格式以及數(shù)據(jù)發(fā)送流程,軟件模擬I2S總線的步驟如下:

 ?、?根據(jù)語(yǔ)音數(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)用示波器來(lái)精確延時(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==0){//左聲道

  if(HorLCnt==0){//高字節(jié)

  c=*(SampleData+1);//SampleData指向音頻數(shù)據(jù)緩沖區(qū)首地址,即左聲道低字節(jié)

  delayI2S(2);//發(fā)送第一個(gè)數(shù)據(jù)位之前需要延遲一個(gè)位時(shí)鐘周期

  }

  else{//低字節(jié)

  c=*SampleData;

  }

  }

  ……

  }

 ?、?開(kāi)始傳輸音頻數(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為低,開(kāi)始準(zhǔn)備數(shù)據(jù)位

  HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = ~I(xiàn)2S_BCK;

  if((c<<BitCnt)&0x80) {

  HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA << 2))) = I2S_DATA;

  }

  else{

  HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA << 2))) = ~I(xiàn)2S_DATA;

  }

  delayI2S(1); //延時(shí)半個(gè)SCK時(shí)鐘周期置時(shí)鐘線為高,開(kāi)始傳輸數(shù)據(jù)位

  HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = I2S_BCK;

  delayI2S(1);//延時(shí)半個(gè)時(shí)鐘周期

  }

 ?、?當(dāng)將1個(gè)采樣點(diǎn)的左聲道的數(shù)據(jù)發(fā)送完以后,延時(shí)2個(gè)SCK周期,然后發(fā)送右聲道的數(shù)據(jù)(同左聲道數(shù)據(jù)的發(fā)送過(guò)程)。

  根據(jù)以上的過(guò)程對(duì)每個(gè)采樣點(diǎn)的數(shù)據(jù)進(jìn)行處理,就可以實(shí)現(xiàn)通過(guò)軟件模擬I2S總線傳輸音頻數(shù)據(jù)了。以上實(shí)現(xiàn)的是典型I2S時(shí)序模擬,而左對(duì)齊和右對(duì)齊2種格式只是時(shí)序稍有差異,模擬實(shí)現(xiàn)過(guò)程同典型I2S總線模擬實(shí)現(xiàn)過(guò)程基本相同。

  結(jié)語(yǔ)

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


 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

Lua RTOS 是一個(gè)實(shí)時(shí)操作系統(tǒng),設(shè)計(jì)在嵌入式系統(tǒng)上運(yùn)行,對(duì) FLASH 和 RAM 內(nèi)存的要求最低。目前 Lua RTOS 可用于 ESP32, ESP8266 和 PIC32MZ 平臺(tái),并可以輕松移植到其他32位...

關(guān)鍵字: Lua RTOS 操作系統(tǒng) 嵌入式系統(tǒng)

通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱(chēng)作UATR,是一種串行、異步、全雙工的收發(fā)器。全雙工的UART支持同時(shí)雙向通信,是嵌入式系統(tǒng)必不可少的d...

關(guān)鍵字: 異步收發(fā) 傳輸器 嵌入式系統(tǒng)

上海2022年10月17日 /美通社/ -- 近日,第17屆中國(guó)研究生電子設(shè)計(jì)競(jìng)賽(下簡(jiǎn)稱(chēng):研電賽)全國(guó)總決賽評(píng)審工作圓滿完成。今年,來(lái)自全國(guó)63個(gè)高校的114支參賽隊(duì)伍報(bào)名了TI企業(yè)命題,創(chuàng)下歷史新高。并且,...

關(guān)鍵字: TI 德州儀器 OS 模擬

Flash Memory 是一種非易失性的存儲(chǔ)器。在嵌入式系統(tǒng)中通常用于存放系統(tǒng)、應(yīng)用和數(shù)據(jù)等。在 PC 系統(tǒng)中,則主要用在固態(tài)硬盤(pán)以及主板 BIOS 中。

關(guān)鍵字: Flash 存儲(chǔ)器 嵌入式系統(tǒng)

芭比娃娃制造商、全球玩具巨頭美泰公司(Mattel)宣布入駐元宇宙平臺(tái)Roblox,正式進(jìn)軍元宇宙市場(chǎng)。該公司已經(jīng)在沙盒游戲元宇宙Roblox中為芭比娃娃建造了一個(gè)虛擬空間,幾個(gè)月后將在 Livetopia 中舉辦「芭比...

關(guān)鍵字: POCKET 模擬 TOP TE

可以有很多種,如果我們隨機(jī)采訪10位業(yè)內(nèi)大佬,也許會(huì)得到10種不同的答案。舉個(gè)例子,按照處理信號(hào)方式可分為模擬芯片和數(shù)字芯片。按照設(shè)計(jì)理念可分為可分為通用芯片和專(zhuān)用芯片。

關(guān)鍵字: 模擬 芯片 數(shù)字芯片

(全球TMT2022年9月22日訊)OneAsia宣布,推出高性能計(jì)算解決方案OAsis,并作為香港首個(gè)同類(lèi)解決方案,賦能針對(duì)復(fù)雜數(shù)據(jù)的計(jì)算能力和模擬計(jì)算能力。 OAsis支持客戶將按需計(jì)費(fèi)的敏捷性云服...

關(guān)鍵字: ASIA 高性能計(jì)算 數(shù)據(jù)存儲(chǔ) 模擬

泰國(guó)曼谷2022年9月21日 /美通社/ -- 華為全聯(lián)接大會(huì)2022泰國(guó)曼谷站期間,在"智能云網(wǎng),引領(lǐng)數(shù)字化創(chuàng)新"峰會(huì)上,華為圍繞客戶當(dāng)前業(yè)務(wù)場(chǎng)景的最新變化,詳細(xì)闡述了云園區(qū)網(wǎng)絡(luò)CloudCampu...

關(guān)鍵字: 華為 數(shù)字化 Wi-Fi 數(shù)據(jù)通信

上海2022年9月19日 /美通社/ -- 近日,由全球領(lǐng)先的數(shù)字化整合增值服務(wù)商 -- 柯尼卡美能達(dá)(中國(guó))投資有限公司發(fā)起的"握爪之約,追光未來(lái)"導(dǎo)盲犬愛(ài)心公益活動(dòng)暨捐贈(zèng)儀式于廣州導(dǎo)盲犬學(xué)校舉行。...

關(guān)鍵字: CSR 數(shù)字化 機(jī)電設(shè)備 模擬

近年來(lái),隨著計(jì)算機(jī)技術(shù)及集成電路技術(shù)的發(fā)展,嵌入式技術(shù)日漸普及,在通訊、網(wǎng)絡(luò)、工控、醫(yī)療、電子等領(lǐng)域發(fā)揮著越來(lái)越重要的作用。嵌入式系統(tǒng)無(wú)疑成為當(dāng)前最熱門(mén)最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。?嵌入式系統(tǒng)一般由嵌入式微處理器、外...

關(guān)鍵字: 嵌入式 嵌入式系統(tǒng) 計(jì)算機(jī)

嵌入式教程

6897 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉