|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
SPI是串行外设接口(Serial Peripheral InteRFace)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。 B% K9 q3 }" v) h9 l1 ]
, @% P5 J! s# P6 @+ ^SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,中间靠三线或者四线连接(三线时为单向传输或者数据线双向传输)。所有基于SPI的设备共有的,它们是MISO、MOSI、SCLK、CS。
/ v' h) L, ^1 O2 a! @2 c/ y8 Y$ M, r, u0 c$ w) |
MISO– Master Input Slave Output,主设备数据输入,从设备数据输出。; L8 R1 M5 v5 M
4 f" @2 d9 s" I1 G0 L- a7 ]9 r, oMOSI– Master Output Slave Input,主设备数据输出,从设备数据输入。
$ S9 A7 [) X% r2 Q) c% x/ {+ D! H v$ t X1 U1 v) ^
SCLK – Serial Clock,时钟信号,由主设备产生。% Y p. R+ E. H5 i
% L1 x d: ]' v$ Q, l6 vCS – Chip Select,从设备使能信号,由主设备控制。
% U: N7 e5 S$ D2 j( y/ ^
) U% { z! ^( e8 {* t
I% ]7 T1 d; o) ?: H; q) K% S3 x0 ]
+ D# Z( l6 t" k
" c! l Q& p" k7 E1 m+ h+ c4 o1 T. w9 z/ N( s$ U4 T1 M' K: |; I( F* L9 }
cs是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个spi设备成为可能。6 |% K* N3 p |# J5 l
* ~6 V: \) r2 {3 p) e) }2 ~: z
) h; w- Y& L/ x5 o2 g6 L2 H5 b: R6 f! W4 j# L9 X
: u! A' J* ^) P5 _
* Y' E Y! l7 R( R' S( c通讯是通过数据交换完成的,由sclk提供时钟脉冲,mosi、miso则基于此脉冲完成数据传输。数据输出通过 mosi线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。因此,至少需要N次时钟信号的改变(上沿和下沿为一次),才能完成N位数据的传输。
# B8 U1 D4 T! {, L' q5 o3 Q* v! r2 m& I4 @4 s) }3 [( o
spi通信有四种不同的模式,不同的从设备可能在出厂时就已经配置为某种模式。通信的双方必须是工作在同一模式下,所以我们可以对主设备的spi模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式。
, |# |& ~ W% _- h
! B8 i+ n* L, Cmode0:CPOL=0,CPHA=0;
- e$ [/ J+ _4 A$ e
5 U7 F6 y( J. N2 u. ymode1:CPOL=0,CPHA=1;- ~* h) j h& f! z
* x4 {8 @$ ^1 s8 \4 D
mode2:CPOL=1,CPHA=0;$ p5 l# M! p* q% ?
2 C: |" r+ y: {: G. a/ X- omode3:CPOL=1,CPHA=1;
0 z: h; r; ?% n9 p- j" B1 M5 ]0 T( D! ^. Z' p6 \5 l
时钟极性CPOL是用来配置SCLK在空闲时,应该处于的状态;时钟相位CPHA用来配置在第几个边沿进行采样。1 s e0 q2 I6 r8 [0 @3 \
7 t% {6 T' h. ^4 }/ ?3 h7 M
CPOL=0,表示在空闲状态时,时钟SCLK为低电平。
5 Y2 v4 ?3 J+ v; e, I, y" M) b6 I
8 t5 U- m1 d3 h+ T9 v* k3 hCPOL=1,表示在空闲状态时,时钟SCLK为高电平。
1 p$ }/ a2 g7 Z& l" O
7 t% b+ F% V6 U V3 G# fCPHA=0,表示数据采样是在第1个边沿。
/ X: m" f2 u4 j. c
+ r! z' P( I8 c# y- iCPHA=1,表示数据采样是在第2个边沿。4 L7 X5 K8 v! S: a/ A5 \. E
- Z2 y* n9 C$ x8 b8 a
即:
+ D' ]! }" g2 i/ k5 e1 w* ^; K) l% [" C/ \6 m
CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。2 ]! F) n6 k- E* D% V
# s' p) d% C. ]CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
1 ?6 V" |% j6 z4 k3 q/ X0 g$ @: W
CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。6 C9 M6 Q4 W$ D2 C3 G s& D2 A
6 g7 N# L% Z$ {3 kCPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
. {6 M6 a& }8 g! S6 {7 I
. B( J; V: ^$ N+ q- R5 b
$ H: y( W0 k; j( G! ~+ X
! M; O2 z- ]% v9 y6 q
8 \9 Q4 E+ A O* S8 m; Z: D' O2 j
, l9 h0 J& \- D
+ z! c; N" m4 v5 q1 R( Q- Z A" e |
|