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下 |
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 |
这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来!!
看大家明白没有!!!!!