总述
通信的目的是,将一个设备的数据传送到另一台设备,实现硬件的扩展,而通信协议则是通信过程中遵守的规则典范,通信双方按照通信协议进行数据收发
USART串口通信
- 波特率:串口通信的速率
- 起始位:标志一个数据帧的开始,固定为低电平
- 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
- 检验位:用于数据验证,根据数据位计算得来
- 停止位:用于数据帧间隔,固定为高电平
由于串口是异步通信,故需要通信双方来约定一个通信速率,比如我每隔1秒发送一位数据,那你也就得每隔1秒接收一位数据。假设当你接收的速率过快,那么你就会重复接收某些位数据。当你接受的速率过慢,那么你就会错过接收某些数据。
当我们在发送数据的时候,我们必须要先发送一个起始位,这个起始位必须是低电平,用来打破空闲状态的高电平,使得其产生一个下降沿信号,这里的下降沿就相当于一个标志,高速接收设备,这一帧数据要开始传输,你要准备好接收数据了。同理,也就是为什么要有一个停止位,用来告诉设备我传输完数据了。可以准备开始下一帧数据的传输了,这也就是为什么要将停止位置为高电平。
起始位固定为0,产生下降沿,表示传输数据开始。停止位固定为1,产生上升沿,表示传输数据结束。
在串口中,使用一种叫奇偶检验的数据验证方法,奇偶检验可以用来判断数据是不是传输错误了。如果数据出错,可以选择丢弃或者要求重传。校验可以选择三种方式,无校验,奇校验、偶校验。
无校验:就是不需要对数据进行校验,如上图的左边所示。起始位、数据位、停止位三部分。
奇校验、偶校验:如上图的右边所示。起始位、数据位、校验位、停止位四部分。
如果使用奇校验,那么包括校验位在内的9位数据会出现奇数个1。如果使用偶校验,那么包括校验位在内的9位数据会出现偶数个1。
IIC通信
IIC主要特点:
通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。**
IIC主设备功能:主要产生时钟,产生起始信号和停止信号
IIC从设备功能:可编程的IIC地址检测,停止位检测
IIC的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)
SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
IIC是半双工,而不是全双工 ,同一时间只可以单向通信
为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。
IIC物理层总结:
I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,SCL和SDA被上拉电阻Rp拉高,使SDA和SCL线都保持高电平。
I2C通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,485也为半双工,SPI和uart通信为全双工。
主机和从机的概念:
主机就是负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务,主机和从机之间通过总线连接,进行数据通讯。
发布主要命令的称为主机
接受命令的称为从机
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。