SPI、UART、RS232、RS485、IIC 5种嵌入式经典通信总线协议

一、UART

  UART即通用异步收发器,是一种通用的串行、异步通信总线。该总线有两条数据线,可以实现全双工的发送和接收。在嵌入式系统种常用于主机与辅助设备之间的通信。UART就是串口,也是一种通信协议/总线协议。 电脑上已经逐步没有了,换成了usb,但是在嵌入式领域是最常用的。
  串口通信这种传递高低电平信号的方式很微弱,如果直接用这种信号去通讯的话,非常容易收到干扰,通讯距离是非常短的,所以为了增强串口通信的抗干扰能力,增长通讯距离,一般会加一个电平转换芯片(比如SP3232EEA),将TTL信号转换成232信号

1.通信基础——并行和串行

并行通信

  在通信里面,我们按照每次发送二进制位的个数可以分为并行通信和串行通信,总线上本质传的是电信号。并行通信就是总线在传递数据是可以一次性把数据的多个位一次性传递。总线有八根线,每根线负责传递一味二进制信号。
在这里插入图片描述

串行通信

  数据线只有一根线,数据有八位的话,只能一位一位逐次的传递过去
在这里插入图片描述
  并行通讯的传递速度要比串行通讯快,但是也有缺点:并行总线条数多,浪费资源,布线难度大,不同数据线之间数据传递时会有信号干扰,在嵌入式中使用串行较多。

2.通信基础——单工和双工

  在通信里面,按照数据传输的方向分为单工通信和双工通信
在这里插入图片描述

3.通信基础——比特率

  比特率用于描述串口通信速度,单位是bps(bit per second)
  波特率是单位时间传输了多少码元,是码元传输速率单位,单位是波特(Baud),码元是一个信号能够传输的信息量。
在这里插入图片描述
  如果要传递多个数据就重复上图。串口协议规定,数据线在空闲时必须是高电平,起始位为低电平用于区分空闲信号与传输信号,串口协议固定,由于是串行总线,在发送数据时先发低位,后发高位,可以发5-8位,串口校验使用的是奇偶校验(1表示数据有偶数个1,0表示有奇数个1),(和校验的意思就是校验位为传输数据的和,发送端和接收端进行对比)。校验位可有可无。
  串口通信不能连续发送,每次最多发送一个字节,这样做可以有效避免因双方时钟不同步产生的累计误差,对于SPI和IIC来说属于同步通信,收发双方用一个时钟源,这样自然就不会产生累计误差,所以可以发任意多个字节,而不像串口通信最多发送一个字节。

4.通讯基础——异步和同步

  同步通信要求就手段时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔在发送下一个字节。
  同步通信效率高,异步通信效率较低;同步通信较复杂,双方时钟的润许误差较小;异步通信简单,双方始终可允许一定误差;同步通信可用于点对多点,异步通信只适用于点对点。

5.UART硬件连接

在这里插入图片描述

6.UART控制器

  一般情况下处理器中都会集成UART控制器,我们使用UART进行通信时候只需对其内部的相关寄存器进行设置即可,比如设置使用哪个寄存器,几个停止位,用不用奇偶校验位,采用什么波特率。

串口控制器工作原理介绍:

