
引言( ^1 A1 w: H, B I2S协议广泛用于从微控制器/DSP到音频编解码器传输音频数据,以播放(储存于存储器中的)音频内容,或者(从麦克风)捕获模拟声音。* s# y1 @; N3 l3 f y& E 本应用笔记描述了标准SPI(串行协议接口)和TIMER外设如何能够模拟I2S接口。当应用程序由于物理限制(小封装)或因为已经使用(全双工音频交换),而不允许使用I2S功能时,此解决方案非常有用。 作为基于STM32L0系列产品的应用示例,我们提出了一个常见的用例,其中,从UART外设异步接收数据,并通过所提出的模拟I2S主接口同步传输到外部IC(集成电路)。2 g. `; E6 b _ 1 I2S外设仿真原理 当I²S功能(包含在SPI外设中)不可使用或者已经被使用的时候(全双工或多音频编解码器系统),可以使用标准SPI和定时器外设模拟I²S协议主机或从机。本应用笔记描述了主I²S接口的仿真。6 ?. w- k- l; E: |& x ![]() 1 Y" S# a" p% B2 x x9 ^2 l; [ ![]() 2 E* d v/ S/ S6 Q( q 1.1 I2S数字音频协议* X" q3 h R4 Y- s: `2 y8 P9 R$ s% q I2S接口(Inter-IC-Sound)是一种同步串行总线接口标准,用于数字音频设备的互连。在小端格式(MSB优先)下,可使用I²S传输音频数据,其速率与发射器的下降时钟沿(SCK信号)同步,并与接收器的上升沿同步。请注意,单独的时钟和数据会导致少量抖动。 (继承自CD音频格式的)数据代表立体声数字音频,因此,每个样本包含两个字——右声道样本和左声道样本。它并不使用两个数据通道,而是执行复用,在半个采样周期传输一个字,这样就将采样率加倍,可在每周期传输两个字。2 ^7 V) I8 z- c! N 它使用控制信号WS(字选择)确定正在发送的字是右声道还是左声道。此信号还决定了数据的开始和结束;因此无需固定数据长度。因此,接收器和发射器数据长度可以不同,右声道和左声道数据长度也可以不同。在SCK的下降沿同步WS,比MSB早一个SCK周期,以便有足够时间执行储存和移位操作。: h# p6 g4 B( f: [2 F3 h7 ] ![]() $ u# V+ ^% n) p X 与大多数通信协议一样,必须有主设备和从设备。主设备提供并控制SCK时钟和WS信号,从设备仅发送或接收数据。主设备可以是接收器、发送器或第三设备: " Y( ]% k2 J1 e, {$ x; Z6 ~' \ ![]() + Z6 b7 c$ r, F$ } 0 [+ T: e) | S$ Z# { 1.1.1 串行协议接口外设(SPI)3 V, r- a& r. l( { 内部标准外设接口,即SPI,提供简单的通信接口,允许微控制器与外部设备通信。此接口具有高度可配置性,用于支持多重标准协议。SCK(SPI)可直接用作SCK(I²S),MOSI(SPI)用 作SD (I²S)。 第三个信号WS(字选择)相对于SCK信号同步和延迟,因此需要使用定时器外设。 ![]() 5 i( a$ d4 h) m! u! V0 n 1.1.2 定时器外设 STM32内嵌多个定时器,为I/O相关的硬件任务提供定时资源。定时器的输出可生成波形,7 y. V6 J: O% ]" Z1 g 其输入可对外部事件做出反应。定时器功能齐全,提供多种工作模式,可以减少CPU的重复 v8 |+ d4 |5 n# s6 I3 \ X 性和时间关键型任务,同时最大限度地减少接口电路的需求。定时器内核由一个16位向上7 {' X8 C% X; K! T* K8 [ 计数器,一个用于编程计数周期的自动重载寄存器和一个用于调整计数器翻转中断率的重复 计数器组成。定时器是产生WS(定时器CH3)信号的适当资源,该信号相对于SCK信号同步" R$ t; O( Z. p6 g. n' y6 N' K* C 和延迟。定时器由SYSCLK内部定时(SPI外设使用相同的时钟源),其启动触发器(定时 器CH2)通过STM32 GPIO连接到SCK信号。 定时器的极性、计数器周期及其初始值设置为与I²S协议配置匹配:1 m7 a: G; `8 n3 n% X • 周期值 = 313 z3 \6 ~9 D- x! b$ ]: V4 L$ N" G) U% r • 脉冲值 = 15; T0 M: L1 S7 G" \2 e3 C( R0 ? • 触发器极性=上升 • 输出比较器极性= TIM_OCPOLARITY_HIGH& l8 P, ^& N5 B( H* x/ A 8 Y" ~2 u; B- y B# U, f0 C ![]() ) G: s( N2 T8 M, A) f, N6 ` 1.1.3 结果" V6 |1 b# L1 f1 t. v* b @& s 使用标准示波器验证信号波形和时序。通过这种方法,我们还可以验证外设时序是否正确。+ O. n6 d/ `7 p0 k8 e E; [0 H. c# D 我们还验证了固件与以下IS模式列表的兼容性:9 {- y$ k- p6 m" S* V! k: e7 C • I 2 S标准 - 立体声通道! @; v% ~" u) K • I 2 S左对齐 - 立体声通道 • I 2 S右对齐 - 立体声通道/ L! K( N0 @0 a' H1 M% G ! j( R; R5 }( L ![]() |
STM32如何分配原理图IO
STM32ADC过采样及几种ADC采样的处理方法
分享一个STM32L031的串口调试程序
基于STM32L051使用CubeMX生成工程文件ST系列芯片通用经验分享
基于STM32L051开始添加需要的代码经验分享
STM32L051测试I2C协议设备的添加经验分享
基于STM32L051测试Flash和EEPROM的读写
基于STM32L051串口测试与Enocean模块通讯问题
基于STM32L0的EEPROM读写经验分享
基于STM32L0 ADC使用HAL库关于校准问题经验分享