找回密码
 注册
关于网站域名变更的通知
查看: 10573|回复: 94
打印 上一主题 下一主题

SPI接口通信深入浅出

[复制链接]
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-3-31 09:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 行者~ABC 于 2020-11-13 09:01 编辑 $ G( o: }( ?( L

    ( e) L) k0 K3 D
    9 h* Q. E+ U8 @$ w: b2 ~+ l8 A1 什么是SPI  N5 H! [7 y/ V( I( R
    SPI是串口外设接口的缩写,是一种高速的、全双工、同步的通信协议,是微处理器与外围IC之间常用的一种通讯方式。1 [% i3 R9 ]: J; B4 V6 o; N* Z
    SPI是主从式的通信协议,可以一主机一从机通信,也可以一主机多从机通信。2 e) w% \5 |; j2 B
    * i! b+ P7 w3 F9 O

    $ {6 m( }, g0 ~, }7 a# b- ^$ y) w2 w2 SPI的优缺点) U+ K' \, J  i" D2 |- d
    SPI接口简单,一般只需要4个引脚就可以通信,分别是SCLK、MOSI、MISO、CS,假如只需要单向通信,那么最少只需要2个引脚就可以。
    % {! j1 d" T9 n5 P! ]8 ^5 p ' Z  o& C1 R- X, I0 d, m- `" }) ^

    $ }" h- |& s' L, V) {+ ]2 fSPI的一个缺点就是没有指定的流控制,没有应答机制确认是否接收到数据,只支持一个主机方式等。
    : r* b) q4 D0 P  F
    6 w! c! g( D3 M9 i' @3 Z  f# ]3 J: P& a# N: r! \* b
    3 SPI怎么工作的9 }1 z8 Q+ U  V2 _4 m8 o/ F
    用一句话概括SPI怎么工作的,SPI设备在SCLK时钟的驱动下,在其上升沿或者下降沿时接收或者发送数据,实现数据传输的目的。& \; o, o4 j, U
    4 ~; v+ @+ ^3 l0 H6 P2 y5 y9 a
    [hide]; k9 p. {1 G5 d( X( t- F
    3.1 SPI的工作模式
    - P; @0 \! Z( L& ^5 v在SPI中,有四种工作模式,可以根据时钟极性CPOL和时钟相位CPHA进行选择。在空闲状态期间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间。CPHA位选择时钟相位,根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位来确定工作模式。
    . n% I" `% e- ]6 e  m  Q5 [ : |0 C* }* R! o3 i! ~  n

    $ E! B8 K8 H: C7 t) Z1 ]! ^
    4 a; t8 n& i' q
    ' ]$ ]9 S# w* @+ w! s4 S如图 1为一主机和一从机的连接方式。其中SCLK时钟由主机发出,从机只能跟从主机的控制。MISO为主机的数据输入引脚,SDO为从机的数据输出引脚,在SCLK的控制下,数据一位一位地由从机的SDO引脚传送到主机的MISO引脚。MOSI为主机的输出引脚,SDI为从机的输入引脚,在SCLK的控制下,数据一位一位地由主机传送到从机。CS由主机控制,可以控制选中某一个从机与主机通讯,图 1为一主机一从机方式,其实可以将从机的CS引脚直接接到低电平表示常选中,那么就节省了CS引脚开支。4 }" m7 B% s5 `9 F; i0 z
    ' ?# {+ j5 _+ I6 f8 e* }( |4 d

    & P) ~1 a# Z  f- H( O1 p1 L3 g# @如图 2为模式0时的工作时序。在此模式下,当主机拉低CS电平时(黑色虚线),与其连接的从机被选中,该从机此时与主机进行通信。$ i8 d0 S# k5 ~2 A+ [3 `% {) X( Z
    当SCLK上升沿来临时(绿色虚线),主机读取来自从机输出的电平信号。* T" a: t* z$ B9 L0 X+ d
    当SCLK下降沿时(蓝色虚线),主机送出一位数据,从机此时应当采集主机传输过来的信息。# I! L! Y* @5 c  i; D3 j
    在此时应当注意各个引脚上电平的持续时间,应当符合从机的要求。! i! _7 Z. C2 p8 @8 L
    : b$ j7 ?: G) D0 G
    3 h+ R1 [* M. M
    3.2 SPI的数据传输) U8 p6 Z4 S" F5 o/ {' R7 m( K* `; R
    & H) y) [! k: s* A) _, u1 C/ U
    / a: x4 C3 w: }
    在SPI中,数据的接收和发送其实是同时进行的,只不过分别在一个脉冲的上升沿或(和)下降沿中进行。一般来说,在主机和从机中分别有一个移位寄存器,假如没有硬件的寄存器也可以用程序来虚拟一个移位寄存器。如图 3,当SCLK一个周期脉冲来临的时候,主机从移位寄存器的最高位(也可以设置为最低位)开始依次送出一个位的数据到从机移位寄存器的末尾,同时,从机也向主机发送一位数据到主机的移位寄存器的末尾。图中当SCLK发送8个脉冲之后,主机的移位寄存器和从机的移位寄存器中的数据就完全交换了一次,达到数据传输的目的。
    # L) j. S* T. f/ Q在程序处理中,可以在通讯的过程中按照需求改变两机移位寄存器中的数值,或者选择是否读取对方移位寄存器中的数据。
    9 [1 E/ J6 H; f* W$ O( r1 Q0 e- o7 ]' E

    ! A5 S- m3 w4 A! O1 [4 SPI多机通信和编程
    1 ^$ C" w- F% e' j& c( Q3 R; S$ W

      p' h8 J2 m0 ^, X$ |; V4.1一主机与多从机数据交换
    6 P  A" ?, j/ @- }/ W% Z; o8 t ( v$ U" h1 [# C" g5 q4 V. O
    / G& F  z/ f$ ?9 c
    (1)        主机与某一从机之间通信
    # ~! v1 Z1 i& L# k$ P% s当主机(master)与从机(slave)需要通信时,主机先将目标从机的CS引脚拉低,表示选中该从机,注意某一时刻只能与一个从机通信,也就是只能有一个从机的CS被拉低选中,再按照图 2类似的时序写程序,控制SCLK、MISO、MOSI引脚,读取从机数据或者向从机发送数据。1 H# e- r/ F7 F- D2 L
    程序设计流程:; g7 X" P9 r5 N6 Y! f

    ( ^' c6 L' r; E6 u/ t$ k% V$ `- {# i
    图 5为主机控制从机1在SPI 0模式下的一位数据(二进制0或者1)的收发程序流程。参照图 2,首先拉低从机1的片选信号,主机令SCLK引脚为低电平并保持要求的时间,之后主机令SCLK引脚为高电平,SCLK上升沿来到,此时从机的数据已经输入到主机的MISO引脚,主机将数据读入到一个变量里面。主机接着令MOSI引脚输出指定的电平信号,保持一定时间,再将SCLK引脚拉低,令SCLK产生下降沿,主机输出数据,这样就完成一位数据的收发流程。如果主机要与其他从机通信,只需要将其片选信号拉低,并将其余的片选信号拉高即可。
    7 c# ]/ [; l0 z+ t7 m. a! {* a: J' C+ C- s& K! o3 {4 r

    : t+ I. a4 R* x  L' J7 n1 C(2)        从机与从机之间的通信5 u! ]0 }" |7 f% U7 v5 }7 b
    从机与从机之间是不能进行直接通信的,但是可以这样,从机可以将数据传输到主机,再由主机将数据发送给目标从机,反之类似。控制器、电路板、自动化、软件开发定制,业务Q: 2531-263-726( i3 o- L6 K* X$ D  r0 Q% U2 R2 W
    9 b7 u, |- ^) _) A
    / h  A+ q4 }( c1 f* t7 x, r& Q/ S
    4.2菊花链模式. @3 t* B; g9 {# R" @

    : n; @$ S* |& e; R* p4 M
    8 C% c& {( I5 B+ u7 k菊花链模式避免了过多的CS引脚开支,将上一个设备的输出引脚(如SDO)与下一设备的输入引脚(如SDI)串联起来,数据在SCLK的控制下可以实现从上一个设备到下一个设备的流动循环传输。8 D+ j. P: W: d" |2 H  q- y
    谢谢关注,全文完。0 W4 D! y0 G- K# k+ k' N5 n

    该用户从未签到

    推荐
    发表于 2020-11-17 09:21 | 只看该作者
    行者~ABC 发表于 2020-11-17 09:19# {" ~3 o# z* k* w& r3 j: Z- L2 ~
    主从这个图看着很明白
    : t) @' [* e1 ]+ q( B8 }/ v% a) H
    是的,这个容易看懂怎么连接,% V: M, X4 P2 }- H2 G
  • TA的每日心情

    2019-11-20 15:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    推荐
    发表于 2021-5-24 10:00 | 只看该作者
    这个SPI在总线连接关系上还是很清楚的,我们用的时候一般都是一对一

    该用户从未签到

    3#
    发表于 2020-3-31 15:01 | 只看该作者
    SPI 四种模式

    该用户从未签到

    4#
    发表于 2020-4-4 19:28 | 只看该作者

    该用户从未签到

    5#
    发表于 2020-4-22 08:23 | 只看该作者

    该用户从未签到

    6#
    发表于 2020-4-24 10:02 | 只看该作者
    看看了解下
    , B8 P+ V2 l& ]" c3 U- \9 W% N! o8 R. ], W) f

    该用户从未签到

    9#
    发表于 2020-5-5 13:25 | 只看该作者

    该用户从未签到

    10#
    发表于 2020-5-6 11:49 | 只看该作者
    非常感谢版主的分享,学习了。谢谢1 s# }2 R. f* N! _' Z0 `

    该用户从未签到

    11#
    发表于 2020-5-10 20:33 | 只看该作者
    1111154946645( A$ O. \8 `( ]0 \+ |# A0 `9 M  q

    该用户从未签到

    14#
    发表于 2020-5-13 21:27 | 只看该作者
    学习了,非常感谢
    ) ^( b! O1 J9 [5 o$ l# ~2 j4 ]

    该用户从未签到

    15#
    发表于 2020-5-20 17:27 | 只看该作者
    SPI 四种模式
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-16 06:55 , Processed in 0.125000 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表