本文主要是介绍常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
3、SPI
(1)基本概念
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线。它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。
SPI是一个环形总线结构,由MOSI、MISO、SCLK、CS构成,其时序其实很简单,主要是在SCLK的控制下,两个双向移位寄存器进行数据交换。
- MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;
- MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入;
- SCLK – Serial Clock,时钟信号,由主设备产生;
- CS – Chip Select,从设备使能信号,由主设备控制。
电路设计中,只需要把Master设备的SCKL,MOSI,MISO,CS四根引脚分别与Slave设备的对应引脚相连即可。
需要注意以下几点:
- 4根信号线可串联10~50欧姆的小电阻,可以适当增加信号线阻抗,满足终端阻抗匹配,以抑制信号终端反射。
- 当只有一个slave设备,且IO口资源紧张的条件下,可直接将CS引脚拉低,这样可以节省出一个IO口,下拉电阻阻值可选择10K左右。
- 在SPI操作中,有两项比较重要的设置,就是时钟极性(CPOL或UCCKPL)和时钟相位(CPHA或UCCKPH)。时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。
SPI 模式 | CPOL | CPHA | 空闲状态下的时钟极性 | 用于采样和移位数据的时钟相位 |
---|---|---|---|---|
0 | 0 | 0 | 逻辑低电平 | 数据在上升沿采样,在下降沿发送 |
1 | 0 | 1 | 逻辑低电平 | 数据在下降沿采样,在上升沿发送 |
2 | 1 | 1 | 逻辑高电平 | 数据在下降沿采样,在上升沿发送 |
3 | 1 | 0 | 逻辑高电平 | 数据在上升沿采样,在下降沿发送 |
注意:Master设备和与Slave设备通信时,两者的时钟相位和极性应该保持一致。
- 若Master设备和Slave设备电平存在差异,比如Master设备1.8V,Slave设备3.3V,则需要在Master设备和Slave设备之间增加一个支持SPI通信速率的电平转换器
多从机电路设计
常规SPI模式
在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI/MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。
随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。可以使用其他技术来增加常规模式下的从机数量,例如使用多路复用器产生片选信号。
菊花链模式
在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。
使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例。例如为使第3个从机能够获得数据,需要24个时钟脉冲,而常规SPI模式下只需8个时钟脉冲。另外并非所有SPI器件都支持菊花链模式,请参阅产品数据手册以确认菊花链是否可用。
(2)通信过程
SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平时表示逻辑“1”,低电平时表示逻辑“0”;一个字节传送完成之后无需应答即可开始下一个字节的传送;SPI总线采用同步方式工作,时钟线在上升沿或者下降沿时发送器向数据线上发送数据,在紧接着的下降沿或者上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的发送。
(3)优缺点
优点:
- 支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;
- 支持高速(100MHz以上);
- 协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;
- 在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。
- 硬件连接简单;
缺点:
-
相比IIC多两根线,没有寻址机制,只能靠片选选择不同设备;
-
没有指定的流控制,没有应答机制(ACK)确认是否接收到数据,主设备对于发送成功与否不得而知;
-
典型应用只支持单主控;
-
在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
温馨提示: 下一章节将讲述RS-232通信。
这篇关于常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!