协议集合(学习笔记)

2024-09-06 22:52
文章标签 学习 协议 笔记 集合

本文主要是介绍协议集合(学习笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

按照数据的传送方式,通信协议可分为以下2种。

串行通信:串行(Serial)指的是逐个传输数据位,一次只传输一个位。

并行通信:并行(Parallel)指的是同时传输多个数据位,一次可以传输多个位。

按照消息传送的方向与时间关系,通信协议可分为以下3种。

单工通信:单工通信(Simplex Communication)是指消息只能单方向传输的通信方式。

在单工通信中,发送端与接收端是固定的,即发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。

半双工通信:半双工通信(Half-duplex Communication)中的“双工”表示通信的双方都可以发送信息,而“半”表示双方不能同时发送或同时接收信息,即对于同一个设备,同一时刻只能发信息或者收信息,不能在发信息的时候又收信息。

在这种工作方式下,发送端可以转变为接收端;接收端也可以转变为发送端。但是在同一个时刻,信息只能在一个方向上传输。因此,也可以将半双工通信理解为一种可以切换方向的单工通信。

全双工通信:通信的双方可以同时发送和接收数据。

按照时钟特性,通信协议可分为以下2种。

同步通信:双方使用频率一致的时钟。发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(如:在时钟信号的上升沿时,将数据发送出去),发送数据;接收端根据发送端提供的时钟信号,以及一定的约定(例如:在时钟信号为低电平时,读取数据),接收数据。

异步通信:收发双方可以有各自自己的时钟,接收方并不知道数据什么时候会到达,发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。

 UART

串口参数

起始位位于数据帧开头,只占 1位,始终为逻辑“0”,必须有。起始位用于表示一个数据帧的开始,起到同步作用。

数据位:紧跟在起始位之后,用于传送数据。用户可根据情况确定为 5、6、7、8 位,低位在前,高位在后。通常采用 8 位数据位,用于传送一字节的数据.

校验位

奇校验码:数据位有奇数个1,奇校验码为0;数据位有偶数个1奇校验码为1。即:奇校验码的加入使得数据位和校验位整体保持奇数个1。

偶校验码:数据位有偶数个1,偶校验码为0;数据位有奇数个1偶校验码为1。即:偶校验码的加入使得数据位和校验位整体保持偶数个1。

停止位

        位于数据的最后,始终为逻辑“1”,必须有。停止位的长度由用户确定,可选择为1位、或 2 位。停止位表示一个数据的结束,也是为发送下一个数据帧做准备,同样也起到了同步的作用。

波特率:是指单位时间内传送二进制数据的位数,单位用bps或b/s(位/秒)表示。

比特率:是衡量异步串行通信的数据传输速率,即单位时间内传送二进制有效数据的位数,单位也用bps或b/s(位/秒)表示。

UART只是对信号的时序进行了定义,而未定义接口的电气特性;

UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异,所以不同的处理器使用UART通信时一般不能直接相连;例如:51单片机与32单片机通信,51单片机高低电平电压为0V,5V。32则为0V,3.3V.

UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便;

总结来说UART存在的问题:
1.抗干扰能力差
UART一般直接使用TTL信号来表示0和1,但TTL信号的抗干扰能力较差,数据在传输过程中很容易出错
通信距离极短
因为TTL信号的抗干扰能力较差,所以其通信距离也很短,一般只能用于一个电路板上的两个不芯片之间的通信

RS232:

RS232协议是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家、计算机终端生产厂家共同制定的用于串行通讯的标准:该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定; 

  1. 接口信号电平高,容易损坏接口电路的芯片。逻辑“1”为-3 ~ -15V;逻辑为“0”:+3 ~ +15V,噪声裕量为2V。也就是说,接收器需要将高于+3V的信号识别为逻辑“0”,将低于-3V的信号识别为逻辑“1”,将5V的TTL电平识别为逻辑正极,将0识别为逻辑负极。与TTL电平不兼容,需要一个电平转换电路来连接到TTL电路。
  2. 接口采用信号线和信号回波串,形成共同的接地传输形式。这种标准的接地传输容易受到共模干扰,因此抗噪性较弱。
  3. 传输距离有限。最大传输距离为50英尺。它只能达到大约15米。

RS485:

RS-485串行总线广泛用于通信距离必须为几十米到几公里的时候。RS-485使用平衡的发射和差分接收,因此可以抑制共模干扰。除了总线收发器的高灵敏度外,它还可以检测低至200mV的电压,从而将发射的信号恢复到公里以上。RS-485使用半双工工作模式,任何时候只发送一个点。因此,发射电路必须由使能信号控制。

RS232 和 RS485 的区别

  • 工作模式:RS232 为全双工,RS485 为半双工。
  • 传输方式:RS485和RS232只是物理协议的通信(即接口标准),RS485是差分传输方式,RS232是单端传输方式,但通信程序没有太大区别。
  • 信号线:RS485接口组成的半双工网络,一般只需二根信号线。RS232 只使用 RXD、TXD、GND 三条线 。
  • 抗干扰性:RS485接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好。RS232接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰。
  • 传输距离:RS485接口的最大传输距离标准值为 1200 米(9600bps 时),实际上可达 3000 米。RS232传输距离有限,最大传输距离标准值为 50 米,实际上也只能用在 15 米左右。
  • 通信能力:RS485 接口在总线上是允许连接多达128个收发器,用户可以利用单一的 RS485 接口方便地建立起设备网络。RS232只允许一对一通信。
  • 传输速率:RS232传输速率较低,在异步传输时,波特率为 20Kbps。RS485 的数据最高传输速率为 10Mbps 。
  • 电气电平值:RS485的逻辑"1"以两线间的电压差为+(2-6) V 表示;逻辑"0"以两线间的电压差为-(2-6)V 表 示 。在 RS-232 中任何一条信号线的电压均为负逻辑关系。即:逻辑"1",-(5-15)V;逻辑"0 " +(5- 15)V 。

 SPI

SPI是一种串行、全双工、同步、单端、点对多的通信协议

一主一从的SPI通信有四根通信线:

SCK/SCLK:串行时钟信号线

MOSI:主机输出从机输入数据线。有时也可以是SOMI,DI(Data Input)(从机端)、SI(Slave Input)(主机端)

MISO:主机输入从机输出数据线。有时也可以是SIMO、DO(Data Output)(从机端)、SO(Slave Output)(主机端)

SS(Slave Select)/CS(Chip Select):从机选择线/片选线,低电平时与相连从机通信

此外,主从设备的参考电压要相同(共地)

对于主机:

输出引脚(SCK、MOSI、SS)配置为推挽输出

输入引脚(MISO)配置为浮空或上拉输入

对于从机:

通信时,输出引脚(MISO)配置为推挽输出,空闲时,输出引脚(MISO)配置为高阻态

输入引脚(SCK、MOSI、SS)配置为浮空或上拉输入

通信过程

1.主机选择从机:主机通过拉低对应从机的SS线选择开始与其通信。

2.主机启动时钟、从机切换MISO模式:主机开始产生SCLK信号,通常从空闲状态开始,并在数据传输期间持续提供时钟信号。从机将MISO由高阻态切换为推挽输出

3.数据交换:

对于主机:

    主机将待发送的数据写入其发送数据缓存区后,先将一个字节的数据复制到移位寄存器。随后,移位寄存器中的数据从高位到低位一位一位地移出到MOSI线上。

同时,主机通过MISO线接收到从机发来的数据,半个时钟周期后,这些数据从高位到低位一位一位地被移入移位寄存器中的。

当移位寄存器移出一个字节的数据时,它同时(严格上讲,差了半个时钟周期)也移入了一个字节的数据,此时移位寄存器中存储的是接收到的数据,这些数据会被存入接收数据缓存区,之后主机发送数据缓存区中的下一个字节的数据会被复制到移位寄存器中,从而进行下一个字节的数据交换,如此循环,直至交换完所有的数据。

对于从机:

从机将待发送的数据写入其发送数据缓存区后,先将一个字节的数据复制到移位寄存器。随后,移位寄存器中的数据从高位到低位一位一位地移出到MISO线上。

同时,从机通过MOSI线接收到从机发来的数据,半个时钟周期后,这些数据从高位到低位一位一位地被移入移位寄存器中的。

当移位寄存器移出一个字节的数据时,它同时(严格上讲,差了半个时钟周期)也移入了一个字节的数据,此时移位寄存器中存储的是接收到的数据,这些数据会被存入接收数据缓存区,之后从机发送数据缓存区中的下一个字节的数据会被复制到移位寄存器中,从而进行下一个字节的数据交换,如此循环,直至交换完所有的数据。

4.完成通信:当所有需要交换的数据都传输完毕后,主机停止产生SCK信号,并将SS线拉高,以结束与当前从机的通信。从机将输出引脚(MISO)配置为高阻态,以避免干扰之后主机与其他从机的通信。

一些说明:

        SPI只能进行数据交换,不能单独进行读或写数据。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节(通常为0x00和0xFF);反之,若主机要读取从机给的一个字节,就必须发送一个字节(通常为0x00和0xFF)来引发从机的传输。

        SPI总线传送完一个字节后无需应答即可开始下一个字节的传送;SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。

iic 

IIC是一种串行、半双工、同步、单端、多对多的通信协议

 can

CAN是一种串行、异步、半双工、差分、多对多的通信协议。主要用于汽车内部电子设备之间的通信。

CAN 的数据帧结构

        在原始数据段的前面加上传输起始标签、片选 (识别) 标签和控制标签,在数据的尾段加上 CRC校验标签、应答标签和传输结束标签,把这些内容按特定的格式打包好,就可以用一个通道表达各种信号了。这些标签起到了协同传输的作用,当整个数据包被传输到其它设备时,只要这些设备按格式去解读,就能还原出原始数据,这样的报文就被称为 CAN 的“帧”。

具体每位:http://t.csdnimg.cn/rLVHt

这篇关于协议集合(学习笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143351

相关文章

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长