简介
SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主
模块选择一个从模块进行同步通信,从而完成数据的交换。提供时钟的为主设备(Master),接
收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备
时,通过各自的片选信号进行管理。
SPI通信原理很简单,需要至少4根线,单向传输时3根线,它们是MISO(主设备数据输入)、
MOSI(主设备数据输出)、SCLK(时钟)和CS/SS(片选):
MISO( Master Input Slave Output):主设备数据输入,从设备数据输出;
MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入;
SCLK(Serial Clock):时钟信号,由主设备产生;
CS/SS(Chip Select/Slave Select):从设备使能信号,由主设备控制,
一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,
只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。
一主一从
一主多从
通信原理
SPI主设备和从设备都有一个串行移位寄存器,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输。
SPI数据通信的流程可以分为以下几步:
1、主设备发起信号,将CS/SS拉低,启动通信。
2、主设备通过发送时钟信号,来告诉从设备进行写数据或者读数据操作(采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低),因为SPI有四种模式),它将立即读取数据线上的信号,这样就得到了一位数据(1bit)。
3、主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(缓存长度不一定,看单片机配置),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
4、从机(Slave)也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
这里有一点需要着重说明一下:SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作
是同步完成的。若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一
个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一
个数据必须也要先发一个数据。
通信特性
1.SPI时钟特点主要包括:时钟速率、时钟极性和时钟相位三方面。
2.SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。
从理论上讲,只要实际可行,时钟速率就可以是你想要的任何速率,
当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。
3.根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。时钟极性和相位共同
决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。
4.根据硬件制造商的不同,时钟相位通常写为CKE或CPHA。顾名思义,时钟相位/边沿,
也就是采集数据时是在时钟信号的具体相位或者边沿;