|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
串行外围设备接口(Serial Peripheral InteRFace,SPI)是由 Motorola 公司开发的,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口(SPI 有时候也被称为4线接口)。这种接口可以用来连接存储器、AD/DA转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至其他处理器。目前支持 SPI 的元件很多,并且还在不断增加。
m1 d9 a2 N7 n* L# G 4 S1 o3 Z4 f6 P* y7 C+ W# W) Y
这里需要提一下,由于专利在电子行业是很关键的,因此部分厂商可能会将 SPI 通讯协议更名以规避高昂的专利费,但其硬件处理方式是一样的,只是换了一个名称而已(或者在协议上做了一些修改),例如 TI 的 SSI(Synchronous Serial Interface)通讯协议。$ H/ `5 y8 j* ^, l# v% {
! J5 |# H# e* C4 Y" z( p' V6 E
与标准的串行端口不同,SPI 是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机(处理器)产生。接收数据的设备(从设备)使用时钟对串行比特流的接收进行同步化。可能会有许多芯片连到主机的同一个 SPI 接口上,这是主机通过触发从设备的芯片的片选输入引脚来选择接收数据的从设备,没有被选中的外设将不会参与 SPI 传输。
7 Y$ A9 t& q* j: X9 }/ o
& I' Y( g8 C: L+ I# u. Y" r! V, ^ SPI 主要使用4个信号:主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行时钟(SCLK 或 SCK)和外设片选(nCS)。有些处理器有 SPI 接口专用的片选,称为从机选择(nSS)。( @, i* G' C# i
4 b' l8 S' \, a/ C% {) Y( b$ y% f
MOSI 信号由主机产生,从机接收。在有些芯片上,MOSI 只被简单地标为串行输入(SI),或者串行数据输入(SDI)。MISO 信号由从机产生,不过还是在主机的控制下产生的。在一些芯片上,MISO 有时被称为串行输出(SO),或者串行数据输出(SDO)。外设片选信号通常只是由主机的备用 I/O 引脚产生。
7 H: l: ^6 j% S$ C) q9 D% Z; x* c
% l" b8 y+ W7 j" H, \ SPI 接口在内部硬件实际上是两个简单的移位寄存器,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比 I2C 总线要快,速度可达到 Mbps 级别。
( U9 N) l7 u. D/ g9 f! m/ H) K; N% k1 e# c& x9 T: n, F
根据时钟极性和时钟相位的不同,SPI 有四个工作模式。4 j5 j, ^4 w. C0 M! y& D
p9 ^/ z( N7 G; w9 o( l' i
时钟极性有高、低两极:3 ?. v7 r" g( P8 c
1、时钟低电平时,空闲时时钟(SCK)处于低电平,传输时跳转到高电平;
( R5 e& |. w! b$ e" U0 z+ K0 F* m 2、时钟极性为高电平时,空闲时时钟处于高电平,传输时跳转到低电平。
8 z2 g5 c1 m8 t2 h9 s m! |3 V3 U8 u9 C4 d( Q' p2 f
时钟相位有两个:相位0 和 相位1。对于时钟相位0,如果时钟极性是低电平,MOSI 和 MISO 输出在时钟(SCK)的上升沿有效(如图1所示)。
" C5 z; g/ ^& D0 }$ m这里写图片描述
" C; T& Y6 L' d- Q2 [3 D
$ g U6 D9 C1 P8 u2 y3 y, R
图1. 时钟极性为低电平且时钟相位0时的SPI时序图
& t7 c1 `5 W7 F [3 n9 Z$ V% E6 }
1 z8 |" X4 `4 Y: Y" X# k: N9 i 如果时钟极性为高电平,对于时钟相位0,这些输出在 SCK 的下降沿有效(如图2所示)。
+ t& z. J7 [9 Y# L这里写图片描述8 X: t. b, L( [" A3 P" ]) m9 A9 B6 j% @
: Y; y. r4 m2 g0 D图2. 时钟极性为高电平且时钟相位0时的SPI时序图% o2 z" K! @3 b! T" h; r, q+ M
; |4 M3 r* a5 u, E
对于时钟相位1,情况则相反。此时如果时钟极性是低电平,MOSI 和 MISO 输出在时钟(SCK)的下降沿有效(如图3所示)。: K) h$ H9 d: r& M( H
这里写图片描述
# c" c! z% O# X, \6 j* k
) w: e/ ]5 M* w% `' o图3. 时钟极性为低电平且时钟相位1时的SPI时序图' h. W6 I4 N: O$ {2 P
' G. V4 k! i+ h1 Z* w/ l
如果时钟极性是高电平,这些输出在 SCK 的上升沿有效(如图4所示)。: p% y! u$ s: A4 p
这里写图片描述
+ p" l( C! J+ U7 h& ?
1 |) g; r! U9 E3 R
图4. 时钟极性为高电平且时钟相位1时的SPI时序图
`* o3 \/ m8 @! z% ~+ l& T! }% O4 t% D h: X; k! ?
工程中一般会用 CPOL 代表时钟极性,用 CPHA 代表时钟相位,在 S5PV210 的 datasheet 中,我们可以看到相应的 SPI 接口配置寄存器(如图5所示)。: G+ p+ c/ o5 ~: e$ m. i' s
这里写图片描述2 T Q" v& `( f$ z. ]
4 R, _; X) @8 {# d9 y
图5. S5PV210的SPI配置寄存器CH_CFGn
3 P; V5 M; B: e
9 f% j" U. X( O9 h7 R 也就是由两个位(CPOL 和 CPHA)共同决定 SPI 的工作模式,所以有 2 * 2 = 4 种工作模式。其中,时钟极性(CPOL)决定的是时钟空闲时电平的高低状态(0:空闲时低电平,1:空闲时高电平);时钟相位(CPHA)决定的是数据在时钟的上升沿或下降沿锁存/采样(0:第一个边沿开始,1:第二个边沿开始)。
7 i/ ~. f2 s4 c0 U 最后,SPI 接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。) y& w! `# p. s3 A% q. M
' e: H2 S* {" H% W |+ [* d! e
/ Q- A: S# l# c# W |
|