在这里插入图片描述
  cpu通过总线可以通过transmitter发送数据,也可以通过receiver接收数据,也可以控制串口控制单元,来配置相关寄存器。
  整个串口控制器包括transmitter和receiver两部分,这两部分彼此独立,transmitter负责从处理器向外发送信息,receiver负责从外部接收信息到处理器。从总线角度来说,串口控制器是挂载在APB总线上的,对编程有影响的是:将来计算串口控制器的源时钟时是以APB总线来计算的。
  transmitter由发送缓冲区和发送移位寄存器构成。我们要发送信息时,首先将信息进行编码(一般用ASCII码)成二进制流,然后将一帧数据(一般是8位)写入发送缓冲区(从这里以后程序就不用管了,剩下的发送部分由硬件自动完成),最后发送移位寄存器会自动从发送缓冲区中读取一帧数据,然后自动移位(移位的目的是将一帧数据的各个位分别拿出来)将其发送到Tx通信线上。
  receiver由接收缓冲区和接收移位寄存器构成。当有人通过串口线向我发送信息时,信息通过Rx通信线进入我的接收移位寄存器中,然后接收移位寄存器自动移位并将该二进制位保存入我的接收缓冲区,接收完一帧数据后receiver会产生一个中断给CPU,CPU收到中断后即可知道receiver接收满了一帧数据,就会来读取这帧数据。
  发送缓冲区和接收缓冲区是关键,发送移位寄存器和接收移位寄存器的工作都是自动的,不用编程控制的,所以我们写串口代码就是:首先初始化串口控制器(包括发送控制器和接收控制器),然后要发送信息时直接写入发送缓冲区,要接收信息时直接去接收缓冲区中读取即可。
  串口控制器中有一个波特率发生器,其作用是产生串口发送/接收的时钟节拍。波特率发生器其实就是个时钟分频器,它的工作需要源时钟(从APB总线来),然后内部将源时钟进行分频(需要软件设置寄存器来配置)得到目标时钟,然后再用这个目标时钟产生波特率(由硬件自动完成的)。

FIFO模式及其作用

  典型的串口设计,发送/接收缓冲区只有1字节,每次发送/接收只能处理1帧数据。这样在单片机中没什么问题,但是到复杂SOC中(一般有操作系统的)就会有问题,会导致效率低下,因为CPU需要不断切换上下文。
  解决方案就是想办法扩展串口控制器的发送/接收缓冲区,譬如将发送/接收缓冲区设置为64字节,CPU一次过来直接给发送缓冲区64字节的待发送数据,然后transmitter慢慢发送,发送完再找CPU再要64字节数据。但是串口控制器本来的发送/接收缓冲区是固定的1字节大小的,所有做了个变相的扩展,就是FIFO。CPU先将64字节的数据放到FIFO中,然后启动FIFO模式,FIFO每次会自动往发送缓冲区中添加1字节数据,最后进行移位操作传输数据。
  FIFO,就是first in first out,先进先出。FIFO其实是一种数据结构,这里这个大的缓冲区叫FIFO是因为这个缓冲区的工作方式类似于FIFO这种数据结构。

7.IO操作——轮询、中断、DMA、通道(接受和发送模式设置)

在这里插入图片描述
   (拿取快递为例,轮询方式相当于每隔一段时间去楼下看看快递员来没来;中断方式相当于快递员到了给你打电话,你不用一直等着;DMA相当于快递员直接给你送到家,你不用去快递点。)
   I/O 设备是计算机的重要组成部分,介于处理器与 I/O 设备交互的复杂性,I/O 操作一直是高级语言开发者比较难掌握的一个技术点。
   因为高级语言对 I/O 操作的封装基于操作系统提供的系统函数,而这些系统函数的调用方式又与其硬件层的结构与工作机制息息相关,所以想要彻底搞懂 I/O 操作的那些函数,必须对其基于的底层设备的工作方式有一定的了解。下面我们看一下 I/O 操作演变的过程。

(1). 轮询方式的 I/O 操作

   对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询不比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题,I/O操作的时效性是可以保证的。但是处理器的速度再快,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询会占据CPU相当一部分处理时间,因此程序轮询是一种效率较低的方式,在现代计算机系统中已很少应用。

(2). 中断方式的 I/O 操作

   处理器与 I/O 设备间几个数量级的速度差异是 I/O 操作中存在的重要矛盾,是设备管理要解决的一个重要问题。为了提高整体效率,减少在程序直接控制 I/O 设备与处理器进行数据交互是很必要的。在I/O设备中断方式下,中央处理器与I/O设备之间数据的传输步骤如下:
   ⑴在某个进程需要数据时,发出指令启动输入输出设备准备数据
   ⑵在进程发出指令启动设备之后,该进程放弃处理器,并由操作系统将进程置为阻塞状态,等待相关I/O操作完成。此时,进程调度程序会调度其他就绪进程使用处理器。
   ⑶当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转向预先设计好的中断处理程序,对数据传送工作进行相应的处理。
   ⑷数据准备完成后,OS将阻塞的进程唤醒,将其转入就绪状态。在随后的某个时刻,进程调度程序会选中该进程继续工作。
