UART I2C SPI CAN LIN 和ETH这些通讯外设的内在联系

news2024/11/18 6:25:48

这些不同的通讯手段之间其实有着许多隐藏的共性。

物理层到数据链路层扒一扒这些通讯手段的底层原理。

物理层与数据链路层这两个概念:

ISO国际标准化组织在上世纪70年代末, 把计算机网络通信的整个框架描述成了一个七层的模型,并称之为OSI开放系统互联模型
在这里插入图片描述
我们最直观地

能感受到的通信方式的区别

诸如通讯的速率,电平的范围,用几根线,同轴还是双绞线,这些都体现在最下面的物理层,而如何把物理线路上的比特流正确的切分并识别出一帧数据内部的结构,则被我们成为数据链路层。

物理及链路的演变逻辑:

我们先从最简单的形式出发:

只用1根线通信,这根线我们通常理解为最多只能实现半双工通信,同一时刻不是你发我收,就是你收我发。但这就存在几个问题,一方面是难以实现两者的同时通信;进一步的收发节奏上要么得分个主从由某一方来控制;要么做个约定,错开时间来发送,不然两边同时想发的话就僵住了;而且,速率上只能是提前约定好,接收方以一个什么样的时钟频率去采样线上的电平才是对的。先解决同时通信的需求,很好办,
在这里插入图片描述
我再加一根线,你发你的我发我的,这样就互不干涉了,也不存在同时发送的冲突了,(暂不考虑共地的话)这就已经是我们常见的uart串口了,但这种情况下,速率还是得提前约定,不然盲目解析的结果就是乱码,
在这里插入图片描述
有了两根线之后,双方都获得了自由,收发的节奏也不受约束了,假设速率也约定好了,但问题是怎么正确提取一帧有效的数据?

毕竟一根线只有0和1两种状态(NRZ情况下),空闲与非空闲本身也不好识别,这时候就需要在数据链路层增加一些额外信息,来标记一帧有效数据,也就是帧头和帧尾,

以uart为例,在一帧8bit的数据的基础上,加上起始位与结束位,并且规定空闲时为高电平,用额外的两个bit来保证数据正确接收,这个代价是可以接收的。
在这里插入图片描述
但正是因为帧头和帧尾过于简单,所以数据帧还得规定好固定的长度,接收方根据这个长度来提取,不然也没法判断某个电平是真实数据还是头尾的标识符。

这样一来相对又不那么灵活了,那我们在回过头来看,用一根线来实现半双根通讯的也不是没有,当然暂不考虑共地的问题,LIN就是这样的。作为一种支持多个节点通讯的总线,LIN制定了固定的主机节点,并且参考uart的链路层,
在这里插入图片描述
在10bit划分一个字节的基础上,定义了ID段,检验段,时钟同步段和间隔段,
在这里插入图片描述
前半部分为帧头,由主机发送到总线,从机接收;

后半部分应答则有相应测从机发送,主机接收;

所以但双工的LIN通过链路层上较为复杂的处理+提前预设好的调度顺序,也能保证较低速率下多设备通信的节奏。另外,从数据链路层的共性也能看出能支持uart的芯片一般也能支持LIN,只需要配合上相应的物理层芯片即可。

补充:前面所说的一根线都是理论上的,省略了通信双方共同的参考地线。因为它并不一定以物理线路的形式实现,通讯方向,和节奏到目前为止都可以解决了,但是速率目前尚且还是不能灵活改变。

按照刚刚的思路还能通过加线来解决?

回到一根线数据线的基础上,再加一根方波形式的时钟线,
在这里插入图片描述
那接收方的采样就根据我的时钟来
在这里插入图片描述
没有时钟了自然也就代表停止发送了,这样不仅速率有了依据,数据传输的节奏也很明确,比方我约定时钟上升沿发送对面就下降沿采样。这样总是能够确保一个时钟周期内双方能够正确传输一个bit,这就是同步传输。

