常见硬件通信协议(UART,SPI,IIC,单总线)

一、通信的分类

        1.并行通信

                传输原理:数据各个位同时传输。(以字节或字节的倍数进行传输)
                优点:速度快。
                缺点:占用引脚资源多。传输成本高、传输距离近、抗干扰能力弱(串扰)

                应用领域:一般大量数据传输,并且传输距离较近  如计算机总线

        2.串型通信

                传输原理:数据按位顺序传输。(每一位都占据固定的时间长度)

                优点:占用引脚资源少。(最少一根线)、传输成本低、传输距离远

                缺点:速度相对较慢

                应用领域:一般用于工控设备、测量设备、少部分通信设备  USB  COM口

二、通信的方式

        1单工(a)

                只能发送或者接收数据,一般只有一根线。比如遥控器,收音机,无线电台

        2.半双工(b)

                在同一时刻,只能接收或者发送,至少有两根线。比如对讲机

        3.双工(c)

                在同一时刻,既可以接收又可以发送,至少有两根线。例,移动电话

三、同步与异步通信

三种通信方式示意图:

根据接收端与发送端的时钟异同又分为同步通信和异步通信。

   1.同步通信

       带时钟同步信号传输。例如:SPI, IIC通信接口。要求通信双方必须使用同一个时钟,相当于发送数据的同时接收数据,同步通信属于连续串行传输数据,一次只传输一帧数据,相比于异步通信而言,传输效率更高,缺点是时钟必须一致。

   2.异步通信

       不带时钟同步信号。例如:UART(通用异步收发器), 单总线;如UART接口属于异步通信,要求通信双方具有发送端和接收端,由于不要求时钟同步,所以在通信的时候,通信双方必须提前约定好通信格式(字符格式)以及通信速率,异步通信以字符为单位进行传输,在传输一个字符的时候会添加起始位和停止位,通过起始位以及停止位来达到同步的功能。

 四、常见通信协议

        示意图

 1.UART(通用异步收发器)

        UART是一种全双工,异步串型通信方式。在发送数据时,将并行数据转换成串型数据来传输;在接收数据时,将串型数据转换成并行数据。可以实现全双工传输和接收。

(1)UART串口通信需要两根信号线,一根用来串口接收,一根用来串口发送。RXD为数据输入引脚,用于数据接收。TXD为数据发送引脚,用于数据发送。GND为接地引脚。

(2)UART在发送或者接收过程中的一帧数据由四部分组成。起始位(低电平),数据位,奇偶校验位和停止位(高电平);

(3)起始位标志着一帧数据的开始,停止位标志着一帧数据的结束,数据位是一帧数据中的有效数据。通常为 5 6 7 8 位。最好是8位


(4)数据校验 :在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity),它们介绍如下:
        A. 奇校验要求有效数据和校验位中"1"的个数为奇数,比如一个8位长的有效数据为:01101001,此时总共有4个"1",为达到奇校验效果,校验位为"1",最后传输的数据将是8位的有效数据加上1位的校验位总共9位。
        B. 偶校验与奇校验要求刚好相反,要求帧数据和校验位中"1"的个数为偶数,比如数据帧:11001010,此时数据帧"1"的个数为4个,所以偶校验位为"0"。
        C. 0校验是不管有效数据中的内容是什么,校验位总为"0",1校验是校验位总为"1"。


