SPI学习笔记(1)

来源:互联网 发布:c语言 大括号 是什么 编辑:程序博客网 时间:2024/05/22 07:48

最近在进行SPI学习,再次记录学习笔记。

四根信号线:

MOSI  master output,slave input
MISO  master input,slave output
SCLK clock from master
CS chip select

这种命名比那些SDI、SDO好理解多了。

1、上升沿发送,下降沿接收,高位先发送;
2、上升沿到来的时候,MOSI上的电平将被发送到从设备的寄存器中;
3、下降沿到来的时候,MISO上的电平将被接收到主设备的寄存器中;
4、SPI为全双工,主机和从机同时发送、同时接收;

5、假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。 
6、那么第一个上升沿来的时候数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。       
7、例子: 
      假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据

如下表所示,x代表SBUFF寄存器中的空位,即:高位数据发送出去后,后面的位前移后空出的低位。
上升沿到来时,主机和从机SBUFF寄存器中的高位分别发送到MOSI和MISO上,在下降沿到来时,分别进入从机和主机SBUFF的低位。
网上的这个表格在后两列MISO和MOSI的上升沿和下降沿使用了两行,我认为不便于理解,我把表格合并为一行,即每到上升沿发送一次数据。

脉冲
主机SBUFF
从机SBUFF
MISO
MOSI
0
10101010
01010101
0
0
1↑
0101010x
1010101x
0
1
1↓
01010100
10101011
2↑
1010100x
0101011x
1
0
2↓
10101001
01010110
3↑
0101001x
1010110x
0
1
3↓
01010010
10101101
4↑
1010010x
0101101x
1
0
4↓
10100101
01011010
5↑
0100101x
1011010x
0
1
5↓
01001010
10110101
6↑
1001010x
0110101x
1
0
6↓
10010101
01101010
7↑
0010101x
1101010x
0
1
7↓
00101010
11010101
8↑
0101010x
1010101x
1
0
8↓
01010101
10101010