通信协议总结

news2024/12/24 21:01:50

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.coloradmin.cn/o/1870469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac14.1.2 M1芯片终端使用brew命令提示“zsh- command not found- brew ”解决方案

mac14.1.2 M1芯片终端使用brew命令提示“zsh- command not found- brew ” 原因:brew默认安装目录在/opt/homebrew/bin,zshrc文件中找不到对应的PATH路径导致。(可通过右键finder的图标选择「前往文件”-输入/opt/homebrew/bin」来查看brew是…

【图书推荐】CPython设计与实现“适合所有Python工程师阅读的书籍”

目录 一、图书推荐 |【CPython设计与实现】 1.1、书籍介绍 1.2、内容简介 1.3、适合哪些人阅读 1.4、作者译者简介 1.5、购买链接 一、图书推荐 |【CPython设计与实现】 "深入Python核心,揭秘CPython的设计智慧!📖 对于每一位热衷…

超详细的Pycharm使用虚拟环境搭建Django项目并创建新的虚拟环境教程

一、什么是虚拟环境? 通过软件虚拟出来的开发环境,不是真实存在的,一般在多套环境开发时会用到。 二、为什么要使用虚拟环境? 虚拟环境为不同的项目创建不同的开发环境,开发环境内所有使用的工具包互不影响。比如项…

初探 YOLOv8(训练参数解析)

文章目录 1、前言2、Backbone网络3、YOLOv8模型训练代码3.1、模型大小选择3.2、训练参数设置 4、训练参数说明5、目标检测系列文章 1、前言 YOLO 因为性能强大、消耗算力较少,一直以来都是实时目标检测领域的主要范式。该框架被广泛用于各种实际应用,包…

Linux C 程序 【02】创建线程

1.开发背景 上一个篇章,基于 RK3568 平台的基础上,运行了最简单的程序,然而我们使用了 Linux 系统,系统自带的多线程特性还是比较重要的,这个篇章主要描述线程的创建。 2.开发需求 设计实验: 创建一个线程…

线性相关,无关?秩?唯一解(只有零解),无穷解(有非零解)?D=0,D≠0?

目录 线性有关无关 和 唯一解(只有零解),无穷解(有非零解)之间的关系 D0,D≠0? 和 秩 的关系 串起来: 线性相关,无关?秩?唯一解(只…

【M365运维】Outlook和Teams里不显示用户的组织架构

【问题】 由于一些误操作,把用户账户禁用并重新启用后,发现在Outlook和Teams里无法查看用户的组织结构图了。如下图所示: - 在Outlook 里,用户标签页的组织一直显示“正在加载...",成员身份也是“找不到任何组。…

卸载vmware时2503,2502报错的解决办法

1.背景 windows 卸载vmware时,显示2503报错,无法完全卸载 2. 解决方案 2.1 参考安装报错2502,2503的处理方式 文献:https://blog.csdn.net/zhangvalue/article/details/80309828 2.1 步骤: 2.1.1 cmd 管理员打开…

O_CREAT创建函数的例子

代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(void) {int fd-1;char filename[]"test.txt";fdopen(filename,O_RDWR|O_CREAT|O_EXCL,S_IRWXU);if(-1fd){printf("F…

Leetcode Hot100之链表

1.相交链表 解题思路 快慢指针&#xff1a;分别求出两个链表的长度n1和n2&#xff0c;在长度较长的那个链表上&#xff0c;快指针先走n2 - n1&#xff0c;慢指针再出发&#xff0c;最后能相遇则链表相交 时间复杂度O(mn)&#xff0c;空间复杂度O(1)代码# Definition for singl…

手写SpringMVC之调度器DispatcherServlet

DispatcherServlet&#xff1a;分发、调度 根据上一节&#xff0c;已经实现了将controller的方法添加到容器中&#xff0c;而DispatcherServlet的作用就是接收来自客户端的请求&#xff0c;然后通过URI的组合&#xff0c;来找到对应的RequestMapping注解的方法&#xff0c;调用…

基于esp-idf的arm2d移植

什么是ARM2D Arm在Github上发布了一个专门针对“全体” Cortex-M处理器的2D图形加速库——Arm-2D 我们可以简单的把这个2D图形加速库理解为是一个专门针对Cortex-M处理器的标准“显卡驱动”。虽然这里的“显卡驱动”只是一个夸张的说法——似乎没有哪个Cortex-M处理器“配得上…

记一次对ouija渗透测试c语言逆向学习

概要 初始知识 web应用枚举 二进制逆向 文件枚举 堆栈溢出 学到知识 hash长度攻击 任意文件读取 二进制逆向分析 信息收集 端口扫描 nmap --min-rate 1000 -p- 10.129.30.104 发现22&#xff0c;80&#xff0c;3000端口 网站探测 目录枚举 feroxbuster -u http://10.1…

Qt 基于FFmpeg的视频播放器 - 播放、暂停以及拖动滑动条跳转

Qt 基于FFmpeg的视频转换器 - 播放、暂停以及拖动进度条跳转 引言一、设计思路二、核心源码以及相关参考链接 引言 本文基于FFmpeg&#xff0c;使用Qt制作了一个极简的视频播放器. 相比之前的版本&#xff0c;加入了播放、暂停、拖动滑动条跳转功能&#xff0c;如上所示 (左图)…

局域网聊天软件 matrix

窝有 3 只 Android 手机 (3 号手机, 6 号手机, 9 号手机), 2 台 ArchLinux PC (4 号 PC, 6 号 PC), 1 台 Fedora CoreOS 服务器 (5 号). (作为穷人, 窝使用的基本上是老旧的二手设备, 比如 5 年前的手机, 9 年前的笔记本, 10 年前的古老 e5v3 主机, 都比较便宜. ) 窝经常需要 …

format()函数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 format()可以对数据进行格式化处理操作&#xff0c;语法如下&#xff1a; format(value, format_spec) format_spec为格式化解释。当参数…

高性能Web服务器-Nginx的常用模块

文章目录 Nginx安装Nginx平滑升级与回滚平滑升级流程第1步&#xff0c;下载新版本第2步&#xff0c;编译第3步&#xff0c;执行make第4步&#xff0c;对比新旧版本第5步&#xff0c;备份旧nginx二进制文件第6步&#xff0c;模拟用户正在访问nginx第7步&#xff0c;替换旧的ngin…

The First Descendant第一后裔联机失败、联机报错这样处理

第一后裔/The First Descendant是一款免费的多人合作射击游戏&#xff0c;玩家将进入一片混乱的英格里斯大陆&#xff0c;扮演继承者后裔&#xff0c;通过各种主支线任务和故事剧情触发&#xff0c;最终揭开自身的秘密&#xff0c;并带领大家一起抵抗邪恶势力的入侵。为了避免玩…

Flume学习

Flume(分布式数据采集系统)学习 1.Flume架构 什么是flume&#xff1f; flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。 支持在日志系统中定制各类数据发送方&#xff0c;用于收集数据; 同时&#xff0c;Flume提供对数据进行简单处理&#xff0c;并写到…

华为昇腾310B1芯片DVPP模块VENC视频编码接口调用流程以及视频编码代码梳理

目录 1 接口调用流程 2 代码流程梳理 1 接口调用流程 在CANN 8.0.RC1 AscendCL应用软件开发指南 (C&C, 推理) 01.pdf 文档中有接口调用流程 2 代码流程梳理 代码在samples: CANN Samples - Gitee.com 然后我把这个代码完整的看了一遍&#xff0c;然后梳理了详细的代码…