TA的每日心情 | 开心 2023-5-15 15:14 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 行者~ABC 于 2020-11-13 09:01 编辑
0 j2 R. i) C n8 T. }* h9 H* d
1 u. Z$ [$ J$ M* w# s$ E+ Z
8 z* F v! i. n# L
1 什么是SPI/ L8 Y4 {2 V' r5 Q/ P. o. N
SPI是串口外设接口的缩写,是一种高速的、全双工、同步的通信协议,是微处理器与外围IC之间常用的一种通讯方式。
* v% u; O3 h4 a0 E! nSPI是主从式的通信协议,可以一主机一从机通信,也可以一主机多从机通信。( a( P0 X# Q3 q
8 B! o* c0 `# O; c
) p% Q* |( T0 I! s! d% H- M6 y2 SPI的优缺点
1 [! h4 z2 P( j2 {. i, S( D6 JSPI接口简单,一般只需要4个引脚就可以通信,分别是SCLK、MOSI、MISO、CS,假如只需要单向通信,那么最少只需要2个引脚就可以。' @4 T& ~. p- Q, k+ h/ O
% W8 z3 R' t0 E K2 q/ f2 f% O# u1 \8 r# c
SPI的一个缺点就是没有指定的流控制,没有应答机制确认是否接收到数据,只支持一个主机方式等。6 w/ t% k; w9 x2 f8 Y2 B0 y4 O
4 ~2 C: o7 }$ C4 X& B0 M- N) |
5 r# x5 v- y! f7 D$ }2 |; G$ ]) j5 Y3 SPI怎么工作的
, l0 d+ N0 z3 ~3 P用一句话概括SPI怎么工作的,SPI设备在SCLK时钟的驱动下,在其上升沿或者下降沿时接收或者发送数据,实现数据传输的目的。
4 j4 h- Q& e5 L. S
0 q$ V; C8 d1 L- Z, p2 I[hide]+ w& Q) d3 i4 | s
3.1 SPI的工作模式
+ G3 R! V+ V$ s% g# Y在SPI中,有四种工作模式,可以根据时钟极性CPOL和时钟相位CPHA进行选择。在空闲状态期间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间。CPHA位选择时钟相位,根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位来确定工作模式。
' a& v$ c/ Y8 E+ }7 Q
! C( j! |$ u7 J& O' ?. L
2 V' ]9 d6 p1 f5 e a3 k
6 ~4 h8 Z8 R( [
. ~, B. r* |# \. C6 Y% H+ _如图 1为一主机和一从机的连接方式。其中SCLK时钟由主机发出,从机只能跟从主机的控制。MISO为主机的数据输入引脚,SDO为从机的数据输出引脚,在SCLK的控制下,数据一位一位地由从机的SDO引脚传送到主机的MISO引脚。MOSI为主机的输出引脚,SDI为从机的输入引脚,在SCLK的控制下,数据一位一位地由主机传送到从机。CS由主机控制,可以控制选中某一个从机与主机通讯,图 1为一主机一从机方式,其实可以将从机的CS引脚直接接到低电平表示常选中,那么就节省了CS引脚开支。
& y0 Y P m- u0 s, B( h7 b! A* C
$ e7 y/ r+ |( o. }/ U6 r
+ D4 Q. _ J ^. ^$ [7 x+ C
如图 2为模式0时的工作时序。在此模式下,当主机拉低CS电平时(黑色虚线),与其连接的从机被选中,该从机此时与主机进行通信。
/ `& j8 b" S0 `$ K7 R( N当SCLK上升沿来临时(绿色虚线),主机读取来自从机输出的电平信号。
+ L5 a; L8 S! J! e当SCLK下降沿时(蓝色虚线),主机送出一位数据,从机此时应当采集主机传输过来的信息。
' q1 O: U3 W9 i" ]# r% Z3 x+ b4 O在此时应当注意各个引脚上电平的持续时间,应当符合从机的要求。
" C3 ` C8 G6 _6 x. ?* O. Z1 g! a3 O! I1 G9 z }( _
$ f, \: D: x5 d2 ]% m; j
3.2 SPI的数据传输
; c& n. y% |6 q8 e& {
3 f0 l, Q6 U, y1 G
# i/ G. z* C. V& V5 E6 {
在SPI中,数据的接收和发送其实是同时进行的,只不过分别在一个脉冲的上升沿或(和)下降沿中进行。一般来说,在主机和从机中分别有一个移位寄存器,假如没有硬件的寄存器也可以用程序来虚拟一个移位寄存器。如图 3,当SCLK一个周期脉冲来临的时候,主机从移位寄存器的最高位(也可以设置为最低位)开始依次送出一个位的数据到从机移位寄存器的末尾,同时,从机也向主机发送一位数据到主机的移位寄存器的末尾。图中当SCLK发送8个脉冲之后,主机的移位寄存器和从机的移位寄存器中的数据就完全交换了一次,达到数据传输的目的。
' A: g3 g( w! K' Z" F在程序处理中,可以在通讯的过程中按照需求改变两机移位寄存器中的数值,或者选择是否读取对方移位寄存器中的数据。1 ^& R3 d6 b) y/ q' `% ]7 A; o5 U
3 {% {5 Y9 F, P
$ W* u: Y( k+ q5 l4 SPI多机通信和编程
$ j" ]9 Z7 ~9 g2 Y5 f+ o" c" B% @2 N6 j: t. Y
I' M/ Q8 E, b8 l6 ]1 v7 k
4.1一主机与多从机数据交换$ F8 v l) N8 A
! [0 S3 m1 T5 j! T. L- u4 D9 g1 @0 u- t4 O+ R+ w
(1) 主机与某一从机之间通信) i, Y( g/ L) D9 S; i0 P1 Y
当主机(master)与从机(slave)需要通信时,主机先将目标从机的CS引脚拉低,表示选中该从机,注意某一时刻只能与一个从机通信,也就是只能有一个从机的CS被拉低选中,再按照图 2类似的时序写程序,控制SCLK、MISO、MOSI引脚,读取从机数据或者向从机发送数据。
7 U' U% y" J" O& ~, ^程序设计流程:
& o9 ?2 i7 W1 N* T9 k2 [3 J
. X C% k) H8 v: ]" S; `/ m
$ [* o M) ]( i% S: ~) u5 Q
图 5为主机控制从机1在SPI 0模式下的一位数据(二进制0或者1)的收发程序流程。参照图 2,首先拉低从机1的片选信号,主机令SCLK引脚为低电平并保持要求的时间,之后主机令SCLK引脚为高电平,SCLK上升沿来到,此时从机的数据已经输入到主机的MISO引脚,主机将数据读入到一个变量里面。主机接着令MOSI引脚输出指定的电平信号,保持一定时间,再将SCLK引脚拉低,令SCLK产生下降沿,主机输出数据,这样就完成一位数据的收发流程。如果主机要与其他从机通信,只需要将其片选信号拉低,并将其余的片选信号拉高即可。
) y% v: s3 P6 ?% Y7 g2 ?1 {! y2 b0 a. y J" r
0 H2 Y- H: H! Z) E: w* j
(2) 从机与从机之间的通信! V R u" t2 R( U! l
从机与从机之间是不能进行直接通信的,但是可以这样,从机可以将数据传输到主机,再由主机将数据发送给目标从机,反之类似。控制器、电路板、自动化、软件开发定制,业务Q: 2531-263-726% ]: ~6 I" m" B9 f! h& [
* \7 {( v3 s& O* z" O/ b7 _" m
9 [$ [( b, e: f
4.2菊花链模式
& R z ]% F0 c, I1 S
2 @% N- m, \) l% _$ x/ K
* x9 K5 |2 J# Q菊花链模式避免了过多的CS引脚开支,将上一个设备的输出引脚(如SDO)与下一设备的输入引脚(如SDI)串联起来,数据在SCLK的控制下可以实现从上一个设备到下一个设备的流动循环传输。
, Q6 U: m. r- v7 ~0 X7 u, {谢谢关注,全文完。
g6 H" m7 i U% _+ h |
|