SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那 么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。
例子:
假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据
脉冲
|
主机sbuff
|
从机sbuff
|
sdi
|
sdo
|
0
|
10101010
|
01010101
|
0
|
0
|
1上
|
0101010x
|
1010101x
|
0
|
1
|
1下
|
0101010
0
|
1010101
1
|
0
|
1
|
2上
|
101010
0x
|
010101
1x
|
1
|
0
|
2下
|
101010
01
|
010101
10
|
1
|
0
|
3上
|
01010
01x
|
10101
10x
|
0
|
1
|
3下
|
01010
010
|
10101
101
|
0
|
1
|
4上
|
1010
010x
|
0101
101x
|
1
|
0
|
4下
|
1010
0101
|
0101
1010
|
1
|
0
|
5上
|
010
0101x
|
101
1010x
|
0
|
1
|
5下
|
010
01010
|
101
10101
|
0
|
1
|
6上
|
10
01010x
|
01
10101x
|
1
|
0
|
6下
|
10
010101
|
01
101010
|
1
|
0
|
7上
|
0
010101x
|
1
101010x
|
0
|
1
|
7下
|
0
0101010
|
1
1010101
|
0
|
1
|
8上
|
0101010
x
|
1010101
x
|
1
|
0
|
8下
|
01010101
|
10101010
|
1
|
0
|
这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底 被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根 据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来!!