总线介绍
SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外设接口。SPI协议主要作为主控芯片去配置外围芯片的接口协议
。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步,串行,主从结构通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
SPI仅定义了传输的信息,并未对传输的数据内容含义进行定义,用户需查阅相关产品的datasheet查看;
SPI知识点说明
总线说明
SPI存在四个接口;
- SCK:时钟信号,同步传输,用以指示接收端接收数据;
- SS_n:片选信号,在一主多从情况下,指示主机访问的是哪一个slave。一般为低有效数据;
- MOSI:master output slave input。主机对外输出数据的端口,slave接收数据端口;
- MISO:master input slave output.主机接收从机返回数据,从机输出数据;
时钟极性、采样设定
可通过设计完成在数据发送、接收与时钟沿的关系;
- CPOL:表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1;
- CPHA:表示对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿;
存在以下情况:
- CPOL,CPHA == (0,0):即SCLK默认条件下为0,数据采样发送在第一个沿,也就是上升沿;对应的数据发送即为时钟下降沿。
- CPOL,CPHA == (0,1):即SCLK默认条件下为0,数据采样发送在第二个沿,也就是下降沿;对应的数据发送即为时钟上升沿。
- CPOL,CPHA == (1,0):即SCLK默认条件下为1,数据采样发送在第一个沿,也就是下降沿;对应的数据发送即为时钟上升沿。
- CPOL,CPHA == (1,1):即SCLK默认条件下为1,数据采样发送在第二个沿,也就是上升沿;对应的数据发送即为时钟下降沿。
SPI数据含义
- spi协议仅定义了数据传输的途径,对该路径中传输的数据具体是什么含义没有做定义。如参考文档中spi中就存在起始位、数据位、操作位、地址等;但本身SPI并没有这些规定;
- SPI可以理解成信使仅负责将发送端期望发送的数据顺利的送到目的端,对应信件中的内容还是由发端、接收端的规则制定;
SPI和IIC的对比
- SPI是全双工,而IIC是半双工。
- IIC支持多主机多从机模式,而SPI只能有一个主机。
- 从GPIO占用上来看,IIC占用更少的GPIO,更节省资源。
- SPI的数据位宽更灵活,可以根据需要选择多位数据宽度。
- SPI协议没有响应机制,主机无法得知从机是否接收到所发的数据,如果不采取一些方法的话可能会导致数据丢帧。
- 正是因为没有复杂的响应机制,SPI协议可以做到非常高的速率(上百兆),每一个SCK都可以进行数据的传输,通过引入CRC校验等校验方法,可以即高速传输数据,又能保持数据的准确度。
- IIC通过器件地址来选择从机,从机数量的增加不会导致GPIO的增加,而SPI通过CS选择从机,每增加一个从机就要多占用一个GPIO,当然也可以通过加入译码器来实现多从机控制。
- 两者大多都应用于板内器件短距离通讯。