当前位置: 首页 > news >正文

通信协议总结

IIC

基本特点

同步,半双工
标准100KHz,最高400KHz(IIC主要应用于低速设备)

硬件组成

需外接上拉电阻

通信过程

空闲状态

SDA和SCL都处于高电平

开始信号S和终止信号P

请添加图片描述

在数据传输过程中,当SCL=0时,SDA才可以跳变;当SCL=1时,SDA必须保持稳定,一旦有电平跳变就代表是起始信号或终止信号。

  • 起始信号S:SCL=1时,SDA由1->0
  • 终止信号P:SCL=1时,SDA由0->1
数据有效性

在这里插入图片描述

在数据传输过程中,当SCL=0时,SDA才可以跳变;当SCL=1时,SDA必须保持稳定,一旦有电平跳变就代表是起始信号或终止信号。

在SCL=1时,SDA数据线稳定,数据有效。

应答信号

每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据

主机将SCL拉高,读取SDA电平:

  • SDA=0,表示有效应答位(ACK),表示从机已成功接收该字节
  • SDA=1,表示非应答位(NACK),表示从机接收该字节失败

每次传输时,接收方都要返回一个ACK给发送方,才能继续数据通信

IIC写数据

请添加图片描述

1.主机发送设备地址(前7位为设备地址,第8位代表W);
2.各从机比对自己的地址,匹配则发送ACK;
3.主机收到ACK,继续发送要访问的寄存器地址;
4.从机成功接收,发送ACK;
5.主机发送DATA。

写AT24C02时序:
在这里插入图片描述

IIC读数据

请添加图片描述

1.主机发送设备地址(前7位为设备地址,第8位代表W);
2.各从机比对自己的地址,匹配则发送ACK;
3.主机收到ACK,继续发送要访问的寄存器地址;
4.从机成功接收,发送ACK;
5.主机重新发送一个S信号,发送设备地址(第8位为R)
6.从机成功接收,发送ACK;
7.从机紧接着返回对应地址寄存器数据,直到主机不在返回ACK。

读AT24C02时序:
在这里插入图片描述

SPI

基本特点

同步、全双工
最高50MKHz

硬件组成

需外接上拉电阻

通信过程

包括主机和从机(可实现一主多从)
主机和从机构成一个环形结构,通过移位寄存器实现串行传输,这就意味着:

  • 写数据:必定会接收到从机的数据,丢弃即可
  • 读数据:必定需要向从机发送无用数据,才能读到需要的数据
    在这里插入图片描述
    在这里插入图片描述
一主多从
  • 多NSS
    在这里插入图片描述

  • 菊花链
    在这里插入图片描述
    数据流向:
    在这里插入图片描述
    所以不难发现,菊花链模式充分使用了SPI其移位寄存器的功能,整个链充当通信移位寄存器,每个从机在下一个时钟周期将输入数据复制到输出。

ISOSPI

在这里插入图片描述

CAN

基本特点

异步、半双工、差分
ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准(闭环,需要添加终端电阻120Ω,用于阻抗匹配,减少回波反射)
IS011519-2是针对通信速率为125Kbps以下的低速通信标准(开环)

硬件组成

CAN控制器、CAN收发器、终端电阻
在这里插入图片描述

电平标准

隐性电平:逻辑1(CAN_RX/TX=3.3v) 电压差=0V(CAN_H=2v,CAN_L=2v)
显性电平:逻辑0(CAN_RX/TX=0v) 电压差=2V(CAN_H=3.5v,CAN_L=1.5v)

