单片机常用通信协议(一)

发布于:2025-08-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

串行通信协议(单线 / 双线传输,适合长距离、低速率)

串行通信通过一根或两根数据线逐位传输数据,硬件连接简单,广泛应用于单片机系统

1、UART

帧格式
在这里插入图片描述
数据位是可以发送5~8位,不一定非得是8位。
USART通信不允许连续发送数据通讯。原因在于发送方和接收方对于数据位的时钟不同都是根据自己的时间进行判断的,时间一长就会出现时间累计误差问题,例如A发送一位数据记作1S,B接收一位数据记作0.9秒,当数据达到第十位时,就会出现错导致后续数据全部错误。基于这个原因USART发送多字节数据只能多次重启串口进行通信。
说明:一次只能发送一个字节,检验位可以有可以无,每次发送都是这样的格式

  • 异步通信:无需时钟线同步,双方通过约定波特率(数据传输速率,如 9600bps、115200bps)保证数据同步。
  • 数据帧结构:
    起始位:1 位低电平(标志数据传输开始);
    数据位:5-8 位(通常为 8 位,即 1 字节);
    校验位(可选):1 位(奇校验 / 偶校验 / 无校验,用于简单错误检测);
    停止位:1-2 位高电平(标志数据传输结束)。
  • 硬件连接
    在这里插入图片描述
  • 硬件连接简单,适合点对点同信,实现的成本比较低;
  • 劣势是需要波特率严格的一致,抗干扰的能力比较弱,速率比较低(通常≤1Mbps)
  • 通常用于单片机与PC的通讯,以及短距离传感器传输。

RS232,RS485

RS232协议
  1. RS232协议
    接口:该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定。工业控制的RS-232接口一般只使用RXD、TXD、GND三条线。RS232属于全双工,可以同时进行发送和接收。
    信号采用负逻辑(负电压表示逻辑高,正电压表示逻辑低)。
    信号:该标准规定逻辑“1”的电平为-5v到-15v(通常为 -12V),逻辑“0”的电平为+5v 到+15v(通常为 +12V),选用该电气标准的目的在于提高抗干扰能力,增大通信距离,其传送距离一般可达15m。
    中间电平转换:单片机USART可以接收和发送的都是TTL信号,所以RS232标准的信号需要借助电平转换器进行转换,将RS232信号转换为TTL信号供USART进行收发。最常见的电平转换芯片有MAX232EPE芯片。
  2. RS232存在的问题
    ①接口的信号电平值比较高,容易损坏接口电路的芯片又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。
    ②通信速度较低。
    ③易产生共模干扰,抗噪声干扰性弱。
    ④传输距离较短(15m)。
RS485协议

在这里插入图片描述

  1. RS485标准规定采用差分信号(两根线HL)进行数据传输,两线间的电压差为+2v到+6v表示逻辑“1”,两线间的电压差为-2v到-6v表示逻辑“0”;使用差分信号能有效地减少噪声信号的干扰,延长通信距离,RS485的通信距离可以达到1500m;RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接
    RS485的通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号,并且允许连接多个收发器,即具有多站能力,这样可以利用单一的RS485接口方便地建立起一个设备网络。
    因为采用两线制,数据的发送和接收都要使用这对差分信号线,发送和接收不能同时进行,所以只能采用半双工的方式工作,编程时也需要加以处理。
  2. ①接口的信号电平值较低,不易损坏接口电路的芯片,且与TTL电平兼容,可方便地与TTL电路连接。
    ②通信速度快。
    ③抗噪声干扰性强。
    ④传输距离较远(1500m)。
    ⑤可实现一主多从,可以组成网络模式。

2、I2C

IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线主要是用于PCB板上MCU与其他芯片进行数据的通信,因为抗干扰能力比较差传输距离比较近、传输的速度比较低。IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步。IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。IIC的通信很简单只有两根数据线即可进行通信。
在这里插入图片描述

(1)IIC总线通信

IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;
在这里插入图片描述

