在Windows工控主板應(yīng)用中,音頻功能是一項(xiàng)基本的需求,USB聲卡在x86/x64 Windows系統(tǒng)上就可直接免驅(qū)使用,但這些USB聲卡通常不提供ARM上的Windows系統(tǒng)驅(qū)動(dòng)。本文將介紹如何利用安裝在ARM上的Windows工控主板——ESM8400的I2S接口、連接WM8960音頻芯片,實(shí)現(xiàn)音頻的輸入與輸出。
ESM8400是預(yù)裝正版Windows 10 IoT企業(yè)版操作系統(tǒng)的工控主板,具有名片尺寸、超低功率、無(wú)需散熱風(fēng)扇、能在-40℃~80℃的環(huán)境溫度下穩(wěn)定工作等諸多優(yōu)點(diǎn),ESM8400設(shè)計(jì)時(shí)已經(jīng)預(yù)留了I2S接口,用于連接I2S音頻芯片。
ESM8400總有32位GPIO,I2S接口與部分GPIO復(fù)用,對(duì)應(yīng)關(guān)系如下:
ESM8400 GPIO | 信號(hào)名稱(chēng) | 信號(hào)說(shuō)明 |
GPIO0 | I2S_MCLK | 系統(tǒng)時(shí)鐘,由ESM8400對(duì)外提供 |
GPIO3 | I2S_RXD | ADC串行數(shù)據(jù)輸入 |
GPIO4 | I2S_LRCLK | (WS)幀同步信號(hào),指示當(dāng)前傳輸?shù)氖亲舐暤肋€是右聲道音頻 |
GPIO5 | I2S_TXD | DAC串行數(shù)據(jù)輸出 |
GPIO14 | I2S_SCK | (BCLK)同步音頻數(shù)據(jù)傳輸?shù)奈粫r(shí)鐘信號(hào) |
除I2S信號(hào)外,WM8960還需要一組I2C信號(hào)和兩個(gè)額外的IO信號(hào)用于配置:
ESM8400引腳 | 缺省功能 | 系統(tǒng)支持音頻時(shí)的復(fù)用功能 |
B12 | TSC_SCL | WM8960 I2C接口 |
B13 | TSC_SDA | WM8960 I2C接口 |
D3 | GPIO2 | AUD_INTn |
D16 | GPIO15 | AUD_PWR_EN |
ESM8400連接WM8960的原理圖如下:
在ESM8400開(kāi)發(fā)評(píng)估底板上連接WM8960音頻模塊:
為了滿足不同應(yīng)用的需求,我們?cè)谙到y(tǒng)UEFI中增加了WM8960芯片自動(dòng)識(shí)別的功能,ESM8400的I2S接口缺省配置為GPIO,當(dāng)在UEFI中通過(guò)I2C識(shí)別到WM8960芯片時(shí),才切換為I2S功能。I2C的識(shí)別代碼特別簡(jiǎn)單,通過(guò)I2C操作WM8960的復(fù)位寄存器,I2C操作成功即表示連接了WM8960芯片,然后將對(duì)應(yīng)的GPIO切換為I2S狀態(tài)。WM8960自動(dòng)識(shí)別代碼如下:
RegAddr = (0xf << 1); Data = 0x01; Status = iMXI2cWrite(&Wm8960I2cConfig, RegAddr, &Data, 1); if(Status == RETURN_SUCCESS) { // Mux the SAI3 pins to wm8960 codec IOMUXC_SW_MUX_CTL_PAD_SAI3_TXFS = IOMUXC_MUX_ALT0; IOMUXC_SW_MUX_CTL_PAD_SAI3_TXC = IOMUXC_MUX_ALT0; IOMUXC_SW_MUX_CTL_PAD_SAI3_TXD = IOMUXC_MUX_ALT0; IOMUXC_SW_MUX_CTL_PAD_SAI3_RXD = IOMUXC_MUX_ALT0; IOMUXC_SW_MUX_CTL_PAD_SAI3_MCLK = IOMUXC_MUX_ALT0; IOMUXC_SW_PAD_CTL_PAD_SAI3_TXFS = SAI_PAD_CFG_OUT; IOMUXC_SW_PAD_CTL_PAD_SAI3_TXC = SAI_PAD_CFG_OUT; IOMUXC_SW_PAD_CTL_PAD_SAI3_TXD = SAI_PAD_CFG_OUT; IOMUXC_SW_PAD_CTL_PAD_SAI3_RXD = SAI_PAD_CFG_IN; IOMUXC_SW_PAD_CTL_PAD_SAI3_MCLK = SAI_PAD_CFG_OUT; IOMUXC_AUDIOMIX_SAI3_RXDATA_SELECT_INPUT_0 = IOMUXC_MUX_ALT1; DebugPrint(0xffffffff, "Find the audio codec.\n" ); }
ESM8400 ARM Windows工控主板實(shí)現(xiàn)WM8960 I2S音頻輸入/輸出
成都英創(chuàng)信息技術(shù)有限公司 028-8618 0660