进一步的,因为现在我们有两根不同作用的线了,我们还可以用这两根线的电平组合,来切分bit流的依据。
在这里插入图片描述规定时钟高电平的时候数据线不允许变化,低电平在变换;
在这里插入图片描述
如果时钟高电平时数据线发生了跳变,就正好当做是开始和结束的标志
在这里插入图片描述
用两根线的组合判断,而不是只看数据线的特殊电平,这样一来,接收端也不用数固定bit来确定采样的终点了。理论上帧长度也不需要提前约定死而变得灵活了。如果在加上应答与流控机制,就能够很好地实现半双工总线通讯了,比如使用两个双向开漏线,引入线与特性,从机在正确接收后就能通过在数据线上主动拉ack来通知主机,如果没做好接收数据的准备,从机还能通过拉低CLK来影响主设备的发送节奏,如果在多主机场景下,同时发送数据时所需要的仲裁机制也能够通过线与特性来实现,到此,其实就是i2c总线的雏形了。

接下来再解决半双工到全双工的问题:

老思路,再加一根反方向的数据线。

对方发过来的数据也由刚刚那根时钟线的时钟来驱动。
在这里插入图片描述
这样的形成的全双工,双方的发送节奏其实都由一方控制,也就形成了天然的主从关系,虽然少了各自发送的自由,但确定性也大大增强。

如果满足与多个从设备的通信,那就在带上一根用于选中从设备的片选信号。

在这里插入图片描述
用来使能不同的通讯对象。与此同时,还能进一步解放数据线,寻址、ID什么的都省了,就只传输纯粹的有效信息,利用率也提高了一些,这其实就形成了标准的四线SPI。到SPI为止,我们对通讯的基本要求都满足的差不多了。

但直到现在,我们似乎一直是在做加法。那么进一步我们想提高通信的距离、稳定性、和速度呢?

距离与稳定性

前面提到的I2C、UART、SPI都常常用在板级器件之间的通讯,实现共地也比较简单,但他们很少用在大于一米的长距离通信上。另外这些信号线基本每一根都有各自的作用,而独立的一根线不仅容易受到外界干扰,它本身电流的高频变化还会对外产生电磁干扰
(EMI & crosstalk)。影响到周围的器件说到电磁干扰
,直接的解决思路肯定是屏蔽干扰。同轴电缆就是这样一个解决思路。通过加屏蔽层来实现抗干扰性,但相对应的,线缆体积、重量、成本和抗扭抗弯的属性就有点拉胯了,在很多领域已经渐渐淘汰不再使用,哎,那非直接的解决思路呢?就有聪明的工程师想到,就再加一根线,传输极性完全相反的差模信号,用两根线的差分电平来表示一个信号,这样外界的干扰能够被差分电平所消除。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果因为两根线的线距导致干扰产生的相位不同呢?
在这里插入图片描述
我们只需要把这两根线绞起来
在这里插入图片描述
干扰就基本会均匀地影响两条线

这样就方便后端通过共模扼流圈等结构来抑制噪声

通讯线在受到外部干扰的同时,本身的交变电流也会对外产生磁场,而双绞线的另一好处就是螺旋缠绕的两根线因为极性相反,也会产生相反的磁场,相互抵消,会大大减弱对外可能产生的串扰,这让双绞线在很多场景下有巨大的优势。网线里面就是有一股一股的双绞线缠绕而成的。常见的百兆100BASETX用到2对4根,千兆的1000BASE-TX用的是4对8根,车载以太网的100BASE-T1则只用一对。

现在这种情况下,时钟线如果还要带上,那就要多出一对双绞线,毕竟不是PCB走线了,成本考虑,我们现在要开始做减法,把时钟线也得去掉,回归异步通信。

