SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。 ( B; B3 ~/ G c2 Y J 假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。6 x* B3 f0 ]1 f
那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。 / `! l+ i. o# U, ], U 例子:* H$ z& O8 d8 Z8 c& T2 v
假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据 # s. a8 r% x: p2 s5 T( B
脉冲
主机sbuff
从机sbuff
sdi
sdo
0
10101010
01010101
0
0
1上
0101010x
1010101x
0
1
1下
01010100
10101011
0
1
2上
1010100x
0101011x
1
0
2下
10101001
01010110
1
0
3上
0101001x
1010110x
0
1
3下
01010010
10101101
0
1
4上
1010010x
0101101x
1
0
4下
10100101
01011010
1
0
5上
0100101x
1011010x
0
1
5下
01001010
10110101
0
1
6上
1001010x
0110101x
1
0
6下
10010101
01101010
1
0
7上
0010101x
1101010x
0
1
7下
00101010
11010101
0
1
8上
0101010x
1010101x
1
0
8下
01010101
10101010
1
0
4 p4 ~) v L' q
" S4 L! N# ~/ t1 ~0 O
$ T* N9 R0 M) b* {) m7 g这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来 9 D, ~7 W1 z( t6 n6 K4 G4 A- Z" LSPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。图3示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):* G5 m) U# K4 Y* Z