一、概述
①SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
②四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)
③同步时序,全双工
④支持总线挂载多设备(一主多从)
二、硬件电路
①所有SPI设备的SCK、MOSI、MISO分别连在一起
②主机另外引出多条SS控制线,分别接到各从机的SS引脚,主机要和谁通信就将与该从机 连接的SS线拉低,同一时间只能拉低一个从机
③输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
④从机MISO引脚引脚为推挽输出时,为防止输出数据冲突,未被选中的从机的MISO为高阻 态断开与主机连接
⑤主机和从机都要接GND和VCC
三、SPI数据移位
①波特率发生器每来一个时钟,移位寄存器向左移动一位,高位先行
②规定在上升沿主机和从机从移位寄存器移出一位到通信线上,在下降沿主机和从机会采样输入到各自移位寄存器的末尾,8个时钟后主机和从机完成了一个字节的数据交换
③主机只发不收:自动忽略从机发送过来的数据。主机只接不发:发送一个垃圾数据(如:0xff)进行数据交换
四、SPI时序基本单元
①起始条件:SS从高电平切换到低电平
②终止条件:SS从低电平切换到高电平
1.交换一个字节: 模式0
注:CPOL:改变时钟极性 CPHA:改变时钟相位
①CPOL=0:空闲状态时,SCK为低电平
②CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据(即在SS下降沿时提前半个相位移出数据)
2.交换一个字节:模式1
①CPOL=0:空闲状态时,SCK为低电平
②CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
3.交换一个字节:模式2
①CPOL=1:空闲状态时,SCK为高电平
②CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据
4.交换一个字节:模式3
①CPOL=1:空闲状态时,SCK为高电平
②CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
五、SPI时序:在SPI中采用的是指令码加读写数据的模型(指令码由不同的芯片厂商规定
1.发送指令:向SS指定的设备,发送指令(0x06)
2.指定地址写:向SS指定的设备,发送写指令(0x02),随后在指定地址(Address[23:0])下,写入指定数据(Data)
3.指定地址读:向SS指定的设备,发送读指令(0x03),随后在指定地址(Address[23:0])下,读取从机数据(Data)