你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用标准SPI外设, 在STM32L0系列微控制器上执行I2S协议模拟

[复制链接]
STMCU小助手 发布时间:2022-7-10 19:38
引言1 \! v7 Q, f' m1 Y% i( Z
I2S协议广泛用于从微控制器/DSP到音频编解码器传输音频数据,以播放(储存于存储器中的)音频内容,或者(从麦克风)捕获模拟声音。
! N& g3 M! l4 d3 a本应用笔记描述了标准SPI(串行协议接口)和TIMER外设如何能够模拟I2S接口。当应用程序由于物理限制(小封装)或因为已经使用(全双工音频交换),而不允许使用I2S功能时,此解决方案非常有用。
% v! ^0 r, W+ P7 m/ v" {作为基于STM32L0系列产品的应用示例,我们提出了一个常见的用例,其中,从UART外设异步接收数据,并通过所提出的模拟I2S主接口同步传输到外部IC(集成电路)。
; u( v/ F, t* _
. E+ q8 j# {/ `# j3 }+ F
& X& b  p* g6 n- r1 S
1 I2S外设仿真原理
: W6 t+ ]# e. Y: R5 f: l当I²S功能(包含在SPI外设中)不可使用或者已经被使用的时候(全双工或多音频编解码器系统),可以使用标准SPI和定时器外设模拟I²S协议主机或从机。本应用笔记描述了主I²S接口的仿真。
7 ^, s+ ~; V7 i% s0 o' ~: M I[8FALZLV@6CMY8%E@NXE]G.png
* i; F" R! {: R1 v6 U# [( V2 x
% R4 I# s& O' F! R6 N1 k* p )1`M{H(EVENM@YPYVN4AJ9T.png , R. u0 q' p6 a: @

0 V8 j/ P. D6 `6 r & _! d  Y; b" C8 a" \1 g/ b
1.1 I2S数字音频协议* ^9 U3 _8 v" M2 Z: x9 _  M
I2S接口(Inter-IC-Sound)是一种同步串行总线接口标准,用于数字音频设备的互连。在小端格式(MSB优先)下,可使用I²S传输音频数据,其速率与发射器的下降时钟沿(SCK信号)同步,并与接收器的上升沿同步。请注意,单独的时钟和数据会导致少量抖动。& D, M5 D/ A/ g$ T/ g
(继承自CD音频格式的)数据代表立体声数字音频,因此,每个样本包含两个字——右声道样本和左声道样本。它并不使用两个数据通道,而是执行复用,在半个采样周期传输一个字,这样就将采样率加倍,可在每周期传输两个字。3 a  }7 G3 o* {( n( s* }9 ~
它使用控制信号WS(字选择)确定正在发送的字是右声道还是左声道。此信号还决定了数据的开始和结束;因此无需固定数据长度。因此,接收器和发射器数据长度可以不同,右声道和左声道数据长度也可以不同。在SCK的下降沿同步WS,比MSB早一个SCK周期,以便有足够时间执行储存和移位操作。
8 Z  t8 ?) |/ e, r; E; X5 m5 e9 G* U! w) Z  k' z
{}E{M1$OQ}W)RNH%H]%Q8BG.png
& X! x" \6 k9 c3 {
/ _" e% x& `5 _( w与大多数通信协议一样,必须有主设备和从设备。主设备提供并控制SCK时钟和WS信号,从设备仅发送或接收数据。主设备可以是接收器、发送器或第三设备:6 i* i+ Q: r( s* s
& z+ O: i9 M4 T  Q1 E& d1 ]
# M1 Y- [8 @1 N8 G3 ]
}6[~@@GH5(O8D$OO~7]4246.png
$ h6 y4 D* `2 e6 E
$ H) `. O) T6 V6 [0 h
, E$ S1 c9 S+ F5 k
1.1.1 串行协议接口外设(SPI)
, z: \8 b" d: U5 M: ]9 c内部标准外设接口,即SPI,提供简单的通信接口,允许微控制器与外部设备通信。此接口具有高度可配置性,用于支持多重标准协议。SCK(SPI)可直接用作SCK(I²S),MOSI(SPI)用 作SD (I²S)。( U: ^" [; n  ?3 i6 m& ?
第三个信号WS(字选择)相对于SCK信号同步和延迟,因此需要使用定时器外设。
& c: k' p  n' M; D0 V5 e$ [ 4 R& g+ y/ `( Z
YOL`H4B%IZ_}HDW{`2F5){S.png
5 i' A- D# e# W5 R, i* q! H- v9 z7 u; z: y, S( p, E5 D3 A/ g
/ o0 r3 x, @$ Q+ y" M
1.1.2 定时器外设
3 W" \+ w- h1 u* b* zSTM32内嵌多个定时器,为I/O相关的硬件任务提供定时资源。定时器的输出可生成波形,2 I, f$ w( V' t" }
其输入可对外部事件做出反应。定时器功能齐全,提供多种工作模式,可以减少CPU的重复7 H9 Z4 M8 ~; d, G
性和时间关键型任务,同时最大限度地减少接口电路的需求。定时器内核由一个16位向上4 H* X$ v8 A0 J2 {! c7 a
计数器,一个用于编程计数周期的自动重载寄存器和一个用于调整计数器翻转中断率的重复! K6 G5 W  [: E
计数器组成。定时器是产生WS(定时器CH3)信号的适当资源,该信号相对于SCK信号同步, S9 X: v# K5 @+ ]6 {- Q
和延迟。定时器由SYSCLK内部定时(SPI外设使用相同的时钟源),其启动触发器(定时
' G1 N4 H7 v1 W! m( a器CH2)通过STM32 GPIO连接到SCK信号。$ ~$ u+ d$ v' A2 G$ z  W
定时器的极性、计数器周期及其初始值设置为与I²S协议配置匹配:
9 j! V$ r5 s2 \9 U" F6 Y• 周期值 = 31  E6 t" M# b. R7 l
• 脉冲值 = 158 j: n: J* m% G; O+ A6 g1 |& I1 t
• 触发器极性=上升% ?0 \7 W- @  ?, P" e
• 输出比较器极性= TIM_OCPOLARITY_HIGH3 j. z0 ~8 m2 }1 X  z( |- Z

: `- E  z7 j9 m) o, v7 z7 A6 b

+ l' X2 C) H9 s- E H2O}UXL{8J0W4QE{(ZGOX8L.png
+ L3 L9 p$ x- B2 u. u$ F+ D
) [# N6 T; u" ?+ j" U6 h1 I
! a2 b+ j: A7 p% G& Z$ L( f1 n
1.1.3 结果
3 h) W% i/ |8 p; v/ u0 K5 Y3 r  u9 h使用标准示波器验证信号波形和时序。通过这种方法,我们还可以验证外设时序是否正确。
7 ]3 u: W9 i2 o/ _7 P0 l我们还验证了固件与以下IS模式列表的兼容性:' Y9 j! i4 h# R
• I 2 S标准 - 立体声通道
+ W5 \/ D$ ~* {0 S! _* ^% }• I 2 S左对齐 - 立体声通道8 J* p; ]" a+ n
• I 2 S右对齐 - 立体声通道5 K3 Q, |: D7 z* G

% W5 n  s8 i; L2 D& _8 P% W $[QTW~}{2l}$OMLBZ%U.png
! n0 N  V  a. i* }( S$ t
赞 收藏 评论0 发布时间:2022-7-10 19:38

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版