上一篇整理了常用通信接口一(RS232/RS485/USB/TYPE-C原理与区别),这篇我们接着整理CAN、I2C、SPI、UART、GPIO原理与区别;
1.CAN总线接口
1)定义
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是ISO国际标准化的串行通信协议,是国际上应用最广泛的现场总线之一。
CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之许多RS-485基于R线构建的分布式控制系统而言,基于CAN总线的分布式控制系统在以下方面具有明显的优越性:
A.网络各节点之间的数据通信实时性强
B.开发周期短
C.已形成国际标准的现场总线
D.最有前途的现场总线之一
与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。
2)运用
A.CAN总线是为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率最高可达1Mbps。
B.CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。使网络内的节点个数在理论上不受限制。
C.CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。CAN总线上任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现自由通信。
D.结构简单,只有2根线与外部相连,并且内部集成了错误探测和管理模块。
E.CAN总线特点:(1) 数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序,高优先级节点信息在134μs通信; (2) 多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞; (3) 通信距离最远可达10KM(速率低于5Kbps)速率可达到1Mbps(通信距离小于40M);(4) CAN总线传输介质可以是双绞线,同轴电缆。CAN总线适用于大数据量短距离通信或者长距离小数据量,实时性要求比较高,多主多从或者各个节点平等的现场中使用。
3)EMC标准设计电路
2.I2C通信
I2C(Inter-integrated Circuit)总线是由Philips公司开发的一种简单、双向二线制同步串行总线。
I2C总线支持设备之间的短距离通信,它只需要两根信号线来完成信息交换。
它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。用于处理器和一些外围设备之间的接口,常用于单片机系统里主要用来和24C02等小容易存储器连接。
1)工作原理
SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路.在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。数据传输和地址设定由软件设定,非常灵活。
2)I2C 主要特点
A.简单的双向两线总线(漏极开路模式):
B.串行数据(SDA)串行时钟(SCL)
C.带仲裁功能的多主机的总线
D.总线上的每个设备都具有不同的识别地址
E.每次数据传输都是由主机发起,且时钟总是由主机提供
3)主设备从从设备读数据,如下图
•主机对从机进行写操作(7位地址) | ||||||||||
S/Sr | 7bits Address |
1bit W(0) |
1bit ACK |
8bits Data | 1bit ACK |
-- | -- | 8bits Data | 1bit NACK |
Sr/P |
•主机对从机进行读操作(7位地址) | ||||||||||
S/Sr | 7bits Address |
1bit R(0) |
1bit ACK |
8bits Data | 1bit ACK |
-- | -- | 8bits Data | 1bit NACK |
Sr/P |
SCL是时钟,SDA承载的是数据。当SDA从1变动到0,而SCL还是1时,表示开始数据传输。接下来的7位,就是设备的地址。紧接着的是读写标志,其为1时是读取,为0则是写。如果I2C总线上存在着和请求的地址相对应的设备,则从设备会发送一个ACK信号通知主设备,可以发送数据了。接到ACK信号后,主设备则发送一个8位的数据。当传输完毕之后,SCL保持为1,SDA从0变换到1时,标明传输结束。
4)主从设备通信
master是指启动数据传输的设备并在总线上生成时钟信号以驱动该传输,而被寻址的设备都作为slaves。
和SPI不同的是,I2C可以支持mul-master系统,允许有多个master并且每个master都可以与所有的slaves通信(master之间不可通过I2C通信,并且每个master只能轮流使用I2C总线)。
I2C的数据传输速率位于串口和SPI之间,大部分I2C设备支持100KHz和400KHz模式。使用I2C传输数据会有一些额外消耗:每发送8bits数据,就需要额外1bit的元数据(ACK或NACK)。I2C支持双向数据交换,由于仅有一根数据线,故通信是半双工的。
3.SPI通信
1)定义:
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线,芯片的管脚上只占用四根线,节约了芯片的管脚。SPI接口一般用在产品内部元件之间的高速数据通信上面,常见的应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
2)优缺点
●优点:支持全双工通信,通信简单,数据传输速率块
●缺点:没有指定的流控制,没有应答机制确认是否接收到数据,所以跟I2C总线协议比较在数据可靠性上有一定的缺陷。
3)协议通信时序详解
A.SPI的通信方式
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
①SDO/MOSI – 主设备数据输出,从设备数据输入,对应MOSI master output slave input
②SDI/MISO – 主设备数据输入,从设备数据输出,对应MISO master input slave output
③SCLK – 时钟信号,由主设备产生;
④CS/SS – 从设备使能信号,由主设备控制。
当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。
CS: 其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。
SDI/SDO/SCLK: 通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
B.SPI通信说明
我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配
置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们
可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来
控制我们主设备的通信模式,具体如下:
Mode0:CPOL=0,CPHA=0
Mode1:CPOL=0,CPHA=1
Mode2:CPOL=1,CPHA=0
Mode3:CPOL=1,CPHA=1
注意:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信
那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的
SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是保持高电平要么是保持低电平。
4.UART模块
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART;
UART是一种通用串行数据总线,用于异步通信。是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
1)原理
UART是一个并行输入成为串行输出的芯片,通常集成在主板上,多数是16550AFN芯片。因为计算机内部采用并行数据数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。
2)UART通信
UART首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是7个或8个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。
在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。
由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。
3) UART与COM
嵌入式里面说的串口,一般是指UART口,实际上UART,COM指的物理接口形式(硬件), 而TTL、RS-232是指的电平标准(电信号).
UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V),高电平为1(3.3V或以上)。
COM口是我们台式机上面常用的口(下图),9个pin, 用的RS232电平, 它是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平
5. SPI、I2C、UART三种串行总线的区别于对比
1)概念定义
SPI(Serial Peripheral Interface:串行外设接口);
I2C(INTER IC BUS:意为IC之间总线)
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)
2)通信方式
SPI和UART可以实现全双工,但I2C不行;
3)其他差异
A.I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
B.I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。
6.GPIO接口
1)GPIO概念
GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,,功能类似8051的P0—P3,在嵌入式微处理器上通常提供了一种“通用可编程I/O端口”,也就是GPIO。通俗点就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚状态——是高电平还是低电平。
一个GPIO端口至少需要两个寄存器,一个做控制用的“通用IO端口控制寄存器”,还有一个是存放数据的“通用I/O端口数据寄存器”。数据寄存器的每一位是和GPIO的硬件引脚对应的,而数据的传递方向是通过控制寄存器设置的,通过控制寄存器可以设置每一位引脚的数据流向。
用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO口的使用非常广泛。
2)GPIO的优点(端口扩展器):
1、低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA)。
2、集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能全速工作。
3、小封装:GPIO器件提供最小的封装尺寸 ― 3mm x 3mm QFN!
4、低成本:您不用为没有使用的功能买单。
5、快速上市:不需要编写额外的代码、文档,不需要任何维护工作。
6、灵活的灯光控制:内置多路高分辨率的PWM输出。
7、可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。
8、更好的灯光效果:匹配的电流输出确保均匀的显示亮度。
9、布线简单:仅需使用2条就可以组成IIC总线或3条组成SPI总线。
10、与ARM 的几组GPIO引脚,功能相似,GPxCON 控制引脚功能,GPxDAT用于读写引脚数据。另外,GPxUP用于确定是否使用上拉电阻。 x为A,B,,H/J。
11、GPAUP 没有上拉电阻。