TA的每日心情 | 开心 2023-5-15 15:14 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
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 |
|