中断方式的优缺点
   I/O设备中断方式使处理器的利用率提高,且能支持多道程序和I/O设备的并行操作。
   不过,中断方式仍然存在一些问题。首先,现代计算机系统通常配置有各种各样的输入输出设备。如果这些I/O设备都同过中断处理方式进行并行操作,那么中断次数的急剧增加会造成CPU无法响应中断和出现数据丢失现象。
   其次,如果I/O控制器的数据缓冲区比较小,在缓冲区装满数据之后将会发生中断。那么,在数据传送过程中,发生中断的机会较多,这将耗去大量的CPU处理时间。
   这里为了与下一种 I/O 方式进行区分,我们再说一下 I/O 设备的工作方式。我们先来了解一个硬件设备,设备控制器。

2.1 设备控制器

  设备控制器是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理机从繁杂的设备控制事务中解脱出来。设备控制器是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。设备控制器有许多职责,我们只说与本次讲解相关的职责,即数据交换。
   数据交换是指CPU与控制器之间、控制器与设备之间的数据交换。对于前者,是通过数据总线,由CPU并行地把数据写入控制器,或从控制器中并行地读出数据;对于后者,是设备将数据输入到控制器,或从控制器传送给设备。为此,在控制器中须设置数据寄存器。
   我们上面所说的中断,便是设备控制器向处理器发出的中断,可以想象数据交互的过程:
   1. 处理器需要磁盘上的 100M 数据,于是向磁盘处理器发出读取指令,然后进程阻塞,等待数据准备完毕。
   2. 磁盘处理器接收到读取指令,执行寻道/寻址等磁盘操作找到目标数据,将数据读取到磁盘处理器的寄存器中。假设寄存器容量为 1M ,等待寄存器读满后向 CPU 发出中断。
   3. CPU 接收到中断信号,唤醒进程执行数据读取指令,将数据从磁盘控制器的寄存器读取到内存。等待读取完成,没有数据可读取,继续进入阻塞状态。
   4. 磁盘控制器再次将磁盘中的数据读取到寄存器,又是 1M ,再次向 CPU 发送中断。循环往复,直到将 10 M 数据读取完成。
   可以看到,总体的优化思路是通过中断机制,将设备控制器从设备中读取数据到寄存器的时间节省了出来,CPU 不会繁忙等待在这段时间上,可以去做其它有意义的事情。别说,这个思路与锁的实现很相似,是繁忙等待到非繁忙等待的优化,避免了 CPU 的无效运算。
  但是缺点刚刚也讲述的很清楚,频繁的中断会加大 CPU 的压力,尤其是一些设备控制器的寄存器比较小的情况下,一次 I/O 操作中进行中断的频率非常高。另外将数据由设备处理器读取到内核缓冲区的过程 CPU 是全程干预,一个字节一个字节进行读写的,这些操作并没有什么复杂的逻辑,由 CPU 直接处理显得有些浪费资源。

