Windows 10 ARM工控主板连接I2S音频芯片

在Windows工控主板应用中,音频功能是一项基本的需求,USB声卡在x86/x64 Windows系统上就可直接免驱使用,但这些USB声卡通常不提供ARM上的Windows系统驱动。本文将介绍如何利用安装在ARM上的Windows工控主板------ESM8400的I2S接口、连接WM8960音频芯片,实现音频的输入与输出。

ESM8400是预装正版Windows 10 IoT企业版操作系统的工控主板,具有名片尺寸、超低功率、无需散热风扇、能在-40℃~80℃的环境温度下稳定工作等诸多优点,ESM8400设计时已经预留了I2S接口,用于连接I2S音频芯片。

1. 硬件连接

ESM8400总有32位GPIO,I2S接口与部分GPIO复用,对应关系如下:

|--------------|-----------|------------------------------|
| ESM8400 GPIO | I2S信号名称 | I2S信号说明 |
| GPIO0 | I2S_MCLK | I2S系统时钟,由ESM8400对外提供 |
| GPIO3 | I2S_RXD | ADC串行数据输入 |
| GPIO4 | I2S_LRCLK | (WS)帧同步信号,指示当前传输的是左声道还是右声道音频 |
| GPIO5 | I2S_TXD | DAC串行数据输出 |
| GPIO14 | I2S_SCK | (BCLK)同步音频数据传输的位时钟信号 |

除I2S信号外,WM8960还需要一组I2C信号和两个额外的IO信号用于配置:

|-----------|---------|--------------|
| ESM8400引脚 | 缺省功能 | 系统支持音频时的复用功能 |
| B12 | TSC_SCL | WM8960 I2C接口 |
| B13 | TSC_SDA | WM8960 I2C接口 |
| D3 | GPIO2 | AUD_INTn |
| D16 | GPIO15 | AUD_PWR_EN |

ESM8400连接WM8960的原理图如下:

在ESM8400开发评估底板上连接WM8960音频模块:

2. WM8960音频芯片的自动识别

为了满足不同应用的需求,我们在系统UEFI中增加了WM8960芯片自动识别的功能,ESM8400的I2S接口缺省配置为GPIO,当在UEFI中通过I2C识别到WM8960芯片时,才切换为I2S功能。I2C的识别代码特别简单,通过I2C操作WM8960的复位寄存器,I2C操作成功即表示连接了WM8960芯片,然后将对应的GPIO切换为I2S状态。WM8960自动识别代码如下:

cpp 复制代码
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工控主板实现WM8960 I2S音频输入/输出

相关推荐
专注VB编程开发20年6 小时前
tftp不支持列出目录下文件的功能
arm开发·tftp
cft56200_ln11 小时前
TDA4时间同步3 网卡添加虚拟时间戳
c语言·开发语言·arm开发·驱动开发·嵌入式硬件·网络协议
振南的单片机世界1 天前
启动流程:上电先取栈顶和复位向量,再进main
arm开发·stm32·嵌入式硬件
振南的单片机世界3 天前
HAL_Delay(1000)真准吗?SysTick的1ms基准从哪来
arm开发·stm32·单片机·嵌入式硬件
带土13 天前
3. ARM寄存器组织
arm开发
会周易的程序员4 天前
C++ 对象池深度解析:架构设计与实现原理
开发语言·c++·物联网·iot·aiot
xiangw@GZ4 天前
ARM TCM 紧耦合内存与 Cache 架构区别
arm开发·架构
XINVRY-FPGA4 天前
XCKU035-2FBVA676I AMD Xilinx Kintex UltraScale FPGA
arm开发·嵌入式硬件·网络安全·fpga开发·硬件工程·信号处理·fpga
少年、潜行4 天前
IAR FOR ARM 历史版本安装包、安装、注册流程【百度网盘资源】
arm开发·iar·iar历史版本·iar安装
Aaron15885 天前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理