当前位置: 首页 > article >正文

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

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

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

1. 硬件连接

ESM8400总有32GPIOI2S接口与部分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芯片自动识别的功能,ESM8400I2S接口缺省配置为GPIO,当在UEFI中通过I2C识别到WM8960芯片时,才切换为I2S功能。I2C的识别代码特别简单,通过I2C操作WM8960的复位寄存器,I2C操作成功即表示连接了WM8960芯片,然后将对应的GPIO切换为I2S状态。WM8960自动识别代码如下:

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音频输入/输出


http://www.kler.cn/a/501825.html

相关文章:

  • Web前端界面开发
  • 小米vela系统(基于开源nuttx内核)——如何使用信号量进行PV操作
  • 【大数据】机器学习 -----关于data.csv数据集分析案例
  • python检测gitlab中某个标签在一个月内添加和移除了多少次
  • 开放词汇检测新晋SOTA:DOSOD实时检测算法详解
  • 计算机网络 | 什么是公网、私网、NAT?
  • 32_Redis分片集群原理
  • 《零基础Go语言算法实战》【题目 2-26】goroutine 的执行效率问题
  • HDFS 的API的操作
  • 【Rust】函数
  • 【网络协议】EIGRP - 第二部分
  • 使用Deepseek搭建类Cursor编辑器
  • SQL语言的计算机基础
  • LeetCode:216.组合总和III
  • 基于单片机的书写坐姿规范提醒器的设计(论文+源码)
  • 自动化机械臂视觉跟踪和手眼校准
  • Docker Swarm、Kubernetes 和 LVS 的功能对比
  • Go语言如何实现高性能缓存服务
  • 青少年编程与数学 02-006 前端开发框架VUE 24课题、UI表单
  • virtual box虚拟机误删Python3.6后导致UBUNTU18.04开机无UI界面(进不了desktop)的解决方法
  • docker推送本地仓库报错
  • 2025年VGC大众汽车科技社招入职测评综合能力英语口语SHL历年真题汇总、考情分析
  • 嵌入式入门Day42
  • Centos8部署Redis Cluster
  • STM32——点亮LED
  • shell脚本回顾1