通信过程

  1. 空闲状态
    当总线上的上出现连续的11位隐性电平,那么总线就处于空闲状态。

  2. 数据传输
    每次发送数据前,节点都会监听总线的状态,如果总线状态为空闲时,它就会立即向总线上发送自己的数据,这个数据里不仅有数据,还有本身的ID信息或者其他的控制指令,应称为数据包(数据帧),也叫做报文

  3. 仲裁机制(利用线与和回读机制

    以上只是节点1主动发送数据,但是万一节点1和节点2同时向节点3发送数据的时候,如何判定先后呢?采用非破坏性位仲裁机制,即对各个消息的标识符(即ID号)进行逐位仲裁(比较),如果某个节点发送的消息仲裁获胜,那么这个节点将获取总线的发送权,仲裁失败的节点则立即停止发送并转变为监听(接收)状态。

    因为显性电平会覆盖隐性电平,两个节点同时发送报文时,0会将1覆盖(线与),而每个节点在发送完之后都会进行回读操作:如果自己发的1,都回来的却是0,那仲裁失败,进入空闲状态;自己发的和回读的一样则获得总线控制权。( ID:000000 00010 比 000000 00011 的优先级要高)

在这里插入图片描述

  1. 位时序
    can的数据帧中没有用于同步的标志,它的同步是靠位时序实现的。
    在这里插入图片描述
    CAN将一位又分为4段, 同步段(SS)、传播时间段(PTS)、相位缓冲段 1(PBS1)、相位缓冲段 2(PBS2)。分解后最小的时间单位是 Tq,而一个完整的位由 8~25 个 Tq 组成。通过这些段可以计算出CAN的波特率。
    在这里插入图片描述
    同时每一个段又能用来进行数据同步,分为硬同步和重新同步:
  • 硬同步:在帧起始信号时(SOF)同步总线上所有器件的位时序,无法确保后续一连串的位时序都是同步的(可以理解为节点在检测到帧起始信号时才开始“设置段”)

在这里插入图片描述

  • 重新同步:在检测到总线上的时序与节点使用的时序有相位差时(即总线上的跳变沿不在节点时序的 SS 段范围),通过延长 PBS1 段或缩短 PBS2 段,来获得同步。
    在这里插入图片描述

硬同步和重新同步都是使用SS段来检测,而同步的目的就是让SS段把跳变沿包含进来
区别在于:
硬同步是在数据传输开始时(SOF处)设置SS段包含跳变沿,类似于初始化;
重新同步是在数据传输过程中设置PBS段以实现SS段包含跳变沿

数据格式

传输的报文包括数据帧,遥控帧,错误帧,过载帧,帧间隔。

数据帧:
请添加图片描述
数据帧和遥控帧有标准格式和扩展格式两种格式,标准格式有 11 个位的ID,扩展格式有 29 个位的 ID。

  • SOF:联系前文可知,当数据帧发出第一位时(0为显性电位),总线就由空闲状态转为传输状态,同一时间只能允许一个节点传输数据。
  • Identify:接下来的仲裁段有11位,即本数据帧的 ID 信息,决定着数据帧发送的优先级,也决定着其它设备是否会接收这个数据帧,禁止高 7 位都为隐性(禁止设定:ID=1111111XXXX), ID 信息的作用:① 如果同时有多个节点发送数据时,作为优先级依据(仲裁机制);② 目标节点通过 ID 信息来接受数据(验收滤波技术)。这些将在下文提出。
  • RTR:(Remote Transmission Request BIT) 位用于标识是否是远程帧(0,数据帧;1,远程帧),在数据帧里这一位为显性(逻辑 0)。
  • IDE:(Identifier Extension Bit),是用于区分标准格式与扩展格式,在标准格式中 IDE 位为显性,在扩展格式里 IDE 位为隐性。
  • r0:保留位,必须以显性电平发送。
  • DLC:由 4 位组成,MSB 先行(高位先行),它的二进制编码用于表示本报文中的数据段含有多少个字节,DLC 段表示的数字为0到8,若接收方接收到 9~15 的时候并不认为是错误。
  • Data:数据帧的核心内容,它由 0~8 个字节(0 ~ 64位)组成,MSB 先行。
  • CRC:该段用于检查帧传输错误,发送方以一定的方法计算包括:帧起始、仲裁段、控制段、数据段;接收方以同样的算法计算 CRC 值并进行比较,如果不同则会向发送端反馈出错信息,重新发送;计算和出错处理一般由 CAN 控制器硬件完成或由软件控制最大重发数。该段由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)组成,它为隐性位,主要作用是把CRC 校验码与后面的 ACK 段间隔起来。
  • ACK:由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位组成,在 ACK 槽位中,发送端发送的为隐性位,而接收端则在这一位中发送显性位以示应答。在 ACK 槽和帧结束之间由 ACK 界定符间隔开,为隐性位。(发送 ACK/返回 ACK这个过程使用到回读机制,即发送方先在 ACK 槽发送隐性位后,回读到的总线上的电平为显性0,发送方才知道它发送成功了,不用重发)
  • EOF:由发送端发送 7 个隐性位表示结束。

无ACK:
在这里插入图片描述
有ACK:
在这里插入图片描述
在数据帧的拓展格式中,与标准格式不同处在于:

  • 仲裁段为 29 位;
  • 多出的SRR 位(Substitute Remote Request BIT),用于替代标准格式中的 RTR 位。SRR 位为隐性位,由于 RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高;
  • 控制段中的 r1 和 r0 一样都为保留位,默认设置为显性位;
  • 扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性。(禁止设定:基本 ID=1111111XXXX)