(5)波特率:串口异步通讯中由于没有时钟信号(如前面讲解的DB9接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,下图中分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200等。
波特率(bandrate),指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。比如每秒钟可以传输9600个二进制(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600。

(6)硬件流控制
        A.为什么需要流控?
                流控的目的是让串口通信非常可靠,可以保证发送和接收不会漏掉东西。
        B.现在为什么不用流控?
                现在计算机之间有更好更高级(usb、internet)的通讯方式,串口在发送方速率比接收方快的时候流控经基本被废弃了。现在串口的用途更多是用来输出调试信息的。而且现在的硬件已经基本不需要这个了,收发速度完全可以协调得过来

2.单总线(1-wirte)

        1-wirte是种半双工,异步串型通信方式。是Maxim全资子公司Dallas的一项专有技术。是目前多数标准串行数据通信方式,与SPI / I2C不同,它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的。它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。 1-ware单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系统可按照单节点系统操作;而当多个从机位于总线上时,则系统按照多节点系统操作。

3.SPI

         SPI是英语SerialPeripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有 数字信号处理 器和数字信号解码器之间。


(1)SPI是一种高速的,全双工,同步的通信总线,并且在芯片的引脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32F4也有3个SPI接口。


(2)SPI速度:几兆到几十兆不等。TM32F4的SPI功能很强大,SPI时钟最高可以到37.5Mhz,支持DMA,可以配置为SPI 协议或者I2S协议(支持全双工I2S)。


(3)SPI总线接线图:只能一主多从。

(4)数据如何传输:SPI通讯是全双工的,主机通过MOSI在发送1位数据时,主机的MISO也会接收1位数据。发送一个字节数据,相应的会接收到一个字节的数据。

(5)SPI接口一般使用4条线通信:

        
        a.SPI通讯需要四个管脚:
                SCLK(serial clock串行时钟,由主控产生脉冲方波时钟);
                MOSI(master output salve input主机将数据一位一位的传输给从机的数据通道)
                MISO(master input salve output从机将数据一位一位的传输给主机的数据通道)
                CS(chip select,低电平表示选择,高电平表示释放)(并不绝对)
         b. SPI总线可以挂载多个设备,如何区分多个设备呢?

                就是通过CS管脚来进行区分。每一个SPI从设备都对应有一个CS片选脚。主控和SPI从设备进行通信时,首先会将相应的从设备的片选管脚-拉低主设备只能有一个

4.IIC

        IIC(Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。(400000bits ,115200bits) IIC是半双工通信方式。

      (1)可以一主多从 或者多主多从的方式。 多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

      (2)这里要注意IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI。

      (3)IIC一共只有两个总线: 一条是双向的串行数据线SDA,一条是串行时钟线SCL。外围器件的时钟线和数据线都是挂载在IIC总线(由主控芯片提供),并且在空闲状态下所有器件的时钟线(SCL)和数据线(SDA)都被总线的上拉电阻拉高,这样就可以把SDA引脚和SCL引脚设置为开漏模式即可,好处是防止短路。

      (4)如果IIC总线上挂载了多个外围器件,如何与某一个器件进行单独通信?   

                每个挂载在IIC总线上的外围器件都有独立的器件地址,主机发送开始信号后,只需要发送想要通信的设备的地址,如果设备收到地址并且匹配正确,则开始进行单独通信。

     (5)I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

        a. 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

        b. 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

        c. 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据,这个低电平就是ACK信号。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

        这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。

### 各种串行通信协议的区别及应用场景 #### RS232 RS232是一种常见的异步串行通信标准,主要用于短距离数据传输。它的特点是信号电平较高,通常为±12V,适合于点对点通信。然而,由于其较低的抗噪能力和有限的传输距离(一般不超过15米),RS232并不适用于长距离或多节点的应用场景[^1]。 #### RS485 相比之下,RS485支持更远的距离和更高的速度,并能实现多点通信。通过采用差分信号技术,RS485能够有效抵抗噪声干扰,从而在工业环境中得到广泛应用。它可以连接多个设备形成网络结构,最远可达1200米,在实际应用中常用于楼宇自动化、过程控制等领域[^1]。 #### UART UART代表通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),它是许多微控制器内置的一种硬件模块,负责处理字符级别的输入输出操作。尽管UART本身不是一个具体的物理层定义,但它经常被用来描述基于TTL逻辑电平的数据交换方式;当提到具体电气特性时,则可能涉及像RS232或者RS485这样的标准。简单来说,UART提供了基础框架来构建其他类型的串行链接[^1]。 #### SPI (Serial Peripheral Interface) SPI是一个同步全双工通讯总线,设计初衷是为了让MCU其外围器件间快速传递大量信息而设立起来的标准之一。相比起前面几种方法而言,它拥有更快的速度以及更加灵活配置选项——比如可以选择主从模式工作还是双向独立通道运行等等。另外值得注意的是,因为不需要额外握手机制就能维持持续不断的资料流输送关系,所以整体效率非常高。不过缺点也很明显:占用较多GPIO资源并且不适合远程操控场合[^2]。 #### I²C (Inter-Integrated Circuit) 最后介绍IIC(也写作I²C), 它是由Philips公司开发出来的另一种低速率半双工信道形式, 主要应用于同一电路板内部不同芯片间的近距离联系当中. 只需两根导线(SDA/SCL)便足以完成整个系统的搭建任务, 大大简化了布线复杂度的同时还保留了一定程度上的扩展可能性. 对应到消费电子产品领域里头的话, 像显示屏驱动面板或者是温度传感器之类的组件大多都会配备这种接口类型以便其他核心单元相互联结在一起.[^3] ```python # 示例代码展示如何初始化一个简单的I2C通信 import smbus def init_i2c(address): bus = smbus.SMBus(1) # 使用I2C总线编号1 try: bus.write_byte(address, 0x00) # 尝试向指定地址写入字节 return True except Exception as e: print(f"Error initializing I2C device at address {address}: {e}") return False ``` 综上所述,每一种通信协议都有各自的特点适用范围: | 协议名称 | 特点 | 应用场景 | |----------|----------------------------------------------------------------------------------------|-------------------------------------------| | **RS232** | 点对点通信,高电压摆幅 | 计算机外设连接 | | **RS485** | 支持多点通信,强抗扰能力 | 工业控制系统 | | **UART** | 轻量级软件抽象 | 微处理器间基本数据交互 | | **SPI** | 高速同步全双工 | 显示屏、存储卡等高速外设 | | **I²C** | 低成本、少引脚数 | PCB内集成电路元件之间的慢速至中速数据共享 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值