(2)IIC总线通信过程

①主机发送起始信号启用总线
②主机发送一个字节数据指明从机地址和后续字节的传送方向
1~7位表示主机要与从机0x03地址进行通信,第0位表示数据传输的方向。是0表示主机发向从机;是1表示从机发向主机。
③被寻址的从机发送应答信号回应主机
④发送器发送一个字节数据
⑤接收器发送应答信号回应发送器
… … (循环步骤④、⑤)
⑥通信完成后主机发送停止信号释放总线

(3)IIC总线的实现

①在IIC总线空闲的时候,SCL时钟线和SDA数据线都是高电平状态。
②起始信号,SCL时钟线为高电平,SDA由高电平转变为低电平。
③停止信号,SCL时钟线为高电平,SDA由低电平转变为高电平。
因为两根数据线的空闲状态均为高电平信号,所以默认恢复高电平状态为停止信号,转变为低电平状态时为起始信号。

(4)IIC字节传输与应答

SCL为低电平时,发送器进行发一位数据,此时SDA数据线上的高低电平允许进行跳变;SCL为高电平时,SDA上数据不允许进行变化。此时接收器从数据线上读取一位数据。若发送八位数据依次循环往复即可,因为收发器共用一个SCL,所以I2C一次性可以传输的数据是无限制的,不存在时间累计误差问题。
SCL时钟,就是告诉发送器和接收器什么时候进行放数据(发送),什么时候进行取数据(接收)。

(5)典型IIC时序

①主机向从机发送数据
S————起始信号(Start) P————停止信号(Stop) A————应答帧(Ack)
A非————不应答 (深色表示主机数据发送,浅色表示从机数发送)
在这里插入图片描述
第一部分,本主机发出起始信号Start占领总线+发出7位从机地址数据+数据传输方向0(主机给从机发送数据)。从机收到应答Ack。
第二部分,主机(发送器)继续发送数据包到从机(接收器)。从机收到应答Ack。
第三部分,循环往复第二部分内容,直到主机数据全部发送完成或从机不再应答主机数据,数据发送停止,主机(发送器)发出停止信号(Stop)。
②从机向主机发送数据
S———起始信号(Start) P————停止信号(Stop) A————应答帧(Ack)
A非————不应答 (深色表示主机,浅色表示从机)
在这里插入图片描述
第一部分,本主机发出起始信号Start占领总线+发出7位从机地址数据+数据传输方向1(从机给主机发送数据)。从机收到应答Ack。
第二部分,从机(发送器)发送数据包到主机(接收器)。主机收到应答Ack。
第三部分,循环往复第二部分内容,直到从机(发送器)数据全部发送完成或主机(接收器)不再应答从机数据,数据发送停止,主机(接收器)发出停止信号(Stop)。
③主机先向从机发送数据后,从机向主机发送数据
在这里插入图片描述
知识点:一次数据传输开始后,数据的传输方向就会被确定,且本次数据传输有且只有一个这个方向数据进行传递,即若是0只能是主机向从机发送数据,若是1只能是从机向主机发送数据,中途的数据传输方向无法改变。
第一部分:本主机发出起始信号Start占领总线+发出7位从机地址数据+数据传输方向0(主机给从机发送数据)。从机收到应答Ack。
第二部分,主机(发送器)继续发送数据包到从机(接收器)。从机收到应答Ack。循环往复此部分内容,直到主机(发送器)数据全部发送完成或从机(接收器)不再应答主机数据,数据发送停止。
(前半段传输不产生停止信号,直接开始下一帧数据传输)
第三部分,本主机发出起始信号Start占领总线+发出7位从机地址数据+数据传输方向1(从机给主机发送数据)。从机收到应答Ack。
第四部分,从机(发送器)发送数据包到主机(接收器)。主机收到应答Ack。循环往复此部分内容,直到从机(发送器)数据全部发送完成或主机(接收器)不再应答从机数据,数据发送停止。主机(发送器)发出停止信号(Stop)。

3、SPI