再次以很多汽车行业小伙伴所熟悉的CAN举例,它也是一个经典的使用双绞线作为物理线缆的通讯方式,某种程度上来说,CAN和I2C有些相像,同样是单数据线(差分vs单端)实现的半双工,同样的线与机制,总线拓扑形式也类似,也有寻地和应答,然而因为没有时钟线,CAN在数据链路层的顿格式和更上层的协议方面都要复杂很多;物理层上的区别看上去主要在于数据线由单端信号变差分信号,相比前面提到的几种通讯方式而言,需要额外的IC加持,也就是Transceiver或者称之为phy芯片也可以。且去除了时钟线,只能通讯双方以约定的速率采样,所以对于can而言,计算链路的延时,确定采样点就显得尤为重要,当然这其中还涉及硬同步、重同步等多个步骤以确保数据的正确
采样,这里暂时按下不表。但是因为有双绞线特性的加持,相比之前的这几种通讯,CAN的通讯距离和抗干扰能力上升了一个台阶,良好的EMI特性使得它成为汽车工业上最主流的通讯方式之一。

玩过CAN的同学可能多少都会对一个东西很熟悉,那就是终端电阻,如何去理解终端电阻的作用呢?我们都知道,光线的传播,在通过不同的介质时,会同时发生折射与反射,而信号在导线上传输的时候,也会在不同阻抗介质的交界处,一般是终端,产生反射波,从而对正常的信号产生干扰,而终端电阻的作用:就是为了消除总线阻抗不匹配时产生的反射。

在这里插入图片描述
当然使用双绞线也不可能摆脱线缆固有的电阻电容的影响,所以传输距离的增强也是有限的,再想提高,就涉及到光纤和无线电磁波传输了,等于是切换了介质。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700123.html

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

相关文章

数据备份技术------概述与总结