(3). DMA 方式的I/O 操作

  直接内存存取技术是指,数据在内存与I/O设备间直接进行成块传输。该技术基于 DMA 设备,将 CPU 从简单的数据传输工作中解放了出来。
   DMA有两个技术特征,首先是直接传送,其次是块传送。所谓直接传送,即在内存与IO设备间传送一个数据块的过程中,不需要CPU的任何中间干涉,只需要CPU在过程开始时向设备发出“传送块数据”的命令,然后通过中断来得知过程是否结束和下次操作是否准备就绪,当然这里的中断是 DMA 设备向 CPU 发出的而不是设备控制器
   DMA工作过程:
   ⑴当进程要求设备输入数据时,CPU把准备存放输入数据的内存起始地址以及要传送的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器。
   ⑵发出数据传输要求的进行进入等待状态。此时正在执行的CPU指令被暂时挂起,进程进入阻塞状态。进程调度程序调度其他进程占据CPU。
   ⑶输入设备不断地窃取CPU工作周期(或者说与 CPU 争取内存总线),将数据缓冲寄存器中的数据源源不断地写入内存,直到所要求的字节全部传送完毕。
   ⑷DMA控制器在传送完所有字节时,通过中断请求线发出中断信号。CPU在接收到中断信号后,转入中断处理程序进行后续处理。
   ⑸中断处理结束后,CPU返回到被中断的进程中,或切换到新的进程上下文环境中,继续执行。
   DMA与中断的区别
   ⑴中断方式是在设备控制器的数据缓冲寄存器满之后发出中断,由设备控制器发出,要求CPU进行中断处理,而DMA方式则是在所要求传送的数据块全部传送结束时要求CPU 进行中断处理,由 DMA 设备发出。这就极大的减少了CPU进行中断处理的次数。
  ⑵中断方式的数据传送是在中断处理时由CPU控制完成的,而DMA方式则是在DMA控制器的控制下,不经过CPU控制完成的。这就排除了CPU因并行设备过多而来不及处理以及因速度不匹配而造成数据丢失等现象。
   DMA方式的优缺点
  在DMA方式中,由于I/O设备直接同内存发生成块的数据交换,因此I/O效率比较高。由于DMA技术可以提高I/O效率,因此在现代计算机系统中,得到了广泛的应用。许多输入输出设备的控制器,特别是块设备的控制器,都支持DMA方式。
  通过上述分析可以看出,DMA控制器功能的强弱,是决定DMA效率的关键因素。DMA控制器需要为每次数据传送做大量的工作,数据传送单位的增大意味着传送次数的减少。另外,DMA方式窃取了时钟周期,因为其占据了访问内存的数据总线,CPU处理效率降低了,要想尽量少地窃取始终周期,就要设法提高DMA控制器的性能,这样可以较少地影响CPU处理效率。
  总的来说 DMA 是一种比较令人满意的处理方式,通过 DMA 设备的引入将 CPU 从繁重的 I/O 操作中解放了出来。CPU 只需要发送读取请求和获得处理结果,而不需要关注 I/O 操作的具体传输过程。

