1. SPI串行总线
serial peripheral interface,串行外设接口,由Motorala公司提出的,处理器与外设之间的简单串行通信接口。SPI串行总线的特点主要有:
- 全双工,一主多从式通信。有一个主设备控制通信,数据在主从之间可以同时双向传播,这也意味着至少需要两条通信线路。
- 两条数据线用于收发数据,时钟线用于同步。
- 通信速度可达数十MB。
SPI的应用主要有,连接嵌入式处理器与Flash、SD卡、LCD、ADC、传感器、WiFi、蓝色模块等I/O设备。
通过端口中的四个引脚实现数据传送。
- 串行时钟SPSCK/PD3;
- 主接收从发送MISO/PD1,若为主就是输入,从则为输出,Master Input Slave Output;
- 主发送从接收MOSI/PD0;
- 不用SPI时,这些引脚都被设置成通用IO;
主设备通过寄存器移位(首尾互连的主从寄存器)来实现数据传输,主设备通过片选引脚选定和哪个从设备交互(一主多从),一主一从时,从设备片选端接地。SPI无寻址能力,通过片选选中从设备,几个从设备就几个片选。
SPI接口操作:基本规范定义了映射到存储模块的一组8位寄存器。
- SPI控制寄存器SPICR1和SPICR2;
- 可读写的波特率寄存器SPIBR,控制速度;
- 只读的SPI状态寄存器SPISR;
- 可读写的数据寄存器SPIDR;
SPI是近距离连接嵌入式处理器与外设的主从式、全双工、同步串行总线。
2. IIC总线
Inter-Integrated Circuit Bus,集成电路总线,Philips公司研制。是一种主从式、可寻址、2线制(SDA SCL)、近距离串行通信总线,连接微控制器和外围器件的主从式串行通信总线。
两条双向线:
- serial data line,SDA,双向数据线,只有一条数据线,在同一时刻只有一个方向可以发送数据,即半双工。
- serial clock line,SCL,时钟线,上升沿和下降沿传输数据,即边沿触发。
两条线均是OD门,开漏要么输出为0,要么输出浮动。
通信速度:
- 100kbps普通模式;
- 400kbps快速模式;
- 1kbps增强快速模式;
- 3.4kbps高速模式;
- 5Mbps单工传输超高速模式UFM;
总体速度低于SPI,一般情况下,通信距离为几米到几十米,低传输速率时,通信距离为数十米到数百米。
IIC总线是多主的主从式通信总线,2线制,所有的外围器件都具有一个7位或10位的”从器件专用地址码“,主控制器通过地址码来建立多机通信的机制,无需片选线,基于总线仲裁机制,同一时刻只能有一个主端。
基本通信过程如下:
- 主机发出开始信号;
- 主机接着送出1字节的从机地址信息,其中最低位为读写控制码,1为读0为写,高7位为从机器件地址代码;
- 从机发出应答信号;
- 主机开始发送数据,每发完1字节后,从机发应答信号给主机;
- 主机发出停止信号,通信结束;
多个设备都是主设备,如果同时发送数据,总线上就会产生冲突,这时就需要仲裁,谁先不一致,谁就退出竞争。完成读写操作或总线收发异常时,主设备发送重启信号,重新设定从设备地址和读写信号,继续如上所述的应答式数据通信过程。当SCL被某些未知因素或事件限定在低电平后,需要触发硬件复位信号,如果IIC设备没有硬件复位输入,那么就需要关闭总线电源进行上电复位。
SPI与IIC不是同一种总线,不能直接互连,需要桥接设备连接。
总结,IIC是一种近距离、可寻址、主从式、半双工、同步串行总线。
3. UART总线和USART接口
UART通用异步收发器
UART通用异步通信收发器,SCI串行通讯接口。用于异步通信,可实现全双工收发,通信双方同时收发。两个器件无需共享同一个时钟信号就能进行通信,即异步,数据收发单位用帧来表示,工作模式有中断方式和DMA工作方式。
UART双方要设定相同的数据格式,收数据的格式和发数据的格式要完全一样。
1个起始位 数据位 1个校验位 1~2个停止位
UART双方要设定相同的数据速率,因为异步通信要求接收方与发送方的波特率必须一致来匹配输出速度。
UART规范主要定义了TTL电平的可配置通信数据格式以及通信速率、异步采样机制。
差分传输
EIA/TIA-422使用差分传输,实现了距离远速度快的特点。差分传输是一种信号传输的技术,在两根线上都传输同一信号,这两个信号的振幅相同、相位相反,也叫做平衡传输方式,在这两根线上的传输的信号就是差分信号。在信号接收端比较这两个电压的差值来判断发送端发送的是逻辑0还是逻辑1,设计电路时,差分走线必须是等长等宽,紧密靠近且在同一层面的两根线。
USART通用同步/异步收发器
在UART基础上增加了同步机制的,一种可被设置为同步、异步模式的全双工串行通信接口。同步模式下,发送器时钟引脚SCLK输出与SPI主模式相似的数据传输时钟,相位和极性可通过寄存器来设置。
UART和USART区别
- 位流同步机制不同,同步与异步的区别;
- 可支持的协议数量不同,USART更为复杂,不但兼容UART,还可以传输多种不同协议的数据,比如IrDA、LIN总线、智能卡、Modbus等;
- 支持的外设能力不同,USART常用于系统正常运行高功耗时的串行数据通信,当系统进入休眠等低功耗模式时则采用基于UART的低速通信接口;
4. GPIO与GPIB
GPIO,general purpose input output,通用IO。SPI、IIC、UART都是通用IO。
嵌入式处理器除采集、传输、处理数据外,还需要进行大量开关型外部组件的控制,比如LED、继电器开关,专用IO可以满足要求,但限制了处理器的功能和使用范围,灵活性差且接口多时芯片引脚增加。应该尽量增强IO接口的通用性,GPIO区别于其它专用IO,可适用于多种输入输出要求的IO接口,可配置为不同类型的接口或者设置为不同的电气特性。允许用户根据不同的功能需求,通过寄存器组,进行IO功能和特性的动态配置和管理。
就输入输出特性而言,GPIO的引脚可以有浮空、上拉输入、下拉输入、模拟输入、以及开漏输出,可配置的上拉下拉、推挽输出等模式可供选择。
接口至少会提供GPIO控制器和GPIO数据寄存器,控制寄存器用以控制数据寄存器中各位为输入还是输出或者其它功能状态。功能强大的嵌入式处理器一般还会提供置位和复位寄存器,上拉下拉电阻配置寄存器、以及锁存寄存器等,使电路设计更灵活(外部的灵活性一定来源于内部设计的复杂性)。
如果处理器提供的GPIO不够,可以采用它的IIC接口等器件进行扩展,不同处理器或同一处理器不同组的GPIO可能实现的特性存在差异,不能一概而论。
GPIB,general purpose interface bus,通用接口总线。GPIO是接口,GPIB是总线。