数据备份技术------概述与总结 数据备份技术------概述与总结备份技术的发展(组网方式)1、Host备份方式2、LAN备份方式3、LAN-free备份方式(SAN)4、Server-free备份方式5、Sever-less备份方式 备份技术的发展(主流备份…

Springboot搭配Redis实现接口限流

目录 介绍 限流的思路 代码示例 必需pom依赖 自定义注解 redis工具类 redis配置类 主拦截器 注册拦截器 介绍 限流的需求出现在许多常见的场景中: 秒杀活动,有人使用软件恶意刷单抢货,需要限流防止机器参与活动 某 api 被各式各样…

人工智能系统的技术架构

一、架构图 1.基础层包括: 硬件设施、软件设施、数据资源。其中在硬件设施方面,做深度学习和神经网络训练时候往往会涉及到模型训练是在CPU还是GPU上面,在这个里面GPU就是做计算加速的,第二个是智能芯片,市面上出现的…

linux 系统 最详细 启动流程

文章目录 详细分析 系统启动过程主要流程阶段说明BIOSMBR(Stage 1 bootloader)GROUB(Stage 2 bootloader)kernelvmlinuzinitrd.img Init 详细分析 系统启动过程 主要流程 PC 启动主要流程,分为四个阶段: BIOS -> MBR -> GRUB -> KERNEL ->…

6.3.5 修改文件时间或创建新文件: touch

我们在 ls 这个指令的介绍时,有稍微提到每个文件在linux下面都会记录许多的时间参数, 其实是有三个主要的变动时间,那么三个时间的意义是什么呢? modification time (mtime): 当该文件的“内容…

1.6、JAVA 分支结构 switch结构 for循环

1 分支结构 1.1 概述 顺序结构的程序虽然能解决计算、输出等问题 但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构 1.2 形式 1.3.1 练习:商品打折案例 创建包: cn.tedu.basic 创建类: TestDiscount.java 需求: 接收用户输入的原价。满1000打9折…

消息通知模块的设计原理

目录 介绍 一、数据库设计 公告消息记录应该全局唯一,还是为每个用户创建一条公告消息? 用MongoDB存储消息数据 1. 搞冷热数据分离,热数据定期归档 2. 冷数据存储一段时间后就销毁,释放存储空间 二、系统消息的发送与收…

肺癌的成因

中国医师协会 2023 年呼吸医师年会暨第二十二届中国呼吸医师论坛(CACP 2023)于 2023 年 6 月 15-18 日在大连如期举行。肺癌是我国目前发病率和死亡率最高的癌症,它的早期筛查和诊断十分关键。 丁香园呼吸时间特邀四川大学华西医院院长、呼吸…

软件测试报告办理解决方案分享,为什么要选择CMA认证或CNAS认可测试报告?

在进行软件测试时,合格的测试报告对于软件产品的质量保障至关重要。那么软件测试报告又该如何办理呢?软件企业为什么要选择CMA认证或CNAS认可的测试报告呢?因为CMA认证的测试报告和CNAS认可的测试报告都具有不可忽视的好处。 一、软件测试报告办理解决方案 1. 测…

我蒙了面试官一上来就说:请你介绍一下你测试过的项目

测试人员在找工作中,基本都会碰到让介绍项目的这种面试题,如何正确介绍自己的项目?需要做哪些技术准备? 今天这篇文章,围绕这些问题,跟大家一起聊一聊。 关于介绍自己的项目? 可以从以下几个方面…

赛效:如何将PDF文件分割成单页的PDF文档

1:打开wdashi点击PDF处理菜单里的“PDF分割”。 2:将本地PDF文件添加上去,在下方选择转换页码,在这里我们选择转换每一页。 3:点击右下角“开始转换”。 4:转换好后,点击绿色下载按钮将分割好的…

七、Docker安装MySQL/Tomcat/Redis等

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、安装步骤二、Docker安装Tomcat2.1 搜索镜像2.2 拉取镜像2.3 查看镜像2.4 启动镜像(端口映射)2.5 停止容器2.6 移除容器 三、Docker安装MySQL…

23年下半年软考软件测评师难考吗?最近考虑要不要考?

软考中级难度是适中的,可以考啊! 因为当代随着各种应用技术层出不穷,随着社会发展,需要大量的软件人才支持,同时软件的更新速度越来越快,市场竞争极其激烈。相关国际认证有微软的,Orical&#…

新西兰访问学者签证申请注意事项

新西兰是一个美丽而富有文化多样性的国家,许多学者都梦想着前往这里进行学术交流和研究。如果你计划申请新西兰的访问学者签证,以下是知识人网小编整理的一些你需要注意的事项: 1. 确认申请资格:在开始申请之前,确保你…

旧手机不要轻易扔掉,将其设置为无线网卡,不消耗流量

如果你有一部旧手机正在闲置着,或者正考虑要将其丢弃,那么请暂停一下。因为这个旧手机可以成为你的无线网卡,帮助你在家中或出行时实现更快的网络下载速度,而且毫不费流量。接下来,我将告诉你如何将旧手机变成无线网卡…

安装 Prometheus 指标存储 观测 dubbo /windows_exporter指标 windows 版本 其他系统换个语法思路一样

目录 下载 Prometheus 访问Prometheus Targets 发现服务 对应的 dubbo 指标就出来了 Dubbo脚手架生成个最简单的项目 导入 Prometheus 相关包 或者使用这个包即可 启动后就自动上报指标了 Windows_exporter or node_exporter 端口 9182 Prometheus 配置 windows_exp…

基于SpringBoot+vue的旧物置换网站设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【产品应用】一体化步进电机在全自动纸张分切机的应用

全自动纸张分切机是现代印刷业中的重要设备之一,它能够将大的纸张切割成相同大小的小纸张,并具有高精度、高速度和高效率等优点。一体化步进电机作为全自动纸张分切机的重要部件,其应用对于提高设备的性能和稳定性具有重要意义。 01.设备简介…

【Java.SE】数组的练习

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用&…

Servlet从入门到精通

概述: Servlet(Server Applet)是Java Server的简称,称为小服务程序或服务网连接器,用Java编写的服务器端服务,具有独立于平台和协议的特性,主要功能在于交互式的浏览和生成数据,生成…