(4). 通道方式的 I/O

   输入/输出通道是一个独立于CPU的,专门管理I/O的处理机,它控制设备与内存直接进行数据交换。它有自己的通道指令,这些通道指令由CPU启动,并在操作结束时向CPU发出中断信号。输入/输出通道控制是一种以内存为中心,实现设备和内存直接交换数据的控制方式。在通道方式中,数据的传送方向、存放数据的内存起始地址以及传送的数据块长度等都由通道来进行控制。另外,通道控制方式可以做到一个通道控制多台设备与内存进行数据交换。因而,通道方式进一步减轻了CPU的工作负担,增加了计算机系统的并行工作程度。
   按照信息交换方式和所连接的设备种类不同,通道可以分为以下三种类型:
   ⑴字节多路通道
   它适用于连接打印机、终端等低速或中速的I/O设备。这种通道以字节为单位交叉工作:当为一台设备传送一个字节后,立即转去为另一它设备传送一个字节。
   ⑵选择通道
   它适用于连接磁盘、磁带等高速设备。这种通道以“组方式”工作,每次传送一批数据,传送速率很高,但在一段时间只能为一台设备服务。每当一个I/O请求处理完之后,就选择另一台设备并为其服务。
   ⑶成组多路通道
   这种通道综合了字节多路通道分时工作和选择通道传输速率高的特点,其实质是:对通道程序采用多道程序设计技术,使得与通道连接的设备可以并行工作。
   在通道控制方式中,I/O设备控制器(常简称为I/O控制器)中没有传送字节计数器和内存地址寄存器,但多了通道设备控制器和指令执行部件。CPU只需发出启动指令,指出通道相应的操作和I/O设备,该指令就可启动通道并使该通道从内存中调出相应的通道指令执行。一旦CPU发出启动通道的指令,通道就开始工作。I/O通道控制I/O控制器工作,I/O控制器又控制I/O设备。这样,一个通道可以连接多个I/O控制器,而一个I/O控制器又可以连接若干台同类型的外部设备。由于通道和控制器的数量一般比设备数量要少,因此,如果连接不当,往往会导致出现“瓶颈”。故一般设备的连接采用交叉连接,这样做的好处是:
   ① 提高系统的可靠性:当某条通路因控制器或通道故障而断开时,可使用其他通路。
   ② 提高设备的并行性:对于同一个设备,当与它相连的某一条通路中的控制器或通道被占用时,可以选择另一条空闲通路,减少了设备因等待通路所需要花费的时间。
   通道处理机
   通道相当于一个功能单纯的处理机,它具有自己的指令系统,包括读、写、控制、转移、结束以及空操作等指令,并可以执行由这些指令编写的通道程序。
  通道的运算控制部件包括:
  ① 通道地址字(CAW):记录下一条通道指令存放的地址,其功能类似于中央处理机的指令寄存器。
  ② 通道命令字(CCW):记录正在执行的通道指令,其作用相当于中央处理机的指令寄存器。
  ③ 通道状态字(CSW):记录通道、控制器、设备的状态,包括I/O传输完成信息、出错信息、重复执行次数等。
  通道一般需要与主机共享同一个内存,以保存通道程序和交换数据。通道访问内存采用“周期窃用”,方式。采用通道方式后,输入/输出的执行过程如下:
   CPU在执行用户程序时遇到I/O请求,根据用户的I/O请求生成通道程序(也可以是事先编好的)。放到内存中,并把该通道程序首地址放入CAW中。
   然后,CPU执行“启动I/O”指令,启动通道工作。通道接收“启动I/O”指令信号,从CAW中取出通道程序首地址,并根据此地址取出通道程序的第一条指令,放入CCW中;同时向CU发回答信号,通知“启动I/O”指令完成完毕,CPU可继续执行。
   通道开始执行通道程序,进行物理I/O操作。当执行完一条指令后,如果还有下一条指令则继续执行;否则表示传输完成,同时自行停止,通知CPU转去处理通道结束事件,并从CCW中得到有关通道状态。总之,在通道中,I/O运用专用的辅助处理器处理I/O操作,从而减轻了主处理器处理I/O的负担。主处理器只要发出一个I/O操作命令,剩下的工作完全由通道负责。I/O操作结束后,I/O通道会发出一个中断请求,表示相应操作已完成。
   通道的思想是从早期的大型计算机系统中发展起来的。在早期的大型计算机系统中,一般配有大量的I/O设备。为了把对I/O设备的管理从计算机主机中分离出来,形成了I/O通道的概念,并专门设计出I/O通道处理机。I/O通道在计算机系统中是一个非常重要的部件,它对系统整体性能的提高起了相当重要的作用。不过,随着技术不断的发展,处理机和I/O设备性能的不断提高,专用的、独立I/O通道处理机已不容易见到。但是通道的思想又融入了许多新的技术,所以仍在广泛地应用着。由于光纤通道技术具有数据传
   输速率高、数据传输距离远以及可简化大型存储系统设计的优点,新的通用光纤通道技术正在快速发展。这种通用光纤通道可以在一个通道上容纳多达127个的大容量硬盘驱动器。显然,在大容量高速存储应用领域,通用光纤通道有着广泛的应用前景。
  对于前三种 I/O 交互方式来说,特点如下:
   1. 都需要 CPU 的介入:轮询方式需要 CPU 完全介入;中断方式需要 CPU 完全介入,但 CPU 在此期间进行非繁忙等待,可以做其它事情;DMA 方式需要 CPU 在传输开始和结束时介入。
   2. 需要的硬件支持:轮询方式只需要最基本的处理器即可;中断方式需要增加中断控制器;DMA 方式需要 DMA 处理器和中断控制器。
   这三种方式适合外设不太多的小型机,对于 I/O 设备多,输入输出繁杂的系统,占用 CPU 时间太多,硬件接口太复杂。通道技术使得 CPU 可以在有限的 I/O 指令下管理众多的外部设备,代替 CPU 控制和管理外设。
  CPU 和 I/O 设备之间增加了设备控制器后 已经可以大大减少CPU 对 I/O 的干涉 ,使得CPU 从繁多的io处理中解脱出来,但是当主机所配置的外设备很多时,CPU 负担还很重,为此 CPU 和设备管理器之间又加入了 I/O 通道 其主要目的是为了建立独立的io操作,不仅使得数据的传送独立于 CPU ,还希望有关 I/O 设备的组织/管理以及结束处理尽量独立,简单一点地说就是找出一种东西可以有简单的数据处理能力来分担 CPU 的任务,使得 CPU 专门来处理那些高级的数据 ,这些的简单的数据的处理就交给这个东西来处理这个东西就是 I/O 通道 ,I/O 通道属于硬件但是有执行简单指令的能力。DMA 控制器也是类似的硬件设备,但 DMA 控制器没有专门的处理器,虽然DMA 无需 CPU 进行外设与内存的数据交换工作,但是这只是减少了 CPU 的负担。因而DMA 中,输入输出的初始化仍然要由 CPU 来完成。
  DMA的好处在于将CPU中断从每个字符中断减少为每个缓冲区中断,从而如果输出字符很多时,能带来可观的性能提升。另一方面,DMA 控制器往往比CPU慢很多,如果DMA 控制器不能全速驱动输出设备或者当等待DMA时CPU经常无其他任务可做,那么Interrupt-Driven I/O或Programmed I/O可能更好。但是,大多数情况下,DMA都是更好的。通道有自己的指令系统,是一个协处理器,一般用在大型计算机系统中(不是大型机)。通道实质是一台能够执行有限的输入输出指令,并能被多台外设共享的小型 DMA 专用处理机。广义上讲,DMA也属于通道。那么 DMA与通道相比
   共同点:都能实现IO设备和内存之间建立数据直传通路;
   不同点:DMA只能实现固定的数据传送控制,而通道有自己的指令和程序,具有更强的独立处理数据输入和输出的能力。DMA只能控制一台或者少数几台同类设备,而一个通道可以控制多台同类或者不同的设备。

