嵌入式软件最重要的板块之一通讯协议#互联网没坑了,还能去哪里?#
     点个小赞关注一波,持续更新……    [专栏]嵌入式软件校招笔记(点击跳转)  [知识点] 嵌入式软件开发知识点学习  [知识点] ARM指令集详解  [知识点] 通讯协议(very重要)  [项目] C++高并发Web服务器+个人改进项目详解  [八股] C/C++基础八股  [八股] C/C++进阶八股  [八股] 计算机网络八股  [八股] 操作系统八股  [八股] 嵌入式系统八股  [八股] Linux系统编程八股  [八股] Linux网络编程八股   秋招嵌入式企业面经  一、通讯协议  熟悉至少一种通讯协议及应用方法,UART、SPI、CAN、Modbus、CANopen、 Profibus、 Profinet、 EtherCAT;  熟悉中断机制,I/0控制和常见外设 (UART、SPI、IIC、USB、SD/MMC等) ;  (一) UART通信协议  UART(通用异步收发器),这是用于全双工串行通信的最常见协议。它是设计用于执行异步通信的单个LSI(大规模集成)芯片。该设备将数据从一个系统发送到另一系统。  1. 什么是UART通信协议?  UART是异步,全双工串口总线。它比同步串口复杂很多。有两根线,一根TXD用于发送,一根RXD用于接收。UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置。  UART全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),它通常称作UART,是一种异步收发传输器, 是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(RX 和TX)就可以完成通信过程,因此也称为异步串行通信。  UART它可以实现全双工传输和接收。我们现在可以大概了解什么是UART协议了,那我们下面就应该来详细了解一下它,在这个之前我们先了解一下通信方式的分类,它们是怎样分类的。  2. 通信方式的分类  通信方式是指通信双方之间的工作方式或信号传输方式。  一、串行通信  串行通信我的理解就是它利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。也就是说串行通信它就是只有一个传输线,上面的数据是一个一个通过这个线来传输的。  根据通讯的数据同步方式,又分为同步和异步两种。可以根据通讯过程中是否有使用到时钟信号进行简单的区分。  (一) 同步通信和异步通信  同步通信:在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。  异步通信:在异步通讯中,不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据。例如规定由起始位、数据位、奇偶校验位、停止位等。某些通讯中还需要双方约定数据的传输速率,以便更好地同步 。波特率(bps)是衡量数据传送速率的指标。  (二) 单工和半双工以及全双工  串行通信又称为点对点通信,对于点对点之间的通信,根据数据的传输方向与时间关系,又可分为单工通信、半双工通信及全双工通信三种方式。单工方式:只允许数据按照一个固定的方向传送,在任何时刻都只能进行一个方向的通信,一个设备固定为发送设备,一个设备固定为接收设备。  半双工方式:两个设备之间可以收发数据,但是不能在同一时刻进行,每次只能有一个设备发送,另一个站接收。  全双工方式:在同一时刻,两个设备之间可以同时进行发送和接收数据。  打个比方,单工的这种模式就是,假如说有两个人,其中一个人A 和另一个人B要进行通信,A只能打电话找B,B只能接电话。而B他假如有事的话也只能等着A给他打电话,他不能打打电话给A;也就是说A只能发送数据,B只能接收数据。半双工就是说A他既可以打电话也可以接电话,B也是既可以打电话也可以接电话,但是呢;这两个过程不能同时进行,就是A打电话给B,B接A的电话,这个时间,B是不可以给A打电话的,必须得等到这个过程结束才可以。全双工模式那我们就很好理解了,就是A在打电话的同时还能接B的电话,B在接A电话时还能给A打电话,也就是说它们可以同时进行了;全双工和半双工的区别就是可不可以同时发送和接收数据。  二、并行通信  并行通信:利用多条传输线将一个数据的各位同时传送。  3. UART协议具体介绍  一、UART数据传输的格式  数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。      其中各位的意义如下:  起始位:先发出一个逻辑”0”信号,表示传输字符的开始;  数据位:可以是5~8位逻辑”0”或”1”;如ASCII码(7位),扩展BCD码(8位);小端传输,即LSB先发,MSB后发;  校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验);  停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平(用于双方同步,停止位时间间隔越长,容错能力越强);  空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送;  注意:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)。    起始位:UART数据传输线在空闲状态时时保持高电平。当主机先发出一个逻辑”0”的信号时,表示传输数据的开始。  数据位:可以选择的值有5,6,7,8这四个值,可以传输这么多个值为0或者1的bit位。这个参数最好为8,因为如果此值为其他的值时当你传输的是ASCII值时一般解析肯定会出问题。理由很简单,一个ASCII字符值为8位,如果一帧的数据位为7,那么还有一位就是不确定的值,这样就会出错。  校验位:在串口通信中一种简单的检错方式。有下面四种检错方式:偶校验、奇校验、高校验和低校验。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用1bit确保传输的数据有偶个或者奇个逻辑高位。奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。校验位其实是调整个数,串口校验分几种方式:停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。  数据传输速率数据的传输速率用波特率表示,即每秒钟传输的的二进制位数。每秒传输的字符数乘以位数即为波特率。只要传输的信号是二进制的,波特率与比特率的概念就是相同的。  二、波特率和比特率的区别  1.1 波特率:波特率(Baud Rate)指的是每秒传送的信号变化次数。它表示了一个数字信号传输中的速度,通常以波特(baud)为单位来衡量。波特率决定了信息传输的速度和可靠性。  1.2 比特率:比特率(Bit Rate)指的是每秒传送的比特数。比特率是指数据信号的速度,也称为位速或传输速率。比特率通常以比特每秒(bps)为单位来衡量。比特率决定了信号传输的容量和速率。1、波特率就是每秒传输多少符号2、比特率就是每秒传输多少比特。二进制一个符号所含信息量为1比特,因此二进制下波特率=比特率。 计算机处理的都是二进制数,在这个环境下波特率和比特率都一样。  波特率和比特率的主要区别在于它们衡量的对象不同。波特率是衡量数字信号的变化速度,而比特率是衡量数据信号的传输速率。波特率关注的是信号变化的次数,比特率关注的是数据传输的速率。另外,波特率通常用于模拟通信中,而比特率通常用于数字通信中。  波特率和比特率是通信领域中重要的概念。波特率指的是每秒传送的信号变化次数,而比特率指的是每秒传送的比特数。尽管在理想情况下两者相等,但实际应用中,波特率可以大于比特率。了解波特率和比特率的定义、关系和区别,有助于我们更好地理解数字和模拟通信中的数据传输速度和效率。  三、UART电平标准  UART使用标准的TTL/CMOS逻辑电平(0-5v,0-3.3v,0-2.5v或0-1.8v)来表示数据,1表示高电平,0表示低电平。为了提高抗干扰能力、提高传输的距离,通常也会TTL/CMOS逻辑电平转换为RS-232逻辑电平,3-15表示0,-3~-15V表示1。  举个例子,对于传输数据0x55,即二进制的01010101,RS232和TTL的区别如下:  四、UART工作原理  发送数据过程:空闲状态,线路处于高电平;当收到发送指令后,拉低线路的一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位,一帧数据发送完成。  数据接收过程:空闲状态,线路处于高电平;当检测到线路的下降沿(高电平变为低电平)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备接收数据或存入缓冲。  由于UART是异步传输,没有传输同步时钟,为了保证数据的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误吗。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。  UART的接收数据时序为:当检测到数据的下降沿时,表明线路上有数据进行传输,这是计数器CNT开始计数,当计数器为24=16+8时,采样的值为第0位数据;当计数器的值为40时,采样的值为第一位数据,依次类推,进行后面6个数据的采样。如果需要进行奇偶校验,则当计数器的值为152时,采样的值即为奇偶位;当计数器的值为168时,采样的值为“1”表示停止位,数据接收完成。  一个标准的10位异步串行通信协议(1个起始位、1个停止位和8个数据位)收发时序,如下图所示:    4. UART的优缺点  优点:1、通信只需要两条数据线。2、无需时钟信号。3、有奇偶校验位,方便通信的差错检查。4、只需要接收端和发送端设置好数据包结构,即可稳定通信。缺点:1、传输速率较低。2、接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。3、传输距离有限,数据帧最大支持9位数据。  UART(通用异步收发器)是一种常见的设备间通信协议,它的工作原理是将传输数据的每个二进制位一位接一位地传输。然而,UART的效率可能会相对较低,主要原因如下:     串行传输:UART使用串行通信,即数据通过单条线路或导线逐位传输。这意味着数据必须一个接一个地发送,而不是像并行通信那样同时发送。这可能会降低数据传输的速度。   起始位和停止位:UART协议规定,每个字符的开始和结束都需要一个起始位和一个或多个停止位。这些额外的位会占用传输时间,从而降低了有效数据的传输速率。   奇偶校验:为了检测数据传输过程中可能出现的错误,UART通常会使用奇偶校验。这需要额外的校验位,进一步减少了有效数据的传输速率。   异步通信:UART是异步通信协议,这意味着发送器和接收器之间没有共享的时钟信号来同步数据。因此,两个设备必须事先约定好相同的波特率(即每秒钟传送的二进制位数)。如果两台设备的波特率有所不同,可能会导致接收错误。   长距离通信:在长距离通信中,电磁干扰和线路阻抗可能会导致数据错误,从而需要重发数据包,这也会降低UART的效率。    尽管UART在某些方面效率较低,但其优点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信。此外,由于其设计简单和易于实现,UART在嵌入式系统中仍然广泛使用。  (二) I2C 通信协议  【总线】I2C 通信协议  1. 什么是I2C  IIC(Inter-Integrated Circuit)也称I2C,中文叫集成电路总线。是一个多主从的串行总线,由飞利浦公司发明的通讯总线,属于半双工同步传输类总线,仅由两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA,IIC总线要求每个设备SCL/SDA线都是漏极开路模式,因此必须带上拉电阻才能正常工作。I2C协议占用引脚少,硬件实现简单,可扩展性强,I2C数据传输速率有标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。  IIC使用两根信号线进行通信:一根时钟线SCL,一根数据线SDA。IIC将SCL处于高时SDA拉低的动作作为开始信号,SCL处于高时SDA拉高的动作作为结束信号;传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。    一、I2C的特点和优势  总线上可以连接多个IIC通讯设备,支持多个通信主机及多个通信从机。  双线制:I2C使用两根信号线进行通信,包括时钟线(SCL)和数据线(SDA)。  多从机:多个从机设备可以连接到同一条I2C总线上,每个从机都有唯一的地址。  每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。   多主机:多个主机设备可以通过I2C总线进行并行通信,通过仲裁机制实现多主机冲突的解决。  简单和灵活的连接:I2C协议使用统一的总线结构,可以方便地连接各种设备,减少硬件复杂性。  三种传输模式:标准模式为100kbit/s ,快速模式为400kbit/s ,高速模式下可达3.4Mbit/s,但目前大多I2C 设备尚不支持高速模式。  总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。  二、缺点     数据传输速率比 SPI 慢   数据帧的大小限制为8位   需要实现比SPI更复杂的硬件    三、总线结构  I2C总线由两根信号线组成:     时钟线(SCL):由主机设备控制,用于同步数据传输的时钟信号。   数据线(SDA):用于在主机和从机之间传输数据    四、时钟信号和数据信号  I2C通信是基于时钟信号和数据信号的同步传输。数据的传输和接收都在时钟信号的边沿进行。  在数据传输过程中,主机设备产生时钟脉冲,时钟信号决定了数据传输的速率。数据线上的数据信号(SDA)在时钟信号的上升沿和下降沿进行传输。  五、主机和从机角色  在I2C通信中,有两种主要角色:     主机(Master):负责控制总线和启动通信的设备。   从机(Slave):响应主机的命令和传输数据的设备。    主机设备是总线的控制者,它发起通信并控制时钟信号。从机设备接收主机的命令,并在合适的时机发送数据给主机。  六、I2C通信过程  I2C通信包括起始条件、地址传输、数据传输和停止条件等步骤。  在I2C 器件开始通信(传输数据)之前,串行时钟线 SCL 和串行数据线SDA 线由于上拉的原因处于高电平状态,此时I2C总线处于空闲状态。     主机发送起始信号启用总线,开始通信   主机发送一个字节数据指明从机地址与后续字节的传送方向   对应的从机应答   发送器发送一个字节的数据   接收器应答   数     七、地址传输和应答  在起始条件之后,主机发送从机的地址和读写位。地址包括7位或10位,取决于设备的寻址模式。最高位是读/写位,用于指示主机的读写操作。  主机发送地址后,从机设备通过SDA线发送应答信号。应答信号是一个低电平,表示从机接收到地址并准备好进行数据传输。  八、数据传输和应答  在地址传输和应答之后,主机和从机之间进行数据传输。     主机向从机写入数据:主机发送数据字节到SDA线,然后等待从机发送应答信号。   主机从从机读取数据:主机接收从机发送的数据字节,并发送应答信号。    每个数据字节的传输后都需要接收方发送应答信号。应答信号是一个低电平,表示接收方已成功接收数据。  我们在起始信号之后,主机开始发送传输的数据;在串行时钟线 SCL 为低电平状态时,SDA 允许改变传输的数据位(1 为高电平,0 为低电平),在SCL 为高电平状态时,SDA 要求保持稳定,相当于一个时钟周期传输 1bit 数据,经过8 个时钟周期后,传输了 8bit 数据,即一个字节。第8 个时钟周期末,主机释放SDA 以使从机应答,在第 9 个时钟周期,从机将 SDA 拉低以应答;如果第 9 个时钟周期,SCL 为高电平时,SDA 未被检测到为低电,视为非应答,表明此次数据传输失败。第 9 个时钟周期末,从机释放 SDA 以使主机继续传输数据,如果主机发送停止信号,此次传输结束。我们要注意的是数据以8bit 即一个字节为单位串行发出,其最先发送的是字节的最高位。    2. I2C协议详解  使用I2C,数据在消息中传输。 消息被分解为数据帧。每条消息都有一个地址帧,其中包含从机的二进制地址,以及一个或多个包含正在传输的数据的数据帧。该消息还包括每个数据帧之间的开始和停止条件、读/写位和 ACK/NACK 位:    启动条件:SCL线路从高电平切换到低电平之前,SDA线路从高电平切换到低电平。  停止条件:SCL线路从低电平切换到高电平后,SDA线路从低电平切换到高电平。  地址帧:每个从机唯一的 7 位或 10 位序列,当主机想要与其通信时,该序列标识从机。  读/写位: 指定主机是向从机(低电平)发送数据还是从中请求数据(高电平)的单个位。  ACK/NACK 位:消息中的每个帧后跟一个确认/不确认位。如果成功接收地址帧或数据帧,则从接收方向发送方返回 ACK 位。  一、帧结构  I2C协议中的数据传输是按字节为单位进行的。每个字节由8个位组成,包括7位数据和1位应答位。     主机发送字节时,从高位到低位逐位传输数据。   从机接收字节时,从高位到低位接收数据。    二、传输速率和时钟频率  I2C协议支持不同的传输速率,通常称为时钟频率。常见的时钟频率有100 kHz、400 kHz和1 MHz等。  时钟频率由主机设备控制,它决定了数据传输的速率。时钟频率越高,数据传输速度越快,但也会增加总线负载和干扰的风险。  三、寻址  I2C没有像SPI那样的从属选择线,因此它需要另一种方式让从机知道数据正在发送给它,而不是另一个从机站。它通过寻址来做到这一点。地址帧始终是新消息中起始位之后的第一个帧。  主机将它想要与之通信的从机的地址发送给连接到它的每个从机。然后,每个从机将从主机发送的地址与其自己的地址进行比较。如果地址匹配,则将低电平ACK位发送回主机。如果地址不匹配,则从机不执行任何操作,并且 SDA 线路保持高电平。  四、7位地址和10位地址模式  I2C协议中使用7位或10位地址来寻址从机设备。     7位地址模式:主机和从机使用7位地址来寻址,可以支持最多128个从机设备。   10位地址模式:主机和从机使用10位地址来寻址,可以支持最多1024个从机设备。    五、读操作和写操作  地址帧在末尾包含一个位,通知从机是要向其写入数据还是从中读出数据。如果主机要向从机写数据,读/写位为低电平。如果主站从从站读数据,则该位为高电平。  主机设备可以向从机设备发送写操作或读操作。     写操作:主机向从机发送数据。   读操作:主机从从机读取数据。    在地址传输中,读/写位指示主机的读写操作。  3. IIC协议番外篇  IIC总线的SDA和SCL两根总线需要上拉,使总线处于空闲状态。IIC总线一共有两种状态、四种信号。除此之外还需要了解IIC总线的数据有效性。  一、IIC总线物理接线  SDA 和SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压。当总线空闲时,这两条线路都是高电平。连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。  总线器件数目:由于每一个IIC器件在IIC总线上都有一个确切的7位地址码,这也意味着一条IIC总线上最多可链接127(0X00位地址不使用)个地址互不相同的IIC器件。但在单条IIC总线上链接不多与127个器件的同时,必须要满足总线电容不能超过400pF(协议规定),总线之所以规定电容大小是因为,IIC的OD要求外部有电阻上拉,电阻和总线电容产生了一个RC延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险。传输速度越快,信号的窗口就越小,上升沿下降沿时间要求更短更陡峭,所以RC乘积必须更小。实际设计中经验值大概是8个器件左右。    二、IIC协议时序  IIC时序图:  (一) 数据有效性  IIC总线进行数据传送时,在SCL的每个时钟脉冲期间传输一个数据位,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,只有在时钟线SCL上的信号为低电平期间,数据线SDA上的高电平或低电平状态才允许变化,因为当SCL是高电平时,数据线SDA的变化被规定为控制命令(START或STOP,也就是起始信号和停止信号)。  (二) 空闲状态(IDLE)  IDLE表示总线空闲状态。此状态下时钟信号SCL和数据信号SDL均为高电 平,此时无I2C设备工作。时钟线(SCL)和数据线(SDA)接上拉电阻,默认高电平,就是为了表示总线是空闲状态。  (三) 起始信号(START)  表示起始状态。在空闲状态下,时钟信号SCL继续保持高电平,数据信号SDL出现由高电平转换为低电平的下降沿,此时产生一个起始信号,与总线相连的I2C设备检测到起始信号之后,进入起始状态等待控制字节的输入。  (四) 停止信号(STOP)  I2C通信的停止信号由主设备发出,SCL保持高电平,SDA由低电平跳变到高电平。  (五) 应答(ACK)与非应答(NACK)  应答信号接收端收到有效数据后需要向对方响应的信号,发送端每发送一个字节(8位)数据,在第9个时钟周期释放数据线去接收对方的应答。在第9个时钟周期:当SDA是低电平为有效应答(ACK),表示对方接收成功;当SDA是高电平为无效应答(NACK),表示对方没有接收成功。注意:数据发射端需要在第9个时钟周期等待接收端的应答信号。  (六) 数据读写操作  IIC协议的读写操作都是一字节大小,从高到低收发数据。  4. IIC主设备与从设备的通信过程  一、主设备给从设备发送/写入数据:     主设备发送起始(START)信号   主设备发送设备地址到从设备   等待从设备响应(ACK)   主设备发送数据到从设备,一般发送的每个字节数据后会跟着等待接收来自从设备的响应(ACK)   数据发送完毕,主设备发送停止(STOP)信号终止传输    二、主设备从从设备接收/读取数据     设备发送起始(START)信号   主设备发送设备地址到从设备   等待从设备响应(ACK)   主设备接收来自从设备的数据,一般接收的每个字节数据后会跟着向从设备发送一个响应(ACK)   一般接收到最后一个数据后会发送一个无效响应(NACK),然后主设备发送停止(STOP)信号终止传输注意:在使用IIC通讯的时候注意按照芯片通讯规则编写。    5. I2C的应用领域  I2C通信协议在各种应用领域都得到了广泛的应用,包括但不限于以下方面:  一、传感器接口  I2C通信协议常用于与各种传感器进行接口通信,例如温度传感器、湿度传感器、光传感器等。通过I2C总线,主机设备可以读取传感器的数据,并进行相应的控制和处理。  二、存储器接口  许多存储器设备(如EEPROM、Flash存储器)也采用了I2C通信协议作为数据传输的接口。主机设备可以通过I2C总线与存储器设备进行数据的读写操作。  三、显示设备接口  I2C通信协议也广泛用于与显示设备进行接口通信,如LCD显示屏、OLED显示屏等。通过I2C总线,主机设备可以向显示设备发送指令和图像数据,实现图形显示的功能。  四、扩展IO接口  除了传感器、存储器和显示设备接口外,I2C通信协议还被用作扩展IO接口的一种方案。通过连接扩展IO芯片,主机设备可以扩展更多的输入输出端口,实现与外部设备的连接和控制。  通过使用I2C协议,各种外设可以通过简单的两根线进行连接,减少了硬件复杂性和引脚数量,提供了更灵活和简洁的系统设计方案。  6. 常见的I2C设备和应用  I2C通信协议广泛应用于各种设备和领域。以下是一些常见的I2C设备和应用示例:     EEPROM和存储器芯片:用于数据存储和读写操作。   温度传感器和湿度传感器:用于测量环境温度和湿度。   LCD显示屏和OLED显示屏:用于文本和图形显示。   扩展IO和控制芯片:用于扩展输入输出端口和外设控制。    这些只是一些常见的应用示例,实际上,I2C通信协议可以用于更多不同类型的设备和应用,根据具体需求选择合适的I2C设备。  7. 总结  I2C(IIC)是一种常用的 ,用于在电子设备之间进行数据交换。它采用双线制、支持多主机和多从机的通信,并且具有简单灵活的连接特性。I2C通信包括起始条件、地址传输、数据传输和停止条件等步骤,通过时钟信号和数据信号进行同步传输。多主机通信通过仲裁机制解决主机冲突,并实现并行数据传输。I2C通信在各种领域都得到了广泛的应用,包括传感器接口、存储器接口、显示设备接口和扩展IO接口等。在设计和使用I2C通信时,需要考虑电源和电平要求、总线负载和电流限制、I2C设备的选择和配置、抗干扰和线长限制等因素。  (三) CAN总线协议  1. 总体概述  一、基本概念  CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在北美和西欧,CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。  二、通讯方式   回顾前面学到的 RS232 IIC SPI RS485 等通信  UART:(Universal Asynchronous Receiver Transmitter:通用异步收发器/异步串行通信口),是一种通用的串行数据总线,用于异步通信,支持全双工。它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。IIC总线协议:I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。SPI总线协议:SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。RS232接口缺陷:(1)接口的信号电平值较高( +/-12V),易损坏接口电路的芯片。(2)传输速率较低,在异步传输时,波特率为20Kbps。(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。(4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。RS485是对RS232的改进,特点包括:①接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2 ~ 6)V表示,逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片。②传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输速度可达100Kbps。③抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。④传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。  CAN总线通信系统是串行通信的一种,要优于RS485总线,是目前比较常用的一种工业总线,如汽车的电气部分就采用CAN总线实现通信。  与I2C、SPI等具有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步半双工通讯。(同步即在同一个时钟驱动下数据通信,半双工即接受与发送不能同时进行)    三、为什么使用CAN?  汽车工业蓬勃发展,汽车的电子控制单元逐渐增多。各电控单元之间的信号交换导致汽车线束的级数增加,复杂粗大的线束与汽车有限的布线空间之间矛盾越来越突出,繁多的线束导致电气系统可靠性下降,同时增加了重量。  CAN总线将汽车内部各电控单元之间连接成一个局域网络,实现了信息的共享,大大减少了汽车的线束,如下面的示意图:      比如上图中,每个部分的多个器件都挂载在CAN总线上(一个CAN总线上的所有器件通讯速率必须相同),各个部分再汇集到网关,由网关分配实现各个不同速率的部分之间通讯,这样就很方便轻松实现了对汽车整体电
点赞 11
评论 8
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务