简介
spi协议是由Motorola公司开发的一种通用数据总线。由四根通信线组成,分别是SCK(Serial Clock)、MISO(Master Input Slave Output)、MOSI(Master Output Slave Input)、SS(Slave Select)。具有同步、全双工、多设备的数据传输特点,可以实现同时收发数据。通信速度快,最大传输速度取决于芯片的设计。
连接方式
- 主机和从机的SCK、MOSI、MISO分别接在一起。
- 主机需要多条SS控制线,分别接到从机的SS。
- 主机的输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入。
SCK: 主机输出,从机输入
MOSI:主机输出,从机输入
MISO:主机输入从机输出,当从机SS为高电平是,从机的MISO必须为高阻态。
SS:主机的SS线都是输出,从机的SS线都是输入,低电平有效。主机想指定谁就把对应的SS输出线置低电平就行了
工作原理
左边是SPI主机,右边是从机,里面都有一个8位的寄存器。有一个时钟输入端,因为是高位先行的,所以每来一个时钟会向左移动一位。移位寄存器的时钟源由主机提供,叫波特率发生器,产生的时钟驱动移位寄存器进行移位,同时通过SCK引脚进行输出到从机的移位寄存器。
主机移位寄存器左边移出去的数据通过MOSI脚输入到从机移位寄存器的右边,从机移位寄存器左边移出去的数据通过MISO引脚输入到主机移位寄存器的右边。
工作方式:波特率发生器时钟的上升沿,所有移位寄存器向左移动一位,移出去的位放到引脚上。波特率发生器时钟的下降沿,引脚上的位采样输入到移位寄存器的最低位。接下来假设主机有个数据10101010要发送到从机,同时从机有个数据01010101要发送到主机。那就可以驱动时钟先产生一个上升沿,这时所有的位向左移动一位,移出去的位会放到数据线上,实际是放到输出寄存器里。时钟继续执行,在下降沿时主机和从机内都会进行数据采样输入。8个时钟后主机中的10101010到了从机中,从机里的01010101到了主机中。这样通过数据交换实现数据传输。
时序
起始条件:SS从高电平切换到低电平
终止条件:SS从低电平切换到高电平
spi的时序有4种模式
模式一
空闲状态时,SCK为低电平
SCK第一个边沿移入数据,第二个边沿移出数据
模式二
空闲状态时,SCK为低电平
SCK第一个边沿移出数据,第二个边沿移入数据
模式三
空闲状态时,SCK为高电平
SCK第一个边沿移入数据,第二个边沿移出数据
模式四
空闲状态时,SCK为高电平
SCK第一个边沿移出数据,第二个边沿移入数据