位填充
为防止突发错误而设定,CAN协议中规定,当相同极性的电平持续五位时,则添加一个极性相反的位。填充位的添加和删除是由发送节点和接收节点完成的,CAN-BUS只负责传输,不会操纵信号。请添加图片描述

stm32中的CAN

在这里插入图片描述

  • 具有 3 个发送邮箱,发送报文的优先级可以使用软件,可以记录发送的时间;
  • 有 2 个 3 级深度的接收 FIFO,可以使用过滤功能只接收或不接收某些 ID号的报文;
  • 不支持使用 DMA 进行数据收发
  • 可变的过滤器组(最多 28 个)。
接收FIFO

CAN的FIFO用于缓存CAN数据包,最多存放3个。一旦超出3个数据就无法收到新数据,需要及时读出,并释放邮箱。

接收消息分为:

  • 挂起:一旦FIFO有消息挂起位(pending)就会置位
  • 上溢:FIFO满了(最多有3个消息)
    在这里插入图片描述
过滤器组

过滤器用于在数据包送到接收FIFO之前,只接受指定数据,过滤掉不需要的数据。
每个过滤器X(共28个)由两个32位的寄存器组成:CAN_FxR1和CAN_FxR2

过滤器可设置两种筛选方法:

  • 标识符掩码:筛选一组符合条件的报文
    ID:指定ID的报文可进入FIFO中
    掩码:含义是根据CAN_FxR2中哪些位为1,筛选出ID这些位与CAN_FxR1中这些位相同的报文(即0xFFFF0000可筛选出前16位相同的报文)
  • 标识符列表:筛选两个符合条件的报文
    ID:只能筛选出两种指定ID的报文

在这里插入图片描述

DMA

DMA不属于通信协议,但和上述几个通信协议一起记录,是因为它们会经常关联使用

基本特点

DMA可以实现在没有CPU干预的情况下完成数据的传输

请添加图片描述

硬件组成

在这里插入图片描述
能够使用DMA的外设:
在这里插入图片描述

通信过程

配置DMA:

  • 传输模式:单次/循环
  • 传输方向:source,destination
  • 传输大小
  • 传输通道
  • 使能中断:发送完成中断,发送空闲中断,发送一半中断

优势

通过串口接收数据,若采用中断方式,在数据量很小的情况下很有用,但是一旦数据量大了,CPU将频繁被中断打断;而采用DMA+中断的方式,DMA只有在一次性传输size个数据(或者空闲)后才会请求DMA传输完成中断,告知CPU传输完成,而数据的传输工作都是由DMA完成的。

http://www.lryc.cn/news/385437.html

相关文章:

  • Pinia + 组合式写法 + 选项式写法
  • vCenter-vAPI-Endpoint service health shows as Yellow
  • 2018年全国大学生数学建模竞赛A题高温服装设计(含word论文和源代码资源)
  • UEFA EURO 2024 GERMANY
  • Ueditor中集成135编辑器
  • C++ type list 模板
  • vscode刷LeetCode算法题环境配置
  • OpenCV报错已解决:Vector析构异常OpencvAssert CrtlsValidHeapPointer
  • AudioLM音频生成模型
  • Shardingsphere-Proxy 5.5.0数据迁移
  • c语言中的for循环
  • 大模型微调(finetune)方法
  • Bootstrap 5 卡片
  • 【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作
  • 「51媒体」浙江地区媒体邀约
  • 2-18 基于matlab的关于联合对角化盲源分离算法的二阶盲识别(SOBI)算法
  • C++中常用的标志库
  • 近期计算机领域的热点技术
  • HarmonyOS Next 系列之可移动悬浮按钮实现(六)
  • 如何获得更高质量的回答-chatgpt
  • ASP.NET Core 6.0 使用 Log4Net 和 Nlog日志中间件
  • 使用Spring Boot实现与ActiveMQ的消息队列集成
  • 深度学习 - Transformer 组成详解
  • ONLYOFFICE 8.1编辑器桌面应用程序来袭——在线全面测评
  • 《Windows API每日一练》6.4 程序测试
  • [C#]基于opencvsharp实现15关键点人体姿态估计
  • lambda-map.merge
  • pppd 返回错误码 含义
  • XML 技术
  • 基于RabbitMQ的异步消息传递:发送与消费