8.UART寄存器详解

按照些下图步骤设置相关寄存器。在这里插入图片描述

7.输出重定向问题

对于应用层来说,printf的输出为显卡,然后显示在屏幕上;对于开发板来说,printf的输出为UART串口。在往开发板上移植系统时要注意此时的scanf和printf都是定向到串口。

二、RS232、RS485 协议原理及应用

1.RS232、RS485和UART的关系

这两种总线协议不是像UART和IIC那样是一个单独的协议,这两种协议只是一个物理层和电器层的协议,他们是依赖于串口的,编程的时候(收发器)还是UART,只是说在电气层面进行了一些处理,可以让他的抗干扰能力更强,传输距离更远,提升传输的速度。
在这里插入图片描述
什么是电气特性?包含两个层次,比如连接器,买回来的家电有插头,插座二者都符合国标才能插上,对于串口来说只是规定了下信号怎么发,发送的时序,而没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便;串口只是规定了高电平代表1,低电平代表0,但是高电平是多少低电平是多少并不知道
在这里插入图片描述

2.RS232协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了使发送和接收到的信号时232信号,一般会在处理器外部添加电 路对信号的电平进行转换,一般常用的是MAX232EPE芯片
在这里插入图片描述

3、RS485协议

在这里插入图片描述
232和串口都是点对点,485可以一对多,这些设备之间都可以通过485相互通信,建立起一个设备网络。
在这里插入图片描述
差分信号就是有两根线去描述一个信号,之前就是高电平代表1,GND代表0,这种方式很容易产生共模干扰,现在1和0分别用两根线描述,232最长通讯15米,而485能支持1500米,如果有干扰的话两根线同时受到干扰,所以485一般用双绞线。
在这里插入图片描述
四根线的叫422,一般在使用485的时候分主机和从机,主机的权力比较大,能通过某种机制把从机管理起来,不会出现从机同时使用,主机和从机是在软件上区分的,通过代码逻辑确定的,这种逻辑 可以参考IIC的协议写程序,IIC是规定了谁是主机谁是从机,怎么管理怎么协调总线。
在这里插入图片描述
跟232一样,单片机输出的TTL信号要转成485信号,也同样需要增加电路,用芯片(比如MAX485)将一个信号转换两根线的差分。
在这里插入图片描述
传输速度快是因为抗干扰能力强,能采用很高的波特率。232的这种形式不太好实现组网,而485这种差分的形式很好实现组网,是电气层面的原因,而不是232本身的原因。485和232的编程还是基于串口,需要注意的是485收发不能同时进行,还需要注意这种主从机制。485就是A接A,B接B,232是收接发,发接收。232、485这种叫底层协议,上层协议是自己规定的自己制定的。485在仪器仪表上用的比较多,比如说电表。

