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位时钟周期才把数据读回来!! 看大家明白没有!!!!!
|