目录

串口通信综述

1、RS-232

2、RS-485

3、UART

4、Modbus

Modbus-RTU协议

Modbus-ACSII协议

Modbus-TCP协议

5、I2C

6、SPI

7、CAN


串口通信综述

  1. RS-232:RS-232是一种常见的串口通信电气层的协议,用于在计算机和外部设备之间进行数据传输。它定义了信号电平、物理连接等方面的规范。一般会和UART一起使用。

  2. RS-485:RS485是一种常用的串口通信电气层的协议,常用于工业自动化、楼宇自控、安防监控等领域中大量设备的联网通信。它定义了信号电平、物理连接等方面的规范,一般会和UART一起使用。它使用差分信号传输,即每个数据线都有相应的反向线(A/B或+/-),通过比较这两个线之间的电压差来传输数字信号。这种方式可以避免共模噪声和地位移等问题,提高了信号质量和抗干扰能力。

  3. UART:UART(通用异步收发传输器)是指一种用于实现串口通信的集成电路或模块。它通过将数据转换为连续的位流,并使用起始位、数据位、停止位等元素来标识数据的开始和结束。

  4. Modbus:Modbus是一种常用的串口通信协议,用于在工业自动化系统中实现设备间的通信。它具有简单、可靠和广泛适用性的特点,支持多种物理介质和传输方式。

  5. SPI:SPI(串行外设接口)是一种串行通信协议,常用于连接微控制器与外部设备(如传感器、存储器等)。它通过时钟和数据线实现全双工的数据传输。

  6. I2C:I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接多个芯片,实现数据的交换和控制。它使用两根线路(时钟线和数据线)来进行通信,并支持多主机和多从机的拓扑结构。

  7. CAN(Controller Area Network)是一种串口通信协议,广泛应用于汽车、工业控制、机器人等领域。它是一种高效可靠的实时通信协议,能够支持数据传输速率高达1 Mbps,并具备抗干扰能力和可靠性。它定义了基于事件驱动的通信方式,其中包括两种基本通信模式:数据帧传输和远程帧传输。

1、RS-232

        在介绍此类协议之前,先额外说一下TTL。

        TTL(Transistor Transistor Logic)即晶体管-晶体管逻辑,TTL电平信号由TTL器件产生。最常见的就算是直接从MCU(主控芯片)产生。TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑"1",0V等价于逻辑"0",这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。 

  图1-1 STM32F051收发管脚示意图

       

         比如上图中STM32F051的PA9和PA10就是串口的收发管脚,051主控会通过内部串口控制器将数据转换为0、1电平,然后交由这两条线传输。这个电平制式就是TTL电平。

        假如就单纯以上述的TTL电平用来单片机的信息交互的话,局限性就会很大,最明显的缺点就是传输距离很短,因为MCU的正常工作电压可能也就3.3V,你要想传输多远?一般也就是用于同一块板子上的不同模块之间(如微处理器、存储器、传感器、驱动器等)通常使用TTL电平进行数据交换

        使用TTL电平进行板上通信有以下一些优势:

  1. 信号可靠性:TTL电平对于噪声和干扰具有较好的抗干扰能力,可以在较短距离上实现可靠的信号传输。

  2. 简化接口:TTL电平标准简化了内部模块之间的接口设计,因为它们共享相同的电平标准,无需额外的电平转换电路。

  3. 成本效益:TTL电平标准是一种成熟且广泛使用的标准,相关器件和工具的成本相对较低。

        然而,当需要进行长距离通信或与其他设备进行外部通信时,TTL电平的传输距离较短并且可能不适用。在这种情况下,适当的电平转换器,也就是RS-232就出现了。

        RS-232:RS232是一种串行通信标准,主要用于在两个设备之间传输二进制数据。它通常使用一对线路来传输数据:发送数据线(TXD)和接收数据线(RXD)。RS232标准规定了电平范围,即-15V至+15V,其中负电平表示逻辑“1”,正电平表示逻辑“0”。RS232标准还规定了连接器类型、引脚功能等方面的规范。它更多充当的是一个转换器的作用,将发送端的电压拉高,可以传输远一点,当接受到同类型的电平时,在转换为另一个电平来进行两块板子之间的通信。

        以下是使用RS-232转换器的图示,可见增加了传输距离,但是对芯片有一定程度的损害。(因为十几伏还是蛮大的)

