单片机——通信协议
同步通信和异步通信
同步通信:
- 通信时序:同步通信是基于时钟信号的通信方式。发送端和接收端需要共享相同的时钟信号,以确定数据传输的时刻。
- 等待:在同步通信中,发送端和接收端必须等待时钟信号的到来,然后才能进行数据传输。这意味着通信的步调是由时钟信号控制的,通常更容易实现高速通信。
- 优点:同步通信通常更可靠,因为发送端和接收端的时钟同步,不容易出现数据丢失或错误。
- 缺点:同步通信要求严格的时钟同步,因此在长距离通信或异构系统中可能会面临挑战。
异步通信:
- 通信时序:异步通信是一种不依赖共享时钟信号的通信方式。数据帧中通常包含了起始位、停止位和数据位,以便接收端确定数据的开始和结束。
- 不等待:在异步通信中,发送端和接收端不需要等待时钟信号的到来。数据可以在任何时间传输,只要遵循数据帧的结构。
- 优点:异步通信更灵活,适用于各种通信场景,不受时钟同步的限制。
- 缺点:相对于同步通信,异步通信可能在高速通信时更容易出现数据丢失或错误,因为没有严格的时钟同步。
本质区别:
本质区别在于时钟信号的使用和数据传输的等待方式:
- 同步通信 依赖于共享时钟信号,数据传输的时刻由时钟信号确定,通信步调固定。
- 异步通信 不依赖共享时钟信号,数据传输的时刻不受时钟控制,通信更加灵活,但可能更容易出现数据传输问题。
选择同步通信还是异步通信取决于特定应用的需求和环境。同步通信通常用于高速、可靠的通信,而异步通信更适用于灵活性较高的通信场景。
i2c
按字节传输
I2C(Inter-Integrated Circuit)是一种常见的半双工串行同步通信协议,用于在数字电路和单片机之间传输数据。它广泛应用于连接各种外部设备,如传感器、显示器、存储器和其他微控制器等。以下是关于I2C通信协议的基本介绍:
工作原理:
- I2C是一种主从制通信协议,其中有一个主设备(通常是微控制器)和一个或多个从设备。
- 通信通过两根线实现:SCL(时钟线)和SDA(数据线)。
- 主设备生成时钟信号并控制通信的起始和停止。
- 数据传输是双向的,允许主设备发送数据到从设备,也可以接收从设备发送的数据。
基本概念:
- 主机(Master):负责控制总线和启动通信。
- 从机(Slave):响应主机的指令并与主机通信。
- 时钟信号(SCL):主机产生的时钟信号,用于同步数据传输。
- 数据信号(SDA):用于传输数据的双向数据线。
- 起始条件(Start Condition):主机发出的信号,标志通信的开始。
- 停止条件(Stop Condition):主机发出的信号,标志通信的结束。
- 地址: 每个从设备都有唯一的7位或10位地址,用于选择要与之通信的从设备。
- 字节(Byte):I2C通信以字节为单位传输数据。
- ACK(Acknowledgment):从机发送ACK信号来确认接收到的数据,或者发送NACK来拒绝接收。
通信过程:
- 主机发送起始条件(Start Condition)。
- 主机发送从机的地址和读/写位(R/W位)来选择从机。
- 如果从机存在且地址匹配,从机发送ACK信号。
- 主机和从机之间可以开始传输数据字节。
- 每个字节都由主机发送,然后从机发送ACK或NACK信号进行确认。
- 通信完成后,主机发送停止条件(Stop Condition)。
时钟速率
I2C的时钟速率是通信中使用的时钟频率,通常以赫兹(Hz)为单位表示。I2C支持不同的时钟速率,通常有以下标准速率选项:
- 标准模式 (Standard Mode):时钟速率为100,000赫兹(100 kHz)。
- 快速模式 (Fast Mode):时钟速率为400,000赫兹(400 kHz)。
- 高速模式 (High-Speed Mode):时钟速率为3.4兆赫兹(3.4 MHz)。
此外,有些设备还支持更高的速率,如超高速模式(Ultra Fast Mode),其速率可以高达5兆赫兹(5 MHz)。
要选择适当的时钟速率,你需要考虑以下因素:
- 设备兼容性:确保主设备和从设备都支持所选的时钟速率。
- 通信距离:更高的时钟速率通常适用于短距离通信,而较低的速率可能更适用于长距离通信,因为高速时钟信号可能会受到电缆长度和电容的影响。
- 系统要求:根据系统的性能需求选择适当的速率。例如,快速模式通常用于普通应用,而高速模式用于更要求高性能的应用。
注意事项:
- 了解常见的硬件故障和解决方案。
- 理解I2C的时序图和通信协议。
- 熟悉主机和从机的角色,以及它们在通信中的作用。
- 知道如何处理多个主机和多个从机的冲突。
- 熟悉I2C的应用领域和用途。
- 熟悉I2C的标准时钟速率和快速模式。
- 掌握I2C的错误检测和纠正技术。
应用:
I2C通信协议常用于连接各种外部设备,如温度传感器、EEPROM存储器、显示屏、扩展模块等。在单片机编程中,你可以使用相应的库或驱动程序来轻松实现I2C通信,以与这些设备进行交互。 I2C是一种非常有用的通信协议,因为它允许连接多个设备,以简化硬件设计和连接。
spi
按帧传输
SPI(Serial Peripheral Interface)是一种全双工串行同步通信协议,通常用于微控制器、传感器、存储器和其他外围设备之间的数据传输。SPI协议具有以下关键特点:
- 全双工通信:SPI支持双向数据传输,允许主设备和从设备同时发送和接收数据。这使得SPI非常高效。
- 主从结构:SPI通信通常由一个主设备(通常是微控制器或微处理器)控制,与一个或多个从设备通信。主设备决定通信的时序和数据传输。
- 四根信号线:SPI通信需要四根线:
- SCLK(时钟线):主设备产生的时钟信号,用于同步数据传输。
- MOSI(数据输出线):主设备发送数据到从设备。
- MISO(数据输入线):从设备发送数据到主设备。
- CS/CE(片选线/片使能线):用于选择从设备,通常一条线对应一个从设备。
- 时钟同步:SPI通信是时钟同步的,数据传输在时钟信号的上升沿或下降沿发生,具体取决于通信模式。
- 多种通信模式:SPI支持多种通信模式,根据时钟极性(CPOL)和相位(CPHA)的不同组合,可以有四种主要通信模式,如0、1、2、3模式。
- 数据格式:SPI通常采用8位数据帧,但可以根据需要使用不同的数据位宽。数据可以是高位在前或低位在前,具体取决于设备。
- 时钟频率:SPI的时钟频率可以根据设备的需求进行调整,通常以赫兹(Hz)为单位。通信速率可以从几千赫兹到几兆赫兹不等。
- 低成本和高效率:SPI协议非常适用于短距离、高速数据传输的应用,因为它需要的硬件资源相对较少,通信速度高。
SPI 速率
⼏⼗ MHz 甚⾄上百 MHz,速度取决于 CPU的 SPI 控制器和时钟 clock
STM32F103 的 SPI 最⾼⽀持 18MHz,imx6ull 的 SPI 最⾼⽀持 52MHz,其他芯片⼀般⽤不到更⾼的。 具体采⽤多⼤速率还和外设有关,比如EEPROM 的 W25Q128 的 SPI 最⾼⽀持80MHz,ICM20608 传感器的 SPI 最⾼⽀持8MHz。
SPI接口时钟配置心得:
在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。
uart
按字符传输
UART通信的关键概念:
- 异步传输:UART通信是异步的,这意味着发送和接收设备之间没有共享时钟信号。相反,它们使用预定义的波特率(Baud Rate)来同步数据传输。
- 数据位、停止位和校验位:每个UART数据帧通常包括数据位(通常是8位)、一个或多个停止位(通常是1或2位,用于确定数据帧的结束),以及一个可选的校验位(用于数据完整性检查)。
- 波特率:波特率定义了每秒传输的比特数。发送和接收设备必须在通信开始之前设置相同的波特率,以确保正确的数据传输。
- 全双工通信:UART通信通常是全双工的,这意味着设备可以同时发送和接收数据。
常见的串口类型:
- RS-232:RS-232是一种传统的串口通信标准,通常用于计算机和外部设备之间的通信。
- RS-485:RS-485是一种多点通信标准,允许多个设备在同一串口总线上进行通信,适用于工业控制系统等场景。
- UART:UART(Universal Asynchronous Receiver/Transmitter)是一种通用的串口通信接口,广泛用于嵌入式系统和微控制器。
数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。
one wire
单总线(OneWire)是一种串行通信协议,它允许多个设备通过一个单一的数据线进行通信。这个协议通常用于低速、短距离的数字通信,特别适用于嵌入式系统和传感器网络。以下是关于单总线的一些重要特点和应用:
主要特点:
- 单一数据线: 单总线仅需要一根数据线,这极大地简化了硬件连接。设备可以在同一总线上连接,并且通过地址来区分彼此。
- 低成本: 单总线协议不需要复杂的硬件,这降低了成本。这使其成为连接多个设备的经济实惠选择。
- 数据传输速率: 单总线通常以较低的数据传输速率工作,适用于一些低功耗和简单的应用。
- 异步通信: 数据在单总线上传输是异步的,不需要共享时钟信号。这使得它适用于各种设备和微控制器。
- 支持供电: 单总线通常支持从总线上获得电源,这对于一些小型设备非常有用。
通信原理
- 物理层连接: 单总线通信通常包括一个总线上的主设备和一个或多个从设备。这些设备通过一根物理数据线连接。总线上还可能有一个电源线用于为从设备提供电源。
- 数据帧: 通信基于数据帧的传输。一个数据帧通常包括起始位(Start Bit)、数据位、可选的校验位,以及停止位(Stop Bit)。
- 数据传输: 数据传输是异步的,没有共享时钟信号。数据通过时间间隔来表示逻辑 0 和逻辑 1。逻辑 0 和逻辑 1通常是通过时间长短来区分的,即短脉冲表示逻辑 0,长脉冲表示逻辑 1。
- 设备地址: 每个从设备都有一个唯一的地址,主设备通过发送从设备的地址来选择与之通信的特定设备。
- 总线控制: 主设备负责控制总线上的通信。它生成起始条件(Start Condition)和停止条件(Stop Condition)来开始和结束通信。
- 时序要求: 单总线通信非常依赖时序。每个位都必须在特定的时间内传输和采样,以确保数据的正确性。
- 供电: 一些单总线设备可以从总线上获得电源,这减少了对额外电源线的需求。
- 错误处理: 单总线通信通常包括错误检测和纠正机制,以确保数据的完整性。
can
CAN(Controller Area Network)是一种常用于实时控制系统和嵌入式系统中的串行通信协议。它最初是由Bosch开发的,旨在用于汽车领域,但后来广泛用于其他领域。以下是对CAN协议的介绍:
特点:
- 串行通信: CAN协议使用串行通信,其中数据位按照一定的时序通过单一的双绞线进行传输。
- 差分信号: CAN协议使用差分信号,即在两根线上传输相反的信号。这有助于减少电磁干扰,提高通信的抗干扰性。
- 广播通信: CAN协议采用广播通信方式,即所有节点都能接收总线上的数据,但只有特定节点会对数据进行响应。
- 实时性: CAN协议具有良好的实时性,适用于需要高速数据传输和精确时序的应用,如汽车控制系统。
- 冲突处理: CAN协议具备冲突检测和处理机制,可以确保在多个节点同时发送数据时不会发生冲突。
- 数据帧: 数据在CAN中以数据帧的形式传输,包括标识符、数据域和校验字段。
- 主动性: CAN通信是主动性的,节点可以随时发送数据,而其他节点则需要主动接收或忽略它。
CAN总线基本原理:
- 差分信号: CAN总线使用差分信号,即两根线,分别称为CAN_H和CAN_L,传输相反的信号。这种差分信号有助于减少电磁干扰,提高通信的稳定性。
- 帧结构: CAN通信使用帧(Frame)的结构。每个CAN帧包括标识符(Identifier)、数据域(Data Field)、控制位和校验字段。标识符用于唯一标识帧的用途和优先级。
- 通信速率: CAN总线支持多种通信速率,从几千位每秒到数兆位每秒不等,具体速率根据应用需求设置。
CAN通信过程:
- 发送帧: 当一个CAN节点(例如传感器或控制器)要发送数据时,它将准备好的数据装载到CAN帧中,包括标识符、数据域等。
- 仲裁: 如果多个节点尝试同时发送数据,CAN总线上的仲裁机制确定哪个节点有权发送。这是通过标识符的比较来实现的,具有更低标识符值的节点具有更高的优先级。仲裁后,具有最高优先级的节点获得总线控制权。
- 数据传输: 一旦获得总线控制权,节点将其CAN帧发送到总线上。CAN帧的数据位按照时序通过CAN_H和CAN_L线传输。
- 接收和过滤: 所有节点都接收总线上的数据帧,但只有与标识符匹配的节点才会处理数据。这是通过过滤机制实现的。
- 错误检测: CAN通信具有内建的错误检测机制,用于检测和处理传输中的错误。这包括奇偶校验、CRC(循环冗余校验)和其他机制。
- 应答: 如果数据被成功接收,节点可以发送应答帧来确认接收。这有助于确保数据的可靠传输。
- 循环重复: CAN总线上的通信是循环重复的过程,多个节点可以依次发送和接收数据。