简介
SPI(Serial Peripheral Interface)是串行外设接口的缩写,SPI是一种高速、全双工、同步的串行通信总线;SPI采用主从方式工作,一般有一个主设备和一或多个从设备;SPI需要至少4根线,分别是MISO(Master Input Slave Output,主设备输入从设备输出)、MOSI(Master Output Slave Input,主设备输出从设备输入)、SCLK(时钟)、CS(片选)、SPI使用引脚较少且布线方便,所以越来越多的芯片集成了SPI协议。
CS(Chip Select)片选用于寻址,这就需要介绍多从机的通信情况。
当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机来定)表示选中该设备。CS一般表示高电平为使能信号,表示低电平为使能信号。
通信过程
SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑“1”,数据线为低电平表示逻辑“0”;一个字节传送完成后无需应答即可开始下一个字节的传送;SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。
无需应答可能导致从机并没有收到数据,但主机显示发送完成。
MSB即最高位,LSB为最低位。
极性和相位
SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)这两个因素,CPOL表示SCLK空闲时的状态:CPOL=0,空闲时SCLK为低电平,CPOL=1,空闲时SCLK为高电平。
CPHA表示采样时刻,CPHA=0,每个周期的第一个时钟沿采样;CPHA=1,每个周期的第二个时钟沿采样。
对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式;我们在使用设备时就必须保证主设备的工作模式和该从设备保持一致,否则无法进行通信;所以一般我们需要对主设备的CPOL和CPHA进行配置。
IIC的时序
这里引用一下IIC典型时序
主机向从机发送数据:主机发送开始信号,从机地址+0,从机应答,主机发送数据,从机应答,直至主机发送完毕或从机不应答,主机发送结束信号退出总线;
从机向主机发送数据:主机发送开始信号,从机地址+1,从机应答,从机发送数据,主机应答,直至主机不再应答,主机发送结束信号退出总线占用。
主机先向从机发送数据,然后从机再向主机发送数据:主机发送开始信号,主机发送从机地址+0,从机应答,主机发数据,从机应答,直至主机发完或从机不应答,主机再次发送开始信号,发送从机地址+1,从机应答,后面参照从机发送数据的情况即可。
IIC与SPI的异同
相同点
均采用串行、同步的方式;均采用TTL电平,传输距离和应用场景类似(芯片间);均采用主从方式工作。
不同点:
IIC为半双工,SPI为全双工;IIC有应答机制,SPI无应答机制;IIC通过总线广播从机地址来寻址,SPI通过向需要通信的从机发送使能信号使其开始通信;IIC的时钟极性和时钟位固定,SPI的时钟极性和时钟相位是可调的。
总结:SPI因为无需像IIC应答每一个字节,故节省了时间,每套从设备都有单独的两根信号线与主机通信使其能够实现全双工。但它的布线上比IIC更多更杂,对于主机而言,每多一个从设备就需要额外增加两根线,花费了更多硬件上的资源,极性和时钟位的可调节使SPI相对IIC可适应更多类型的芯片,但操作上也更复杂一点,需要配置极性(CPOL)和相位(CPHL)与从设备一致才能使用。
SPI通信就先简单介绍到这,后续可能会再更新,但可能性不大,关于其他几种通信协议在前一篇文章里,包括UART、RS232/RS485、IIC,通信协议的笔记基本上到这结束了,后续更新应该是实际项目里的一些相关知识点和问题的笔记。
再会。