图1-2 RS-232转换图

       

        RS-232的优势

  1. 成熟稳定:RS-232协议早在1962年就被引入市场,并且在很长一段时间内得到广泛应用,因此相关硬件设备和软件支持非常成熟稳定。这使得使用RS-232协议的设备在兼容性和可靠性方面具有优势。

  2. 简单易用:RS-232协议的电气特性相对简单,只需使用单一的数据线(TX、RX)进行双向通信,以及一个共享地线(GND)。这种简洁的设计使得RS-232设备的接口设计和使用相对简单,适合小规模、简单的通信系统。

  3. 距离较远:RS-232协议可以实现较长距离的数据传输,最常见的标准串口距离可以达到15米,而采用特殊技术和增加中继器等手段,则可以实现更长距离的传输。这使得RS-232在跨越较大物理距离的通信需求中表现出优势。

  4. 广泛应用领域:由于RS-232协议的广泛应用历史和成熟性,它在很多领域仍然得到广泛使用,如计算机设备、工业自动化、通信设备等。在某些特定的应用场景中,使用RS-232可以更好地满足实际需求。

2、RS-485

        RS-485是一种常用于工业领域的串行通信标准,它可以实现多点通信,支持长距离传输,抗干扰能力强等特点。RS-485协议定义了数据通信线使用的信号线数量和电平标准,通常使用两根数据线(D+和D-)和一个公共地线(GND),其中D+线电平高于D-线电平表示逻辑“1”,反之则表示逻辑“0”。RS-485协议通常使用差分信号传输,即两个信号线之间的电压差作为信号进行传输,这种差分传输方式可以有效实现共模抑制,提高传输质量。

        RS-485协议支持两种通信方式:点对点(两个设备之间传送数据)和多点通信(多个设备之间传送数据)。在多点通信(采用拓扑结构)中,每个设备可以从总线上读取数据包,也可以向总线上发送数据包。此时需要使用特殊的控制方法使得多个设备不会同时向总线上发送数据,从而导致线路冲突。其中,第二种使用方法和iic类似,但是这个协议并没有规定其通信方式,具体的实现可以类比iic。

