《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片

简介:

本节书摘来自异步社区《嵌入式Linux软硬件开发详解——基于S5PV210处理器》一书中的第2章,第2.5节,作者 刘龙,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 WM8960音频编解码芯片

2.5.1 IIS总线接口概述

Smart210开发板具有音频信号的输入输出功能,通过麦克接口,它可以接收音频信号输入;通过一个耳机插孔,可以连接音频信号线输出音频数据,音频信号的处理是通过一片具有IIS总线接口的WM8960芯片来完成的。

IIS (Intel-IC Sound)总线一般称为集成电路内部声音总线,写作I2S。IIS总线源于SONY和PHILIPS等公司共同提出的一个串行数字音频总线协议,许多音频编解码器(CODEC)和微处理器都提供了对IIS总线的支持,S5PV210微处理器支持IIS总线接口。IIS总线只传送音频数据,其他信号(如控制信号)必须另行传送。

通常IIS只使用3部分串行总线(不同芯片可能会有所不同),3条线分别如下。

  • 数据线:提供分时复用功能,数据线传送数据时由时钟信号同步控制,而且以字节为单位传送。
  • 字段选择线:为0或1,表示选择左声道或右声道。
  • 时钟信号线,能够产生时钟信号的设备称为主设备,从设备引入时钟信号作为内部时钟使用。

2.5.2 WM8960概述

WM8960是欧胜(WOLFSON)电子推出的一款低功耗、高质量的音频编解码芯片。该芯片内置有麦克风接口、立体声耳机驱动器、立体声24比特模数转换器(ADC)和数模转换器(DAC)。它主要应用于便携式电脑游戏、DVD播放器、手机多媒体等。WM8960编解码芯片的特点如下。

  • 数模转换器(DAC)信噪比为98dB,采样率为48kHz、电压为3.3V时总谐波失真为−84dB。
  • 模数转换器(ADC)信噪比为95dB,采样率为48kHz、电压为3.3V时总谐波失真为−82dB。
  • 它具有噪声抑制功能。
  • 该芯片具有麦克风接口。
  • 该芯片可编程自动电平控制/抑制器和噪声门限。
  • 该芯片支持3D立体声增强音效。
  • 该芯片支持立体声D类扬声器驱动器。
  • 该芯片每声道输出到8欧姆BTL扬声器的功率为1W。
  • 该芯片具有灵活的开关时钟。
  • 该芯片支持无滤波连接。
  • 片上集成耳机驱动器,16欧姆负载和3.3V供电时,输出功率为40mW。
  • 该芯片支持无电容模式。
  • 该芯片支持低功率消耗。
  • 该芯片支持低电源电压。

WM8960的引脚分布如图2-15所示。


screenshot

WM8960各个引脚功能如表2-9所示。


screenshot


screenshot


screenshot

2.5.3 WM8960硬件设计

WM8960与S5PV210硬件连接如图2-16所示。S5PV210具有IIS控制单元,通过IIS总线接口和I2C总线接口与音频编解码芯片WM8960进行交互,其中IIS接口传输声音数据,I2C传输控制信息(如音量调节、静音等),WM8960接收音频数据完成编解码功能。


screenshot

对于声音信号需要对音频数据的采集与播放。采集是对模拟声音信号进行采集、用数字量进行标示,通过ADC模数转换器来完成。播放将以数字量的形式保存在缓冲区里面的音频数据恢复为模拟信号输出,通过DAC数模转换器来完成。

WM8960同时具备采集和播放所需的ADC与DAC,录音的时候,对模拟声音信号采样,通过内置ADC将模拟信号转换为数字量,经过IIS控制器将转化为的数字量存放在音频芯片内存中;播放的时候,从音频芯片内存中读取数字量,经IIS控制器将数字量传输给WM8960,通过内置DAC将数字量转换为模拟量播放出来。

从图2-15与表2-9所示可以看出,三个引脚与音频信号频率有关。BCLK为串行时钟(也叫位时钟),每一个时钟信号传送一位音频信号,因此BCLK的频率=声道数×采样频率×采样位数(采样频率即每秒钟取样数),如采样频率fs为44.1kHz,采样的位数为16位,声道数两个(左、右两个声道),则BCLK的频率=32fs=1411.2kHz。

XXXLRC为帧时钟,用于切换左、右声道,如LRC为高电平表示正在传输的是左声道数据,为低电平表示正在传输的是右声道数据,因此XXXLRC的频率应该正好等于采样频率。

MCLK为系统时钟,由于IIS控制器只负责数字音频信号的传输,而要真正实现音频信号的放与录还需要额外的处理单元,MCLK为芯片提供系统同步时钟,即编解码时钟,主要用于音频的A/D、D/A采样,一般MCLK为256fs或384fs(fs为采样频率)。通过以上分析我们可以发现,采样频率fs对频率的设置至关重要。fs不是任意设置的,一般基于不同的应用场合和听觉效果,设置不同的值,如8kHz、16kHz、22.05kHz、44.1kHz、48kHz、96kHz等。

在图 2-16 中,CPU的Audio_Xi2sLRCK0连接到了DACLRC,HP_Detect连接到了ADCLRC。ADCLRC和DACLRC分别是输入输出的左右声道时钟引脚。当采样的时候,首先将采样数据传输到左声道缓冲区,然后将下一个采样数据传输到右声道缓冲区,然后又传输到左声道缓冲区,依次往复;当播放的时候,首先将左声道数据提取出来播放,然后是右声道数据,之后又是左声道数据,依次往复。

Audio_Xi2sSDO0_0连接到了DACDAT数模转换数字音频信号输入引脚,Audio_Xi2sSDI0连接到了ADCDAT引脚。DACDAT从内存里面取出的数据经IIS控制器传输给编解码芯片,数模转换后播放。采样的模拟信号转换为数字信号之后,从ADCDAT输出,经IIS控制器传递给内存。采样速率及串行的音频数据的输入输出,则由连接至MCLK与BCLK的S5PV210的Audio_Xi2sCDCLK0引脚和Audio_Xi2sSCLK0引脚来控制。WM8960的SCLK和SDIN引脚接至S5PV210的IIC总线接口第一个通道,通过S5PV210实现对WM8960的配置。

相关文章
|
9天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
62 13
|
5月前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
309 2
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
116 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
4月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
60 6
|
4月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
62 5
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
156 3
|
4月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
143 3
|
5月前
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
139 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
5月前
|
Linux
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
《FFmpeg开发实战》书中介绍了直播的RTSP和RTMP协议,以及新协议SRT和RIST。SRT是安全可靠传输协议,RIST是可靠的互联网流传输协议,两者于2017年发布。腾讯视频云采用SRT改善推流卡顿。以下是Linux环境下为FFmpeg集成libsrt和librist的步骤:下载安装源码,配置、编译和安装。要启用这些库,需重新配置FFmpeg,添加相关选项,然后编译和安装。成功后,通过`ffmpeg -version`检查版本信息以确认启用SRT和RIST支持。详细过程可参考书中相应章节。
119 1
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist