目录
1.首先我们要先了解几个概念
1.1串行通信和并行通信·
1.2 单工,半双工,全双工通信
1.3同步通信和异步通信
2.UART
2.1.UART如何通信:
2.2.UART 字节传送和应答
2.3.波特率
3.IIC
3.1 IIC如何通信
3.2 IIC 字节传送和应答
4.SPI
4.1 SPI如何通信
4.2 SPI字节传送
4.3 极性和相位
5.UART IIC SPI 区别
串行通信与并行通信
单工通信与半双工全双工的区别
同步通信与异步通信
并行通信:
(1)传输速度快:一位(比特)时间内可传输一个字符,并行口传输8位数据一次送出.;
(2)通信成本高:每位传输要求一个单独的信道支持;因此如果一个字符包含8个二进制位,则并行传输要求8个独立的信道的支持;
(3)不支持长距离传输:由于信道之间的电容感应,远距离传输时,可靠性较低
串行通信:
将组成字符的各位串行地发往线路。
特点:
(1)传输速度较低,一次一位,串行口传输方式为数据排成一行、一位一位送出接收也一样; (2)通信成本也较低,只需一个信道。
(3)支持长距离传输,目前计算机网络中所用的传输方式均为串行传输。
(4)针脚:针脚少
(5)用途:只用作控制接口
单工通信
单工即数据传输只在一个方向上传输,方向是固定的,不能实现双向通信(A发送数据给B,而B不能发送数据给A),如:收音机广播,你只能听到广播站发出的广播(数据),而你不能反向给广播站发送广播。
双工通信
双工分为 半双工 和 全双工。
半双工
半双工比单工先进一点,传输方向可以切换,允许数据在两个方向上传输。
但是某个时刻,只允许数据在一个方向上传输,可以基本双向通信。
全双工
比半双工更先进的是全双工,允许数据同时在两个方向传输。发送和接收完全独立,在发送的同时可以接收信号,或者在接收的同时可以发送。它要求发送和接收设备都要有独立的发送和接收能力
ART : Universal Asynchronous Receiver-Transmitter, 通用异步收发器;是一种通用的串行,异步通信总线。改总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信
怎么传数据?怎么判断传输开始与结束?传数据的速度是多少?
UART 为异步串行全双工,传数据是一个字节一个字节传输(先发低位),接收方和发送方不需要时钟同步,并且因为是全双工可以在接收数据的过程中同时发送数据
首先在空闲状态,即无传输时,串口线总是处在高电平的,当需要发送数据时,串口线拉低电平一定时间,代表传输开始,后面的即为数据位,传输结束后有一个奇偶校验位(可有可没有),结束传输后重新拉高电平,并留有一定的时间作为空闲位,串口通信每次最多发送一个字节,因为串口是异步通信,如果连续发送的话,收发两端时间不同步会一直累计误差,最后可能导致数据错乱,这也是为什么在停止位后还要留一点时间当空闲位,为的就是防止累计时间误差的出现,让每次传输结束后收发两端重新开始。
波特率用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit的数,我们使用波特率来决定 串口每秒钟传输多少数据,例如115200波特率(bps):代表1秒可以传送115200 bits的数据。
IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线.主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用
SCL:serial clock 串行时钟 SDA:serial data 串行数据
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生; 每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;
主机如何去发指令给从机,从机又如何要去响应主机,是由主机发数据给从机,还是从机发给主机呢。这就涉及到IIC的寻址方式
主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,'0'表示主机发送数据,'1'表示主机接收数据;总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第8位将自己定为发送器或接收器
传输流程:
1.主机发送起始信号启用总线
2.发送需要响应的从机地址,并在最后一位设置传输方向(0表示主机发送数据给从机,1表示从机发送数据给主机)
3.被寻址的从机发送应答信号回应主机
4.发送器发送一个字节数据
5.接收器发送应答信号回应发送器
......(循环4 5直到通信结束)
6.通信完成后主机发送停止信号释放总线
SCL为高电平时,SDA由高变低表示起始信号 SCL为高电平时,SDA由低变高表示停止信号 起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态 停止信号产生后总线处于空闲状态
当我们拉低SDA的电平后代表数据开始传输
IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位
IIC在进行数据传输时,当时钟线SCL为低电平时发送器向数据线发送一位数据,在这期间的信号允许发生变化,但当SCL为高电平时接收器从数据线上读取数据,在此期间的信号不允许发生变化,必须保持稳定,总结来说,就是SCL为低电平时是你写入数据,可以由你自己改变值,但当SCL为高电平时,你只能读取不能改变,否则就会出错。
iic通信开始由主机开始,结束也是由主机结束,当主机接收不到从机的应答信号或者数据传输已经完成后,主机重新拉高电平结束通信。
SPI(Serial Peripheral Interface)是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信总线;
SPI 和 IIC 类似,都是一个主机可以对多个从机进行来回通信,如图所示,他和iic一样都有时钟线,所以为同步传输,并且因为MOSI和MISO和互不干扰,所以为全双工,收发可以同时进行。CS为片选线,当主机向从机的CS线发送使能信号表示选中开始传输数据,与iic不同的是,spi每发完一个数据后不需要等从机回应,并且也不需要开始位和结束位,所以它的传输为高速传输。但他与多个设备通信时需要多条CS片选线.
SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送;
假设spi如上图工作方式,当我们遇到第一个下降沿时,代表发送器向数据线发送数据,到第一个上升沿时,表示接收器从数据线上读取数据,完成一个采样读取周期。如此反复八个时钟周期就是一个字节数据的传送。
极性和相位 SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)这两个因素 CPOL表示SCLK空闲时的状态 CPOL=0,空闲时SCLK为低电平 CPOL=1,空闲时SCLK为高电平 CPHA表示采样时刻 CPHA=0,每个周期的第一个时钟沿采样 CPHA=1,每个周期的第二个时钟沿采样、
脉冲传输前和完成后都是低电平,CPOL为0,第一个边沿(上升沿)采样,第二个边沿(下降沿)输出,对应CPHA为0
脉冲传输前和完成后都是低电平,CPOL为0,第二个边沿(下降沿)采样,第一个边沿(上升沿)输出,对应CPHA为1
脉冲传输前和完成后都是高电平,CPOL为1,第一个边沿(下降沿)采样,第二个边沿(上升沿)输出,对应CPHA为0
脉冲传输前和完成后都是高电平,CPOL为1,第二个边沿(上升沿)采样,第一个边沿(下降沿)输出,对应CPHA为1
UART :异步 全双工 串行 一对一
IIC : 同步 半双工 串行 一对多 有应答机制(与spi比较)极性和时钟相位固定(与spi比较)
SPI :同步 全双工 串行 一对多 无应答机制 (与iic比较)极性和时钟相位可变(与iic比较)
参考视频SPI、UART、RS232、RS485、IIC 5种嵌入式经典通信总线协议精讲「附赠课件资料&项目源码」_哔哩哔哩_bilibili