找回密码
 注册
关于网站域名变更的通知
查看: 10536|回复: 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 编辑
    + ^4 I- u; ]0 R
    2 M- ^" g3 V" Y- p; X1 u ! I  b- p/ X' H, O1 x/ ^
    1 什么是SPI
    . v) o; b9 r7 w# U5 A- }SPI是串口外设接口的缩写,是一种高速的、全双工、同步的通信协议,是微处理器与外围IC之间常用的一种通讯方式。4 g7 p8 j( s8 M5 Q3 i: K. p
    SPI是主从式的通信协议,可以一主机一从机通信,也可以一主机多从机通信。1 f+ v1 B4 B& B% Y' y

    - V3 _+ u' V0 s* G& x* M& e# H+ A  [2 b. u- i1 v% P1 s" K; ^
    2 SPI的优缺点0 B. {2 P  ~8 Q5 ^3 c9 g; c
    SPI接口简单,一般只需要4个引脚就可以通信,分别是SCLK、MOSI、MISO、CS,假如只需要单向通信,那么最少只需要2个引脚就可以。5 e' W4 _! s0 w0 G7 r2 r3 G
    7 K% X5 H2 X! @# {  Z

    ' f7 Q/ S; g& Q4 O* e. M4 z: p% XSPI的一个缺点就是没有指定的流控制,没有应答机制确认是否接收到数据,只支持一个主机方式等。% |% C9 I' C0 b: X
    # [: E, Q% q& Q/ ?- M
    , i$ F" m! I" b6 F
    3 SPI怎么工作的  |+ K9 o  l$ f& ^" c
    用一句话概括SPI怎么工作的,SPI设备在SCLK时钟的驱动下,在其上升沿或者下降沿时接收或者发送数据,实现数据传输的目的。' A4 ~% d0 r, }" }' ~* g' V
    9 M7 n' M0 d+ J; l4 s
    [hide]3 N0 p6 Z" P/ j
    3.1 SPI的工作模式3 _7 @5 D% E2 X+ @) v) M# |
    在SPI中,有四种工作模式,可以根据时钟极性CPOL和时钟相位CPHA进行选择。在空闲状态期间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间。CPHA位选择时钟相位,根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位来确定工作模式。
    % L! G6 ?9 `) Q& S8 z7 Q  w # N4 X) u% l8 q4 A9 C# }& @# J
    - |5 \  ~7 C( l& j9 n0 G& B; {
    8 ]. {  n; A' \; J* s
    3 u7 b0 `) L( ~% |: y- i
    如图 1为一主机和一从机的连接方式。其中SCLK时钟由主机发出,从机只能跟从主机的控制。MISO为主机的数据输入引脚,SDO为从机的数据输出引脚,在SCLK的控制下,数据一位一位地由从机的SDO引脚传送到主机的MISO引脚。MOSI为主机的输出引脚,SDI为从机的输入引脚,在SCLK的控制下,数据一位一位地由主机传送到从机。CS由主机控制,可以控制选中某一个从机与主机通讯,图 1为一主机一从机方式,其实可以将从机的CS引脚直接接到低电平表示常选中,那么就节省了CS引脚开支。7 x2 n9 X2 I* a
    ' Q. j4 v0 L3 @' d" h1 A

    , g# C1 J  J* L* O3 S' E+ i1 u如图 2为模式0时的工作时序。在此模式下,当主机拉低CS电平时(黑色虚线),与其连接的从机被选中,该从机此时与主机进行通信。( a. U+ ^* H0 r; r& A
    当SCLK上升沿来临时(绿色虚线),主机读取来自从机输出的电平信号。
    % l- c% M) F8 d5 J) {当SCLK下降沿时(蓝色虚线),主机送出一位数据,从机此时应当采集主机传输过来的信息。) Z1 u. d* w' M, f3 I0 a
    在此时应当注意各个引脚上电平的持续时间,应当符合从机的要求。2 [2 B/ _( L9 H1 e

    % X* s" O4 s1 q) G
    8 i4 w9 b5 E/ y! s2 O6 u% R3.2 SPI的数据传输
    2 p! z7 i9 y; A 5 J! R5 c% M& s4 A9 r, |) |$ e7 L: G
    , W! z! E* p+ D
    在SPI中,数据的接收和发送其实是同时进行的,只不过分别在一个脉冲的上升沿或(和)下降沿中进行。一般来说,在主机和从机中分别有一个移位寄存器,假如没有硬件的寄存器也可以用程序来虚拟一个移位寄存器。如图 3,当SCLK一个周期脉冲来临的时候,主机从移位寄存器的最高位(也可以设置为最低位)开始依次送出一个位的数据到从机移位寄存器的末尾,同时,从机也向主机发送一位数据到主机的移位寄存器的末尾。图中当SCLK发送8个脉冲之后,主机的移位寄存器和从机的移位寄存器中的数据就完全交换了一次,达到数据传输的目的。! {# u+ Z" a7 y( `/ ]7 i4 X; `+ ~
    在程序处理中,可以在通讯的过程中按照需求改变两机移位寄存器中的数值,或者选择是否读取对方移位寄存器中的数据。
    $ m) P3 Y  W; z4 a6 ^. t; w( v/ Z- T
    4 r7 p9 ?5 I4 W8 j/ @, e4 B
    4 SPI多机通信和编程! E5 j) i/ V( L) c

      }1 s: u  @1 f# b1 j
    ' V2 L/ M. u; K& @, H" W2 L4.1一主机与多从机数据交换- E) A5 R! |$ |

    , h1 x3 u$ q4 P7 r7 x  \
    / U/ J6 X0 ^( F! V(1)        主机与某一从机之间通信: }% k1 v/ \* P% `7 `
    当主机(master)与从机(slave)需要通信时,主机先将目标从机的CS引脚拉低,表示选中该从机,注意某一时刻只能与一个从机通信,也就是只能有一个从机的CS被拉低选中,再按照图 2类似的时序写程序,控制SCLK、MISO、MOSI引脚,读取从机数据或者向从机发送数据。. J5 H/ x! r" ]3 [
    程序设计流程:
    - S1 L1 l# ?+ Y% S& H5 [. l - ~1 o+ _. `: S/ n2 V
    $ k8 l4 C7 n6 F+ b; S* B2 p, {
    图 5为主机控制从机1在SPI 0模式下的一位数据(二进制0或者1)的收发程序流程。参照图 2,首先拉低从机1的片选信号,主机令SCLK引脚为低电平并保持要求的时间,之后主机令SCLK引脚为高电平,SCLK上升沿来到,此时从机的数据已经输入到主机的MISO引脚,主机将数据读入到一个变量里面。主机接着令MOSI引脚输出指定的电平信号,保持一定时间,再将SCLK引脚拉低,令SCLK产生下降沿,主机输出数据,这样就完成一位数据的收发流程。如果主机要与其他从机通信,只需要将其片选信号拉低,并将其余的片选信号拉高即可。- N( L! r/ R) Q1 G

    7 ~. F) i) x& O0 `7 e& F
    . {9 N  |2 R' o6 g5 W(2)        从机与从机之间的通信
    % Y; W$ c% |6 d8 h0 M3 F从机与从机之间是不能进行直接通信的,但是可以这样,从机可以将数据传输到主机,再由主机将数据发送给目标从机,反之类似。控制器、电路板、自动化、软件开发定制,业务Q: 2531-263-726
    $ O7 D' x) J7 J% E+ ~" F2 M7 V9 d

    ; ~, Y. H+ v" r/ C: o4.2菊花链模式  J. T) y% x! b. a

    ; z2 @0 y* `7 h& {2 a. ~, l0 \% I
    5 m) X7 m- f9 g4 A菊花链模式避免了过多的CS引脚开支,将上一个设备的输出引脚(如SDO)与下一设备的输入引脚(如SDI)串联起来,数据在SCLK的控制下可以实现从上一个设备到下一个设备的流动循环传输。, n' s+ W9 `% \& _; d9 R
    谢谢关注,全文完。
    ( @  f5 H! p' I) A! N7 T

    该用户从未签到

    推荐
    发表于 2020-11-17 09:21 | 只看该作者
    行者~ABC 发表于 2020-11-17 09:19
    ! B# D' ?2 G. ~5 W+ s$ b. q主从这个图看着很明白

    # [) X3 x. n6 i; Q6 |4 V是的,这个容易看懂怎么连接,% k, ^, H! H) N" `
  • 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 | 只看该作者
    看看了解下
    6 G0 A0 t9 d9 P2 I7 P2 p2 R! A$ Z7 @) `) ~

    该用户从未签到

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

    该用户从未签到

    10#
    发表于 2020-5-6 11:49 | 只看该作者
    非常感谢版主的分享,学习了。谢谢
    9 X% R3 J+ n2 M

    该用户从未签到

    11#
    发表于 2020-5-10 20:33 | 只看该作者
    11111549466451 z& C! }# |9 r$ P' q

    该用户从未签到

    14#
    发表于 2020-5-13 21:27 | 只看该作者
    学习了,非常感谢
    . h$ r* D+ O; C

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-21 21:12 , Processed in 0.156250 second(s), 28 queries , Gzip On.

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

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

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