·SPI,(serial peripheral interface),字面翻译是串行外设接口,是一种通用的数据总线,适用于主控和外挂芯片之间的通信,与IIC应用领域非常相似。
·IIC无论是在硬件电路还是在软件时序设计的都是较为复杂的,硬件上需要配置成开漏外加上拉的模式,软件上需要一根数据线兼顾数据收发、应答位收发、寻址机制的设计等等,使得IIC的性价比极高,可以在消耗最低硬件资源的情况下实现最多的功能。在硬件上无论挂载多少个设备(128最多)都只需要两根通讯线,在软件上数据双向通信、应答位都可以实现。IIC既实现硬件上最少的通信线,又实现软件上最多的功能。
但是IIC的缺点在于:IIC开漏外加上拉电阻的电路结构,使得通讯线高电平的驱动能力较弱,会导致通信线由低电平到高电平的时候上升沿会比较长,会最大限制IIC的通信速度,所以IIC的标准模式只有100KHz的时钟频率,快速模式也只有400KHz,虽然后边改进电路设计出了高速模式可达3.4MHz,但是普及程度不高,一般情况下认为IIC时钟速度最高400KHz,相比SPI慢很多。
·SPI传输比IIC更快,SPI协议没有严格规定最大传输速度,最大传输速度取决于芯片厂商的设计需求,比如 W25Q64 存储器芯片,手册中写最大时钟频率可达80MHz,比stm32f1的主频还高。SPI硬件通信线比较多,通信过程中常有资源浪费的现象。
·SPI有四根通信线,分别是SCK(serial CLOCK串行时钟线)、MOSI(master output slave input主机输出从机输入)、MISO(master input slave output主机输入从机输出)、SS(slave select从机选择)
·通信线名字的额外表述方式:
SCK:SCLK、CLK、CK
MOSI:DO( DATA OUTPUT )
MISO:DI( DATA INPUT )
SS:NSS( NOT SLAVE SELET )、CS( CHIP SELECT )
·同步:SCK引脚用于提供时钟信号,数据位的输出和输入都是在SCK的上升沿或下降沿进行,数据位的收发时刻因此得以确定。同步时序下时钟快慢或中途暂停都没问题。SCK相当于IIC通信下的SCL,作用相同。
·全双工:数据发送和数据接收单独各占一条线,发送用发送的线路,接收用接收的线路,互不影响。MOSI如果是主机接在上面,那就是MO主机输出,如果是从机接在这条线上就是MI从机输入。一条通信线如果主机接在上面配置为输出,从机必须配置为输入才能接收数据,主机和从机不能同时配置为输出和输入,会造成无法通信。同理MISO是主机从从机接收数据的线路。这两根通信线加在一起相当于IIC通信的SDA,不过IIC是半双工。全双工的好处是简单高效,数据流方向不会改变,无需担心发送和接收没协调好冲突,但是多了一根线造成了资源的浪费。
·一主多从:SPI仅支持一主多从,IIC实现一主多从的方式是在起始条件之后主机必须先发送一个字节进行寻址,用于规定要和哪个从机进行通信,要设计分配地址和寻址的问题。SPI实现一主多从的方式通过开辟多条通信线用于和从机通信,有几个从机就对应有几条SS,需要找哪个从机的时候就控制信号线为低电平,不需要时信号线为高电平。SPI没有应答机制,是否具有接收方无法得知。