现实存在的声音是模拟量,这对声音保存和长距离传输造成很大的困难,一般的做法是把模拟量转成对应的数字量保存,在需要还原声音的地方再把数字量的转成模拟量输出。
模拟量转换成数字量,3个过程:采样、量化和编码。
蓝线的距离就是采样信号的周期,即对应一个采样频率。Fs越高,采样信号越符合曲线,但采样数据量也会越大,一般使用41KHzFs即可得高保真的声音。
蓝线长度就是源声音的量化值。量化位数表示每个采样点用多少位数代表数据范围,常用的有16bit、24bit和32bit等。位数越高,音质越好,数据量也越大。
VM8978是一个低功耗、高质量的立体声多媒体数字信号编译码器,集成DAC和ADC,可解决声音和数字量音频数据转换问题,但本身没有保存音频数据功能。通过VM8978芯片相关寄存器可控制转换过程的参数,比如采样频率,量化位数、增益、滤波等。该芯片与其他设备进行音频数据传输的接口就是I2S协议的音频接口。
I2S总线接口
I2S总线接口有3个主要信号,但只能实现数据半双工传输,后来为实现全双工传输增加了扩展数据引脚
SD:串行数据线。如果是半双工模式,用于发送或接收两个时分复用的数据通道上的数据;如果是全双工模式,仅用于发送数据。
WS:字段选择线、帧时钟线。表明当前传输数据的通道,不同标准不同定义。Fws=Fs。
CK:串行时钟线、位时钟。数字音频的每一位数据都对应一个CK脉冲,Fck=2*Fs*量化位数,2代表左右两个通道数据。
ext_SD:扩展串行数据线,用于全双工传输的数据接收。
有时为使系统间更好地同步,还要传输一个主时钟,STM32F4xx系列控制器固定输出为256*Fs。
统一I2S硬件接口,几种不同的数据格式:MSB、LSB、I2S和PCM。
STM32F4xx系列I2S的数据寄存器只有16bit,并且左右声道数据一般是紧邻传输,为正确得到左右两个声道数据,需要软件控制数据对应通道数据写入或读取。音频数据的量化位数可能不同,I2S支持124和32bit。因为数据寄存器只有16bit,所以对于24和32bit数据长度需要发送两个。产生了4中数据和帧格式组合:
将16位数据封装在16位帧中、将16位数据封装在32位帧中、将24位数据封装在32位帧中、将32位数据封装在32位帧中。
当使用32位数据帧的16位数据时,前16位为有效位,后16位被强制清零,无需任何软件操作或DMA请求。
如果程序使用DMA传输,则24位和32位数据帧需要对数据寄存器执行两次DMA操作。对于所有数据格式和同学标准而言,时钟会先发送最高有效位。
I2S标准
WS:0-左通道,1-右通道。WS信号从当前通道数据的MSB之前的一个时钟开始有效。发送方在时钟信号的下降沿改变数据,接收方在上升沿读取数据。WS信号也在SCK的下降沿变化。Fws=Fs,一个WS周期包括发送左通道和右通道数据,需要64个CK周期来完成一次传输。
左对齐标准
WS:1-左通道,0-右通道。在WS发送翻转时,开始传输数据。该标准较少使用。
右对齐标准
WS:1-左通道,0-右通道。在WS发送翻转时,开始传输数据。
PCM标准
PCM即脉冲编码调制。WS不再作为通道数据选择。两种模式:短帧模式和长帧模式。以WS信号高电平保持时间为判断依据,长帧模式保持13个CK周期,短帧模式只保持1个CK周期,可以通过相关寄存器位选择。如果有多通道数据是在一个WS周期内传输完成的,传输完左通道数据就紧跟发送右声道数据。
I2S功能框
STM32F4xx系列控制器有两个I2S:I2S2和I2S两个资源相互独立,但分别与SPI2和SPI3共用大部分资源。这样I2S2和SPI2只能选择一个功能使用,I2S3和SPI3只能选择一个功能使用。资源共用包括引脚共用和部分寄存器共用,部分专用。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点