TA的每日心情 | 开心 2023-5-15 15:14 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 行者~ABC 于 2020-11-13 09:01 编辑
( X5 K% v9 Y+ P
/ k; b7 y1 p, j& p$ Q5 y) _' n; p
% T% ^1 O! w. |% n7 {$ ?2 u1 什么是SPI J- [# j% K' t" x1 F
SPI是串口外设接口的缩写,是一种高速的、全双工、同步的通信协议,是微处理器与外围IC之间常用的一种通讯方式。; R! ` R2 v7 W4 K$ |5 [/ W7 \! A
SPI是主从式的通信协议,可以一主机一从机通信,也可以一主机多从机通信。
6 g) i8 }8 T7 z0 V0 L( {7 V2 q- s
2 r4 ]; F! z! q0 O- a8 K+ I2 z# p1 f# w1 a8 g
2 SPI的优缺点
3 R( T# v- q0 f3 F" [1 x0 T+ ^3 iSPI接口简单,一般只需要4个引脚就可以通信,分别是SCLK、MOSI、MISO、CS,假如只需要单向通信,那么最少只需要2个引脚就可以。. R. s1 s2 s, E8 y+ l& u
' e2 O$ r$ a6 I) }
( o- A8 M+ L9 ~9 Y" ~8 H1 ~SPI的一个缺点就是没有指定的流控制,没有应答机制确认是否接收到数据,只支持一个主机方式等。3 E. e: B6 E& U1 c8 c3 D
0 U5 N3 G1 T5 Y8 T( ^+ M( \
8 F" R4 U- C" r( O( @8 N1 A+ r; n
3 SPI怎么工作的& }4 s& Q+ |5 T3 N4 B: `8 Q0 J
用一句话概括SPI怎么工作的,SPI设备在SCLK时钟的驱动下,在其上升沿或者下降沿时接收或者发送数据,实现数据传输的目的。9 C/ v. ?& s, f# V$ n, \2 @$ m
' v9 Y: v8 @" t" c- K
[hide]
- `9 j+ Z5 W5 c- b3.1 SPI的工作模式& o2 {1 L& p& V( l
在SPI中,有四种工作模式,可以根据时钟极性CPOL和时钟相位CPHA进行选择。在空闲状态期间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间。CPHA位选择时钟相位,根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位来确定工作模式。
5 p3 m& a, [4 b% O* v, ?
9 |& U B7 q1 z5 N
S1 D4 w# x2 }: n' [" J
2 G3 `8 L) E/ u" q9 x) |( y: O1 S+ b: ^- K3 B* V7 X
如图 1为一主机和一从机的连接方式。其中SCLK时钟由主机发出,从机只能跟从主机的控制。MISO为主机的数据输入引脚,SDO为从机的数据输出引脚,在SCLK的控制下,数据一位一位地由从机的SDO引脚传送到主机的MISO引脚。MOSI为主机的输出引脚,SDI为从机的输入引脚,在SCLK的控制下,数据一位一位地由主机传送到从机。CS由主机控制,可以控制选中某一个从机与主机通讯,图 1为一主机一从机方式,其实可以将从机的CS引脚直接接到低电平表示常选中,那么就节省了CS引脚开支。! g: x2 S" E5 t' X0 t
' q U8 N4 h% x6 [8 [& q
0 U5 d9 _' y: }. ^2 e2 }
如图 2为模式0时的工作时序。在此模式下,当主机拉低CS电平时(黑色虚线),与其连接的从机被选中,该从机此时与主机进行通信。$ i* ?2 w- I* V
当SCLK上升沿来临时(绿色虚线),主机读取来自从机输出的电平信号。' ] e$ ]% Z4 Q1 B' \# y3 w. x' n
当SCLK下降沿时(蓝色虚线),主机送出一位数据,从机此时应当采集主机传输过来的信息。
' @: N3 E4 M) R+ `& q, J& P在此时应当注意各个引脚上电平的持续时间,应当符合从机的要求。 y# ~8 z& p* x* t' h' @
6 X$ n# v( [! l. _# T4 {
$ \' O. M8 M, K: ^3.2 SPI的数据传输6 z" ~( Z* Q2 _' d$ {7 r+ p
# U' O) x! N+ _- U0 |9 Q: P I/ [; }. t6 h; G2 i2 |
在SPI中,数据的接收和发送其实是同时进行的,只不过分别在一个脉冲的上升沿或(和)下降沿中进行。一般来说,在主机和从机中分别有一个移位寄存器,假如没有硬件的寄存器也可以用程序来虚拟一个移位寄存器。如图 3,当SCLK一个周期脉冲来临的时候,主机从移位寄存器的最高位(也可以设置为最低位)开始依次送出一个位的数据到从机移位寄存器的末尾,同时,从机也向主机发送一位数据到主机的移位寄存器的末尾。图中当SCLK发送8个脉冲之后,主机的移位寄存器和从机的移位寄存器中的数据就完全交换了一次,达到数据传输的目的。) A. y8 S$ w* x: f$ f
在程序处理中,可以在通讯的过程中按照需求改变两机移位寄存器中的数值,或者选择是否读取对方移位寄存器中的数据。
$ |# d, r9 O! T7 x
3 D' |/ g5 N- Y& q* P# Q/ s9 q. {+ A) L8 X
4 SPI多机通信和编程
7 G2 m0 C1 o5 _
* i% B6 Z4 a$ E9 p8 P! T
- R& X7 Y6 f; K$ w, U! m4.1一主机与多从机数据交换
- {( c) v% H# j* ]( G& o4 i N
! |( b, T4 ^; V# P2 p7 r' a. |. a B; X- h. h0 [
(1) 主机与某一从机之间通信
7 Q* l7 ]. G0 P# |5 J A当主机(master)与从机(slave)需要通信时,主机先将目标从机的CS引脚拉低,表示选中该从机,注意某一时刻只能与一个从机通信,也就是只能有一个从机的CS被拉低选中,再按照图 2类似的时序写程序,控制SCLK、MISO、MOSI引脚,读取从机数据或者向从机发送数据。
6 S% D# i+ D4 G w& P0 t/ F程序设计流程:$ ~* ^( C9 V; X7 |# J# R) u
0 D% p4 a: s2 R: d( e' ^! D; Z3 Z# [1 Y, U: ~) [. J: p
图 5为主机控制从机1在SPI 0模式下的一位数据(二进制0或者1)的收发程序流程。参照图 2,首先拉低从机1的片选信号,主机令SCLK引脚为低电平并保持要求的时间,之后主机令SCLK引脚为高电平,SCLK上升沿来到,此时从机的数据已经输入到主机的MISO引脚,主机将数据读入到一个变量里面。主机接着令MOSI引脚输出指定的电平信号,保持一定时间,再将SCLK引脚拉低,令SCLK产生下降沿,主机输出数据,这样就完成一位数据的收发流程。如果主机要与其他从机通信,只需要将其片选信号拉低,并将其余的片选信号拉高即可。
4 R1 h1 T4 {' z/ C
, i' W0 i* A. R8 j; c0 j
4 {! Y" j% S a" f(2) 从机与从机之间的通信
( p' Y' k' L- d从机与从机之间是不能进行直接通信的,但是可以这样,从机可以将数据传输到主机,再由主机将数据发送给目标从机,反之类似。控制器、电路板、自动化、软件开发定制,业务Q: 2531-263-726
6 B0 d+ r t$ B. J7 V2 [. N3 M$ r* ?; S, n7 E3 A0 N" k" U8 q
9 j2 ?+ G1 t: U5 I1 k+ e
4.2菊花链模式
7 O* Y) g: h9 q: ` t* n
2 B/ O) u3 }3 f8 _4 f) A3 V$ J8 Y( n8 v
菊花链模式避免了过多的CS引脚开支,将上一个设备的输出引脚(如SDO)与下一设备的输入引脚(如SDI)串联起来,数据在SCLK的控制下可以实现从上一个设备到下一个设备的流动循环传输。
* a t( r- S0 Y: K0 X) g8 o谢谢关注,全文完。. m+ [/ ?7 B$ X8 N& b0 h
|
|