三、IIC总线

1.IIC总线原理简介

![在这里插入图片描述](https://img-blog.csdnimg.cn/ced103a77dae47ed8500fb1c5ecd73f7.png
在使用时只需要把芯片的数据线SDA接到总线的SDA,时钟线SCL接到总线的SCL就可以了,非常的方便。
在这里插入图片描述
UART属于点对点的连接方式,一头的RXD接另一端的TXD,IIC不属于点对点的连接方式,是一种多主机总线
在这里插入图片描述
在发送过程中,不允许改变发送器和接受器,在第二步中,采用大端存储,最后一位是0,代表从主机发送给从机,1代表着从机发送给主机,这个确定后,在循环步骤四、五时,主机从机的发送关系不能改变。
在这里插入图片描述

2.IIC总线信号实现

IIC总线主从机之间传输一个字节总共需要四个信号:起始信号、停止信号、主机发送一个字节指明从机地址和法送方向、被寻址的从机发送一个应答信号。
在这里插入图片描述
SCL和SDA在空闲时均为高电平,利用电平变化规律,可以用示波器来检测信号是否正常。
在这里插入图片描述
串口在发送时是先发送低位,在发送高位,IIC先传送最高位。
接下来就是第一个问题: 解决什么时候发送信号,什么时候接收信号。
在这里插入图片描述
在这里插入图片描述
主机发送起始信号和停止信号来确定。
第二个问题:对于一个高电平/低电平信号来说,我怎么知道是几个高电平/低电平
在这里插入图片描述
串口通过波特率来解决这个问题,收发器双方是两个器件,时钟有误差,时间长了会有累计误差,IIC和串口一样,都是通过起始信号来通知接受器准备好接受和发送。
在这里插入图片描述
在这里插入图片描述
这里中间没有发结束信号是因为,主机不想总线使用权被抢走,这样两次操作就可以连着发。
主机的发送模式:
在这里插入图片描述
主机的接收模式
在这里插入图片描述
还有从机接受、从机发送模式,但是作为主控制器来说,很少作为从机使用,一般作为主机,然后控制一些外围器件,比如读取传感器的值。

四、SPI总线

在这里插入图片描述
速度比IIC和串口快,但是比USB和网口慢。SPI和IIC都允许一条总线上挂跟多设备,一般从机是四根线,主机最少四根线,每个从机都要对应一个片选线,IIC允许有多个主机,有仲裁机制,SPI一般只有一个主机,仲裁机制差一些。
CS:chip selete片选
在这里插入图片描述一般从机的写cs是高电平有效,cs杠是低电平有效
在这里插入图片描述
SPI没有起始信号、终止信号、和应答ACK信号,直接发完一个字节发下一个字节。MSB是最高位,LSB是最低位。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个节省时间,一个节省硬件资源

  • 22
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值