图2-1 RS-485两种通信协议

        使用情况:A和B数据线上的电压大小是相等的,但是极性相反,两个线一起传输,当出现干扰信号扰乱数据线上的电压大小时,因为两个数据线是一起的,就会出现一起升高或者一起降低的情况,但是我最终取值是以电压差值为结果,所以不会影响数据传输正确性。(差值大小:逻辑1:+2V ~ +6V;逻辑0:-6V ~ -2V

图2-2 RS-485数据传输过程

       

         RS-485优势:

  1. 高速和远距离传输:RS-485支持高达10 Mbps的数据传输速率,且能够在较长距离上进行通信。标准的RS-485传输距离可达1200米,适合于需要远距离传输数据的应用场景。

  2. 多节点连接:RS-485可以支持多个设备通过同一条总线进行通信,即多节点连接。这种特性使得RS-485在工业控制系统、楼宇自动化等领域得到广泛应用,可以方便地实现设备之间的通信和数据交换。

  3. 抗干扰能力强:RS-485采用差分信号传输方式,通过正负两条数据线的电压差来表示数据,使其对电磁干扰和噪声具有较强的抵抗能力。此外,RS-485还支持半双工和全双工通信模式,在抗干扰上更加灵活可靠。

  4. 灵活性和可扩展性:RS-485协议的硬件设计比较简单,接口电路成本较低,容易实现。同时,由于RS-485支持多节点连接,系统可以通过增加适当的转换器或集线器来扩展节点数量,满足不同规模和复杂度的通信需求。

  5. 通用性强:RS-485是一种被广泛应用的通信标准,许多设备和系统都支持RS-485接口,因此在不同厂家的设备之间进行数据交换时具有较好的兼容性和互操作性。

3、UART

        UART(Universal Asynchronous Receiver Transmitter)是一种通用的串行异步收发传输器,它是普遍应用于单片机、计算机、嵌入式系统等领域的一种通信接口标准。UART通过发送和接收两个线路进行数据传输,即TX线和RX线。其中,发送端将数据转换为电平信号,并通过TX线发送,接收端则通过RX线接收电平信号并解码为数据。

UART通信协议由以下组成部分:

  1. 起始位:作为数据帧的第一个比特,用于通知接收方数据帧的开始。
  2. 数据位:用于传输数据的二进制比特数,通常是8。
  3. 校验位:用于检查数据传输是否正确,包括奇偶校验和循环冗余校验(CRC)。
  4. 停止位:作为数据帧的最后一个比特,用于通知接收方数据帧的结束。
图3-1 UART帧格式

面试官问你两个问题:1、为什么要有起始位?作用是什么?

                                    2、既然是异步通信,那需要怎么样才能保证数据尽可能准确?

                                    补充:校验位能检测数据的正确性吗?思考一下。

        当发送端要发送数据的时候,对方并不知道你要发送数据了,怎么办呢?空闲时,都处在高电平,当要发送数据时,将高点平拉为低电平,也就是代表了数据的开始。之后就可以开始发送数据,一般发送一个字节,也就是8位,并且是先发低位,后发高位。发送完数据可以发送校验位,也就是校验前面发送的数据是否正确。一般采取的是奇校验(数据位上的1的个数 + 校验位上1的个数 = 奇数)、偶校验(数据位上的1的个数 + 校验位上1的个数 = 偶数。最后将电平拉高,也就是发送一个高电平,继续成为空闲状态,继续开始下一趟数据的发送,依此循环。再这个过程中,还有重要的波特率要规定,波特率就是单位时间内数据传输的码元数,常见的波特率有9600、115200。

        当接收到电平的时候,发送端发送01和0011的电平现象是一样的,这个时候接收方怎么辨别呢,最好的办法就是“掐时间”。比如:波特率1,也就是一秒发送一位,当接收方在接收数据的时候,严格掐好时间,就实现了数据的准确性。

 图3-2 波特率的作用

        UART优势:

  1. 简单性和低成本:UART的硬件设计相对简单,成本较低。它只需要少量的电路和线路即可实现数据的串行传输,因此在许多嵌入式系统和普通计算机系统中得到广泛应用。

  2. 可靠性:UART通信基于物理电平信号,具有较强的抗干扰能力。即使在复杂的电磁环境中,UART通信仍然能够正常工作,并保持数据的准确传输。

  3. 异步传输:UART以异步方式传输数据,不需要时钟信号进行同步。这意味着发送端和接收端的时钟信号可以不同步,数据帧之间可以有任意时间间隔。这种灵活性使得UART通信适用于通信双方时钟不同步或速率不一致的情况。

  4. 通用性和兼容性:UART接口在计算机和嵌入式系统中得到广泛应用,并且有丰富的软件和硬件支持。许多微控制器、单片机和外部设备都提供UART接口,使得设备之间的互连变得更加方便。

  5. 低功耗:UART通信通常使用起始位、数据位、校验位和停止位等数据帧格式。相比于其他通信协议,UART的数据帧格式相对简单,传输过程中不需要复杂的数据压缩和解压缩,从而减少了功耗。

4、Modbus

        Modbus是一种串行通信协议,用于工业自动化系统中设备之间的通信。它可以在不同的物理介质上运行,如串口、以太网等。Modbus协议有多个变体,它自己本身只是一个泛指,当一个人给你说使用Modbus协议的时候,其实就是不正确的,它包括Modbus RTU、Modbus ASCII和Modbus TCP。

  1. Modbus RTU:

    • 物理层:Modbus RTU使用串口进行通信,常用的接口包括RS-232和RS-485。RS-485允许多个设备在同一总线上进行通信。
    • 数据格式:Modbus RTU使用二进制数据格式,将数据转换为16进制数,每个字节都包含8位数据。数据帧包括地址字段、功能码、数据域和错误检验等。
    • 传输方式:Modbus RTU使用异步传输方式,通信速率可根据需求设置。
    • 错误检验:Modbus RTU使用CRC(循环冗余校验)进行数据的错误检验。
  2. Modbus ASCII:

    • 物理层:Modbus ASCII也使用串口通信,与Modbus RTU相同,常用的接口包括RS-232和RS-485。
    • 数据格式:Modbus ASCII使用ASCII字符表示数据,每个字节使用两个ASCII字符进行编码。数据帧包括地址字段、功能码、数据域和纵向冗余校验(LRC)等。
    • 传输方式:Modbus ASCII使用异步传输方式,通信速率较Modbus RTU慢。
    • 错误检验:Modbus ASCII使用LRC进行数据的错误检验。
  3. Modbus TCP:

    • 物理层:Modbus TCP使用以太网作为物理介质,设备通过TCP/IP协议进行通信。它利用以太网的高速性能和广泛的网络结构。
    • 数据格式:Modbus TCP使用基于以太网的数据帧格式,每个数据帧包括地址字段、功能码、数据域和CRC校验等。
    • 传输方式:Modbus TCP使用TCP/IP协议进行数据传输,可以实现高速、可靠的通信。
    • 错误检验:Modbus TCP使用CRC进行数据的错误检验。

        无论是哪种变体,Modbus协议都采用主从结构,其中一个主节点负责发起通信,而从节点负责响应。主节点可以向从节点发送读取或写入的命令,并接收从节点返回的数据响应

Modbus-RTU协议

        Modbus RTU(Remote Terminal Unit)是一种基于二进制格式的Modbus通信协议。

        Modbus RTU协议使用二进制编码来表示数据,通常在串行通信中使用。因为它使用二进制形式表示数据,不需要进行字符转换和校验和计算。

Modbus报文帧结构

        一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,本质就是一串数据。Modbus报文是指主机发送给从机的一帧数据,其中包含着从机的地址,主机想执行的操作,校验码等内容

图4-1 Modbus协议报文格式

  • 帧结构=从机地址+功能码+数据+校验位

从机地址: 每个从机都有唯一地址,占用一个字节,范围0-255,其中有效范围是1-247,其中255是广播地址(广播就是对所有从机发送应答)

功能码: 占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改从机的数据,所以不同功能码对应不同功能。

数据: 根据功能码不同,有不同功能,比方说功能码是查询从机的数据,这里就是查询数据的地址和查询字节数等。

校验: 在数据传输过程中可能数据会发生错误,CRC(循环冗余校验)检验检测接收的数据是否正确。

        其中,CRC就不多介绍了,相信大家不在话下。(接收方在接收到数据帧后,会验证CRC校验码的正确性,如果校验失败则丢弃数据帧。而如果校验成功,则进行相应的操作处理,并发送响应消息给发送方)大学期间也接触过。简单说说功能码。毕竟在帧格式中占8位,iic也才占1位。这些功能码到底怎么使用呢?Modbus协议定义了二十多种功能码,常见的也就是8种。

图4-2 常用功能码说明 

Modbus-ACSII协议

        在Modbus ASCII协议中,每个字节都由两个ASCII字符表示。例如,字节0x41会被表示为ASCII字符'A'和'1',其中'A'表示高4位,'1'表示低4位。这种表示方式会增加数据的长度,因为每个字节需要两个字符来表示。

Modbus ASCII协议的通信流程如下:

  1. 发送方发送起始字符"":"(冒号)"。
  2. 之后每两个ASCII字符表示一个字节的数据,按照高位在前、低位在后的顺序发送。
  3. 所有数据字节发送完毕后,发送方计算并发送校验码,校验码是所有数据字节的累加和的低位字节的补码表示。
  4. 接收方接收到起始字符后开始接收数据,直到接收到终止字符""(回车换行)。
  5. 接收到数据后,接收方验证校验码是否正确,如果正确则进行数据处理,否则丢弃数据。
图4-3 ASCII协议通信格式

        可以看到数据部分更加繁琐,正常我们使用都是用RTU格式,ASCII码格式有了解即可。

Modbus-TCP协议

        Modbus-TCP协议是基于TCP/IP网络的Modbus通信协议,用于实现设备之间的数据交换和通信。与传统的串行Modbus协议(如Modbus RTU)不同,Modbus-TCP使用以太网作为底层通信介质,通过TCP/IP协议栈来进行数据传输。这使得Modbus-TCP协议具有更高的传输速度、更灵活的拓扑结构以及更大的网络范围。

        Modbus-TCP协议采用了类似于Modbus RTU协议的数据帧格式,但在封装上有所区别。一个Modbus-TCP报文由标头字段和数据字段组成,格式如下:

事务标识符协议标识符长度单元标识符功能码数据
2字节2字节2字节1字节1字节

N字节

图4-4 TCP协议通信格式 

各字段的含义如下:

  • 事务标识符(Transaction Identifier):用于标识报文的唯一性,回复报文中也会携带相同的事务标识符。
  • 协议标识符(Protocol Identifier):指示使用的Modbus协议版本,通常为0x0000。
  • 长度(Length):数据字段的字节长度。
  • 单元标识符(Unit Identifier):指示访问的设备或从站地址。
  • 功能码(Function Code):用于指定所要执行的操作,如读取寄存器、写入寄存器等。
  • 数据(Data):特定功能码所需要传输的具体数据。
  • 思考:为什么Modbus-TCP协议没有数据校验?难道是不在乎数据正确性吗?

 Modbus优势:

  1. 简单易用:Modbus协议非常简单易用,使用方便,适用于各种工业自动化设备。

  2. 开放性强:Modbus协议是公开的通信协议,任何厂家都可以使用该协议来进行产品的开发。

  3. 节点多:Modbus协议支持多个从设备连接到一个主设备上,因此可以实现多个设备之间的通信。

  4. 传输速度快:Modbus协议可以实现高速的数据传输,传输速度可达到115200 bits/s,具有较高的数据传输效率。

  5. 容错性强:Modbus协议在传输数据时具有强大的容错能力,即使在通信出现错误的情况下,也能够自动恢复并进行数据传输。

  6. 可靠性高:Modbus协议采用CRC/LRC校验方式来保证数据的可靠性,确保了数据的正确性和完整性。

  7. 应用广泛:由于Modbus协议具有以上优点,因此在各种工业自动化应用中得到了广泛的应用,如PLC、传感器、电机、变频器等设备的控制和通信。

5、I2C

        I2C协议使用两根线进行通信:SCL(Serial Clock)和SDA(Serial Data)。SCL线用于提供时钟信号以同步数据传输,SDA线则用于传输实际的数据。通过主从架构,一个或多个主设备可以与多个从设备进行通信。(主从是相对的,主动一方就是主,被动一方就是从

图5-1 I2C物理接线图 

        上述图中,一般单片机作为主设备,其余的作为从设备。但是单片机也可以和单片机进行通信,就看谁主动了,也就是说,主动就是主设备,被动的就是从设备。单片机有可能沦为从设备。

        数据帧格式:在I2C通信中,数据以字节为单位传输。起始的一个字节由7位地址位和1位数据方向(0表示主设备向从设备发送数据1表示接收从设备发送的数据)组成,也就是一个字节。还有一个起始位和一个停止位用于标识数据传输的开始和结束。

  1. 起始位:SCL为高电平时,SDA由高电平向低电平转换。

  2. 地址:7位从设备地址+一个读(R)/写(W)位组成。在I2C总线上,每个从设备都有一个唯一的地址。主设备通过一个7位地址标识,可以进行寻址;其中最高位是一个读/写标志位,指示主设备是想要从从设备读取数据还是向其写入数据。

  3. 应答位:每当一个字节被接收时,就会发送应答位。如果收到正确的字节,从设备会返回一个应答位,主设备继续传输数据;如果从设备没有接收到正确的字节(或者不想接收数据了),则返回NACK应答位,主设备停止传输。

  4. 数据:由8个bits组成的字节数据,在I2C总线上传输。主设备向从设备发送数据或者从从设备接收数据。(IIC传输数据是高位在前,并且第一次发送的地址加读写位也可以叫做数据位

  5. 停止位:SCL为高电平时,SDA由低电平向高电平转换,表示传输结束。

典型IIC时序: 

图5-2 典型IIC时序图

         上述表明:主设备发送信号,占用数据总线。之后发送起始位,表示发送的开始。然后发送一个字节的数据,7位的从机地址,1位的数据方向(0代表主写给从,1代表主读取从)。对应地址的从设备应答主设备,相当于建立起了连接。然后就是发送端发送数据,接收端收取数据并给出应答。当不应答时,代表不在发送接收数,然后主设备发送停止位,让出总线占用权。

        还有一种特殊的时序,也就是主机先发给从机数据,然后接收从机发送的数据,原理和上述类似,唯一的区别是,在第一次数据方向转换时,没有额外发送P停止位,这是因为我只是转换数据收发方向,倘如发送P停止位让出总线,可能出现抢不到总线的可能。所以不需要发送P停止位来让出总线使用权。 

图5-3 IIC特殊时序图 

        I2C优势:

  1. 灵活性:I2C总线可以连接多个设备,包括数字传感器、LCD显示屏、EEPROM存储器、温度传感器等。此外,I2C总线还支持多种速率和许多传输特性,使其成为数字电路设计中重要的通讯方式之一。

  2. 简化硬件设计:I2C总线只需要两条线(SCL和SDA),相比于并行总线和其他串行总线,具有更简化的硬件设计和布局。

  3. 应答应答块(ACK/NACK):在I2C总线上发送数据时,每个从设备都有一个应答位,成功接收数据后返回ACK(肯定应答),否则返回NACK(否定应答)。这意味着主设备可以知道数据是否正确地传输到了从设备上。

  4. 高度可靠性和可扩展性:I2C总线具有高度可靠性和可扩展性,可以轻松添加新设备,修改和添加功能。

  5. 具有独特的逻辑结构:I2C总线的逻辑结构是一个主从关系,主设备控制传输速度和发起通讯操作,而从设备只有在被查询后才会发送数据。

6、SPI

        SPI协议支持全双工通信,使用一个时钟信号和多个数据线进行数据传输。

        SPI总共有4根总线,分别是:设备选择线(一对一时可舍去)、时钟线、串行输出数据线、串行输入数据线。

  • MOSI:主器件数据输出,从器件数据输入
  • MISO:主器件数据输入,从器件数据输出
  • SCLK :时钟信号,由主器件产生
  • /SS:从器件使能信号,由主器件控制(片选)

         SPI支持主从模式,而且支持一对多的模式,也就是一个主设备可以片选多个从设备。并且使用不同的数据线来进行数据收发,这意味着可以同时发送和接收数据。

图6-1 SPI接线结构 

SPI总线协议:

起始信号: NSS信号线由高变低,是SPI通讯的起始信号 (NSS是片选信号,使能信号)。

结束信号:NSS信号由低变高,是SPI通讯的停止信号。

数据传输:SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据高位在前低位在后,且数据输入输出是同时进行的。SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

图6-2 SPI数据帧格式

SPI有四种通信模式,根据极性和相位划分如下:

时钟极性CPOL : 设置时钟空闲时的电平

当CPOL = 0 ,SCK引脚在空闲状态保持低电平;

当CPOL = 1 ,SCK引脚在空闲状态保持高电平。

时钟相位CPHA :设置数据采样时的时钟沿

当 CPHA=0 时,MOSI或 MISO 数据线上的信号将会在 SCK时钟线的奇数边沿被采样

当 CPHA=1时, MOSI或 MISO 数据线上的信号将会在 SCK时钟线的偶数边沿被采样

以下图6-3、6-4分别为相位确定的情况下,极性不同的四种模式 。

 图6-3 相位确定为0

图6-4 相位确定为1

       

         SPI优势:

  1. 简单易用:SPI协议相对简单,易于实现和使用。它不需要复杂的协议栈和编码/解码过程,硬件和软件实现都相对容易。

  2. 高带宽:SPI通信速率可以高达几百Mbps,适用于快速传输大量数据的应用。与其他串行协议相比,SPI传输速度更快。

  3. 可扩展:SPI的主从架构支持多个从设备,主设备可以向多个从设备发送指令和接收数据。这使得SPI适用于具有多个外设(如存储器和传感器)的嵌入式系统。

  4. 可靠稳定:SPI采用同步传输方式,具有较高的抗干扰能力,可在噪声环境下稳定运行。SPI也支持进行错误检测和处理,提高了控制和数据传输的可靠性。

  5. 低成本:SPI需要少量的引脚和组件,因此可以降低成本,并节省PCB板面积和开发时间。

  6. 支持全双工通信:SPI是一种全双工协议,可以同时进行数据发送和接收。这意味着主设备可以在发送指令的同时接收来自从设备的响应数据,从而提高总线利用率并减少通信开销。

7、CAN

        CAN(Controller Area Network)是一种常用于实时通信和数据传输的串行通信协议,主要用于在汽车和工业领域中连接各种电子设备和控制单元。CAN协议以其高可靠性、抗干扰能力强和适应复杂网络拓扑等特点而广泛应用。

        CAN协议采用总线结构,即所有节点都通过一个共享的双绞线组成的总线进行通信。每个节点可以同时作为发送者和接收者,且每个节点上连接的设备可以拥有不同的优先级。与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

图7-1 CAN连接图

  

总线结构:

  1. 开环总线结构(Open Loop Bus Topology): 开环总线结构是一种线性的、单向传输的总线连接方式。在开环总线结构中,每个节点都通过总线连接到下一个节点,形成一个环状结构。数据沿着环路单向传输,每个节点依次接收并处理传递过来的数据。这种结构简单、灵活,并且可以支持大量节点,适用于分布式控制系统。然而,由于是线性结构,如果某个节点故障或断开,整个环路将中断,影响通信和数据传输

图7-2 开环总线结构 

  1. 闭环总线结构(Closed Loop Bus Topology): 闭环总线结构是一种环形的、双向传输的总线连接方式。在闭环总线结构中,每个节点都通过总线连接到前后相邻的两个节点,形成一个封闭的环状结构。数据可以同时在两个方向上传输,每个节点都可以接收和转发其他节点发送的数据。闭环总线结构具有更好的冗余性和容错性,即使某个节点故障或断开,数据仍然可以绕行到其他节点。这种结构适用于实时性要求高、可靠性要求较高的系统,例如工业自动化控制系统。

图7-3 闭环总线结构 

帧格式(两种):

标准帧格式

  1. 起始位(Start of Frame):一个低电平信号,表示帧的开始。

  2. 标识符(Identifier):11位二进制数,用于区分不同的消息。标识符的高位包含了消息的优先级等信息。

  3. 远程帧标志(Remote Frame Flag):一个位,用于指示该帧是否为远程帧。如果为0,则表示为数据帧;如果为1,则表示为远程帧。

  4. 预留位(Reserved Bit):一个位,保留供以后使用,目前始终为0。

  5. 数据长度代码(Data Length Code):4位二进制数,表示该帧中包含的数据字节数。

  6. 数据字段(Data Field):0到8个字节的数据,具体长度由数据长度代码决定。

  7. 校验(CRC):16位循环冗余校验码,用于检测数据在传输过程中是否发生错误。

  8. 确认位(ACK Slot):一个位,由接收节点产生,在传输完成后发送给发送节点,用于确认数据的正确接收。

  9. 结束位(End of Frame):一个高电平信号,表示帧的结束。

扩展帧格式

  1. 起始位(Start of Frame):一个低电平信号,表示帧的开始。

  2. 标识符(Identifier):29位二进制数,用于区分不同的消息。标识符的高11位包含了消息的优先级等信息,而低18位用于表示消息的具体内容。

  3. 扩展帧标志(Extended Frame Flag):一个位,用于指示该帧是否为扩展帧。如果为1,则表示为扩展帧;如果为0,则表示为标准数据帧。

  4. 预留位(Reserved Bit):一个位,保留供以后使用,目前始终为0。

  5. 数据长度代码(Data Length Code):4位二进制数,表示该帧中包含的数据字节数。

  6. 数据字段(Data Field):0到8个字节的数据,具体长度由数据长度代码决定。

  7. 校验(CRC):16位循环冗余校验码,用于检测数据在传输过程中是否发生错误。

  8. 确认位(ACK Slot):一个位,由接收节点产生,在传输完成后发送给发送节点,用于确认数据的正确接收。

  9. 结束位(End of Frame):一个高电平信号,表示帧的结束。

        CAN优势:

  1. 高可靠性:CAN协议采用差分信号传输方式,使得传输过程中的电磁干扰较小,可以有效减少数据传输中的错误率。此外,CAN协议还提供了多重检测和纠错机制,如CRC校验、ACK应答等,可以更加可靠地保证数据传输的正确性,降低系统故障率。

  2. 实时性:CAN协议具有高实时性,能够满足多种应用场景的实时通讯需求。CAN协议使用轮询方式进行通讯,节点之间可以实现快速的数据传输,响应时间短,可以满足高速运动系统的实时控制需求。

  3. 简单高效:CAN协议具有简单、高效的特点,通讯带宽高,传输效率高,传输距离远,同时协议本身的设计也非常灵活,可以根据实际需求选择适合的传输速率和数据格式,扩展性强。

  4. 成本低廉:由于CAN协议的成本较低且易于实现,因此在工业领域和汽车领域得到了广泛应用。同时,由于CAN协议具有开放标准和丰富的产品生态,可以选择多种厂商的芯片及相关配套设备进行搭建,也降低了系统的总成本。

        以上是对于面试需要掌握的知识。每个通信协议都有自己独特的一点,具体开发选择还需要根据情况而定。希望对有所帮助,感谢支持。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