SPI(Serial Peripheral Interface)是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信总线;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备;SPI需要至少4根线,分别是MISO( 主设备输入从设备输出(接收) )、MOSI(主设备输出从设备输入(发送) )、SCLK(时钟)、CS(片选)SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议。
M————Master(主人,主机)
S————Slave (从机)

(1)寻址方式

当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该从设备。
在这里插入图片描述

Q:如何判断一个芯片是高电平选择使能,还是低电平选择使
A:看芯片CS的引脚,如果直接写的是CS那就是高电平有效; 如果芯片引脚写的是,上方有一条横线代表低电平有效。

(2)通信过程

SPI总线在进行数据传送时,先传送高位,后传送低位(与IIC传输方式相同,USART相反);数据线为高电平表示逻辑‘1’,低电平表示逻辑‘0’;一个字节传送完成后无需应答即可开始下一个字节的传送,且SPI无起始信号和停止信号;SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。
在这里插入图片描述MSB= =最高位
LSB= =最低位

(3)极性和相位

IIC规定SDA和SCL在空闲时是处于高电平的,当SCL时钟线处于低电平时是让发送器进行发送数据的,SCL时钟线处于高电平时是让接收器进行读数据的。
SPI是可变的,无硬性规定的。SPI一共有四种不同的工作模式。
在这里插入图片描述CPOL表示极性,代表SCLK时钟线空闲时的高低电平状态。
CPHA表示相位,代表是一个时钟周期是上升沿发送信号下降沿接收数据,或者是上升沿接收数据,下降沿发送数据。
①CPOL = 0,CPHA = 0.
CPOL代表极性,也就是SCK时钟线的初始状态高低电平,等于0代表初始状态是低电平,如图中橙色部分所示。
CPHA0表示在每个周期的第一个时钟沿采样,时钟沿是必须发生电平的跳变才能进行产生的。CPHA0代表在周期第一个时钟沿采样,也就是在此时进行数据的接收(读数据),那么图中时钟沿A就是读数据,B就是写数据。一次类推下一个时钟周期中C就是读数据,D就是写数据。
在这里插入图片描述②CPOL = 0,CPHA = 1.
CPOL代表极性,也就是SCK时钟线的初始状态高低电平,等于0代表初始状态是低电平,如图中橙色部分所示。
CPHA1表示在每个周期的第二个时钟沿采样,时钟沿是必须发生电平的跳变才能进行产生的。CPHA1代表在时钟周期第二个时钟沿采样,也就是在此时进行数据的接收(读数据),那么图中时钟沿B就是读数据,A就是写数据。一次类推下一个时钟周期中D就是读数据,C就是写数据。
在这里插入图片描述③CPOL = 1,CPHA = 0.
CPOL代表极性,也就是SCK时钟线的初始状态高低电平,等于1代表初始状态是高电平,如图中橙色部分所示。
CPHA0表示在每个周期的第一个时钟沿采样,时钟沿是必须发生电平的跳变才能进行产生的。CPHA0代表在时钟周期第一个时钟沿采样,也就是在此时进行数据的接收(读数据),那么图中时钟沿A就是读数据,B就是写数据。一次类推下一个时钟周期中C就是读数据,D就是写数据。
在这里插入图片描述
④CPOL = 1,CPHA = 1.
CPOL代表极性,也就是SCK时钟线的初始状态高低电平,等于1代表初始状态是高电平,如图中橙色部分所示。
CPHA1表示在每个周期的第二个时钟沿采样,时钟沿是必须发生电平的跳变才能进行产生的。CPHA1代表在时钟周期第二个时钟沿采样,也就是在此时进行数据的接收(读数据),那么图中时钟沿B就是读数据,A就是写数据。一次类推下一个时钟周期中D就是读数据,C就是写数据。
在这里插入图片描述
多种极性和相位是为了适应不同芯片的通讯需求。

注意:本文内容均来源于网络如遇侵权行为请联系本作者


网站公告

今日签到

点亮在社区的每一天
去签到