几种常用通信协议

2023-05-16

通信可以形象的比喻成两个人讲话:1、你说的别人得能听懂:双方约定信号的协议。2、你的语速别人得能接受:双方满足时序要求。

一、IIC协议:

2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。两条线可以挂多个设备。IIC设备(稍微有点智能的)里有个固化的地址。只有在两条线上传输的值等于我(IIC设备)的地址时,我才作出响应。

开始信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由高变低就表示一个开始信号。同时IIC总线上的设备检测到这个开始信号它就知道处理器要发送数据了。

停止信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由低变高就表示一个停止信号。同时IIC总线上的设备检测到这个停止信号它就知道处理器已经结束了数据传输,我们就可以各忙各个的了,如休眠等。

看数据怎么传:SDA上传输的数据必须在SCL为高电平期间保持稳定:因为外接IIC设备在SCL为高电平的期间采集数据方知SDA是高或低电平。SDA上的数据只能在SCL为低电平期间翻转变化。

响应信号(ACK):处理器把数据发给外接IIC设备,如何知道IIC设备数据已经收到呢?就需要外接IIC设备回应一个信号给处理器。处理器发完8bit数据后就不再驱动总线了(SDA引脚变输入),而SDA和SDL硬件设计时都有上拉电阻,所以这时候SDA变成高电平。那么在第8个数据位,如果外接IIC设备能收到信号的话接着在第9个周期把SDA拉低,那么处理器检测到SDA拉低就能知道外接IIC设备数据已经收到。

IIC数据从最高位开始传输。IIC总线是允许挂载多个设备的,如何访问其中一个设备而不影响其他设备呢?

主机向从机发送7位地址寻址从IIC设备,用7bit表示从地址,那么可以挂载的从设备数是2的7次方128个。处理器想写的话:先发送起始位,再发一个8bit数据:前7bit表示从地址,第8bit表示读或者写。0write是处理器往IIC从设备发,1read是IIC从设备往处理器发。第9个时钟周期回复响应信号。例如写过程:

首先发出一个start信号,从设备地址,R/W(0,写),回应ACK表示有这个从设备存在。这时候是处理器从指定的从设备读数据的从设备里8bit存储地址的指定。所以这里R/W是0为写。ACK回应有这个设备的话,处理器把要访问的从设备里的8bit存储地址写好。ACK对方回应。继续一个start信号+从设备地址,最低位是高电平表示读数据(等待ACK回应),回应ACK表示有这个从设备存在。在读数据的时候,每发出一个时钟,处理器会SDA上的数据存起来。那么发出8个时钟后处理器就能得到8位的数据。这时候若想连续读就不断回应ACK信号否则就发出停止信号。

读的过程:start信号,从设备地址,写,待读取存储地址,再一个start信号,从设备地址,读,8个时钟,从设备就把对应的数据反馈给处理器。

二、SPI协议:

SPI:高速同步串行口,是一种标准的四线同步全双工串行总线。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选)。 SPI 主要应用在 EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间. 它在芯片中只占用四根管脚 (Pin) 用来控制以及数据传输, 节约了芯片的 pin 数目, 同时为 PCB 在布局上节省了空间. 正是出于这种简单易用的特性, 现在越来越多的芯片上都集成了 SPI技术.SPI只有主模式和从模式之分,没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据

工作过程:

上升沿发送、下降沿接收、高位先发送;

上升沿到来的时候,SDO上的电平将被发送到从设备的寄存器中;

下降沿到来的时候,SDI上的电平将被接收到主设备的寄存器中。

一个完整的传送周期是16位,即两个字节。因为主机首先要发送命令给从机,然后从机根据主机的指令准备数据,所以主机在下一个8位时钟周期才把数据读回来。SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合,CPOL是用来决定SCK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,空闲电平为高电平。CPHA是用来决定采样时刻的,CPHA=0,在每个周期的第一个时钟沿采样,CPHA=1,在每个周期的第二个时钟沿采样。

三、UART协议:

UART:Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置,UART是一个并行输入成为串行输出的芯片,通常集成在主板上,多数是16550AFN芯片。因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem中。它是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。

通信过程:

UART首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是5~8个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。

数据发送的思想是,当启动字节发送时,通过TxD先发起始位,然后发数据位和奇偶数效验位,最后再发停止位,发送过程由发送状态机控制,每次中断只发送1个位,经过若干个定时中断完成1个字节帧的发送。

数据接收的思想是,当不在字节帧接收过程时,每次定时中断以3倍的波特率监视RxD的状态,当其连续3次采样电平依次为1、0、0时,就认为检测到了起始位,则开始启动一次字节帧接收,字节帧接收过程由接收状态机控制,每次中断只接收1个位,经过若干个定时中断完成1个字节帧的接收。。UART典型为38400,9600波特 。如下图1,UART字符格式为1个起始位,5~8个数据位,1个地址位或奇偶位(可选),1个停止位。由于接收器、发送器异步工作,无需联接接收和发送时钟。接收器采取对输入数据流高度采样方式,通常采样为16,并根据采样值确定位值。按惯例,使用16个采样值的中间三个值。

UART

链接典型为

38400

9600

波特

 

如下图

1

UART

字符格式为

1

个起始位,

5~8

个数据位,

1

个地址位或奇偶位

(

可选

)

1

个停止

位。

 

 

    

由于接收器、

发送器异步工作,

无需联接接收和发送时钟。

接收器采取对输

入数据流高度采样方式,通常采样为

16

,并根据采样值确定位值。按惯例,使

16

个采样值的中间三个值。


四、三种协议的区别

第一个区别当然是名字:
    SPI(Serial Peripheral Interface:串行外设接口);
    I2C(INTER IC BUS:意为IC之间总线)
    UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)
第二,区别在电气信号线上:
    SPI 总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现 多个SPI设备互相连接。提供 SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
    如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
    I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
    如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备)
    UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
    显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;
第四,看看牛人们的意见吧!
    wudanyu:I2C 线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
    quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。







本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

几种常用通信协议 的相关文章

  • TP-LINK 路由器 无线桥接 设置

    前言 家里Wifi信号不好 span class token punctuation span 想用路由器桥接网络 正好家里有一款TP span class token operator span LINK路由器 span class to
  • PCIe MSI-X 中断 设置 过程

    主机侧初始化 msi span class token operator span map span class token operator 61 span span class token operator lt span span c
  • arm与arm-linux中的 ioport 和 iomem

    这里讲述了 但是描述的不太清晰 本文分几个概念来讲述 arm amp x86 x86 有 I span class token operator span O端口 span class token punctuation span 有loa
  • GICv3 its 中断发生流程

    ITS 的结构 ITS 的设置流程 ITS 的中断发生流程 有两种方法 span class token operator span span class token number 1 span 设备向 span class token f
  • sqlite3 database is locked 问题解决方案

    sqlite3 database is locked 问题解决方案 sqlite3只支持一写多读 读与读可以同时进行 读与写不可同时进行 写与写不可同时进行 一写多读的案例 场所 span class token punctuation s
  • git 中 HEAD 概念

    参考资料 本文讲述的 是 git 命令中的 HEAD 适用于 github 不适用于 gerrit git recipes 这个链接是一个比较好的git教程 本文不对git进行介绍 span class token punctuation
  • 笔记本外接RTX 2080显卡

    设备列表 笔记本k680e w650kk 显卡RTX 2080 8G外置显卡坞ADT Link m 2接口 M key 线长45cm 具有32G带宽电源DELL 460W 安装 将外置显卡坞的m 2接口接到笔记本电脑的m 2座上 xff0c
  • Docker拉取镜像及查看pull下来的image在哪里

    docker pull 下来的命令都默认存在 var lib docker 文件夹下 查看 var lib docker image overlay2 repositories json文件 xff1a 正好和docker images的内
  • OpenCV之通道和位深的理解(CV_8UC1,CV_8SC1,CV_32FC1)

    矩阵数据类型 CV lt bit depth gt S U F C lt number of channels gt S 61 符号整型 U 61 无符号整型 F 61 浮点型 CV 8UC1 是指一个8位无符号整型单通道矩阵 CV 32F
  • OpenCV之环境变量及不同VS版本OpenCV库

    花费了小一天的时间解决了一个关于OpenCV的很少见一旦遇到了却又不容易解决的问题 xff01 简述如下 xff1a CMake出来的OpenCV库都是对应着相应VS版本的 xff0c 如果电脑中安装了多个版本的VS xff08 例如vs2
  • VantUI表单设置为标签在上,内容在下的上下结构

    VantUI中默认表单为左右结构 xff0c 即标签和控件在一行显示 xff0c 在移动端 xff0c 我们一般希望标签展示在控件上方 xff0c 而又需要保证表单的正则校验 xff0c 则可以设置如下 xff1a 既能显示必填校验 xff
  • Python网络爬虫:爬虫篇(二)--- HTTPResponse的方法属性及urlopen()函数的其他参数

    之前我们说过 xff0c 事实上 xff0c 如果直接打印出urlopen 函数返回的结果 xff0c 那么返回的是一个HTTPResponse类型的对象 xff0c 我们之前只介绍了其中一个方法 xff0c 即read 方法 xff0c
  • Ubuntu系统如何搭建可视化界面

    VNC简介 VNC xff08 Virtual Network Console xff09 是虚拟网络控制台的缩写 它是一款优秀的远程控制工具软件 xff0c 由著名的 AT amp T 的欧洲研究实验室开发的 VNC 是基于 UNIX 和
  • windows环境下安装zookeeper时zoo.cfg设置的dataDir和dataLogDir不起作用

    刚开始设置的是 dataDir 61 D zk data dataLogDir 61 D zk log 启动zkServer cmd之和发现指定的data和log位置不起作用 发现是必须双 才可以 xff0c 于是改成 dataDir 61
  • Tensorflow lite for 移动端安卓开发(二)——完整详细过程训练自己的模型

    官方给的Tensorflow lite demo是ImageNet 中训练的1000类物体识别 xff0c 基于移动端的项目需要 xff0c 现在要用模型训练自己的数据 xff0c 提供两种训练方法 xff0c 这也是自己在摸索Tensor
  • 机器人领域牛人和研究组列表

    机器人领域牛人列表 美国 Sebastian Thrun Stanford University SLAM领域著名科学家 现任美国斯坦福大学教授 人工智能实验室实验室主任 德国波恩大学博士 硕士 希尔德斯海姆大学 University of
  • 嵌入式 - 宏内核和微内核

    更新历史 20220315 首次创建 xff0c 对宏内核与微内核的概念做出简单的解释 xff1b 宏内核和微内核 引言内核结构宏内核结构特点操作系统举例 微内核结构特点典型操作系统举例 宏内核 V S 微内核参考资料 引言 与通用机操作系
  • SpringAOP的使用

    1 什么是AOP AOP Aspect Orient Programming xff0c 直译过来就是面向切面编程 AOP是一种编程思想 xff0c 是面向对象 xff08 OOP xff09 的一种补充和完善 对于面向对象来说是将程序抽象
  • strrstr函数的宽字符版实现

    strrstr函数用来从一个字符串尾部开始查找另一个字符串出现的第一个位置 xff0c 我却没有找到这个函数的宽字符版本 xff0c 因此自己写了一个实现的函数如下 const wchar t wcsrstr In z const wcha
  • 亚马逊,一个沉睡广告巨人的苏醒(虎嗅网)

    虽然拥有令无数广告主羡慕的高质量用户数据和巨大的网站流量 xff0c 但是在很长的一段时间内亚马逊还是将主要的精力集中在商品销售上 xff0c 广告只是作为自身业务的补充可有可无的存在 不过最近两年 xff0c 亚马逊对广告这种不屑的态度正

随机推荐

  • 大数据案例分析:电信业Hadoop应用分析 原文出自【比特网】,转载请保留原文链接:http://do.chinabyte.com/228/12410228.shtml

    电信业Hadoop应用分析 昨日 xff0c 联通研究院处长王志军在第七届 开源中国 开源世界 高峰论坛上分享了Hadoop在电信行业大数据应用的经验 随着国内3G网络的发展 xff0c 或者移动通信网络的发展 xff0c 中国联通 600
  • Vue富文本编辑器Tinymce内容导出Pdf、Word

    一 Tinymce导出Pdf 使用VueHtml2pdf插件 xff0c 安装插件 xff0c VueHtml2pdf详情见vue html2pdf npm npm i VueHtml2pdf 引入和注册 引入 import VueHtml
  • 大腕出手看门道,谈BAT的投资战略差异 三家战略投资的思考原点并不相同虎嗅网)

    中国互联网的收购之战 xff0c 比娱乐圈的明星离婚更一波三折和猜不透结局 当所有人以为搜狗被360牵回山寨只是早晚的事的时候 xff0c 搜狗和腾讯宣布好上了 眼瞅着今年第三季度即将结束 xff0c 中国互联网巨头们在2013年的 军备竞
  • JDK6的安装

    http www java net download jdk6 6u10 promoted b32 binaries jdk 6u10 rc2 bin b32 windows i586 p 12 sep 2008 exe XP 下 JDK6
  • 如何利用大数据进行价值兑现才是正经事(虎嗅网)

    如果有一天你可以预测未来 xff0c 你要做的第一件事情是什么 xff1f 买彩票 xff1f 第二件 第三件事情呢 xff1f 先卖个关子 xff0c 我们后面再说这件事情 大数据是个产业 xff0c 广义上指的是在这个信息过载时代围绕着
  • 多图震撼!数字的未来,2013报告(虎嗅网)

    新媒体 完爆 旧媒体 从市值上来看 xff0c 以苹果 谷歌 亚马逊 Facebook 雅虎等为首的新媒体公司市值已超过1万亿美元 xff0c 而以迪斯尼 Comcast 时代华纳 Viacom CBS 新闻集团 21世纪福克斯等为首的旧媒
  • 网页采集器-八爪鱼采集器

    八爪鱼采集器下载地址 xff1a http www bazhuayu cc download 八爪鱼采集器的注册地址 xff1a http www bazhuayu cc signup id 61 0e492e9c 6d80 4c2a a2
  • 考研书单与技巧

    书尽量在网上搞活动时买正版的 xff0c 这样也不贵 每科研究透一到两本书 xff0c 不要贪多 xff01 1 英语 xff1a xff08 积累的过程 xff0c 可以现在开始 xff0c 正好把六级过了 xff09 xff08 看好所
  • Ubuntu下程序进程堆栈信息——gstack

    前言 在Ubuntu下调试程序 xff0c 大部分是启动前使用gdb进行调试 xff0c 当然也有其他方法 xff0c 程序在运行中 xff0c 为了不打断程序正常运行 xff0c 也有一些工具进行调试 当前本文章旨在说明不安装其他额外程序
  • 9.针对Linux的8种最佳免费防病毒程序

    虽然Linux操作系统相当稳定和安全 xff0c 但它们可能不完全免疫威胁 所有计算机系统都可能遭受恶意软件和病毒攻击 xff0c 其中包括运行基于Linux的操作系统的系统 但是 xff0c 对于基于Linux的操作系统而言 xff0c
  • 有铅焊锡丝与无铅焊锡丝的性能差异大解析

    有铅焊锡丝与无铅焊锡丝是二大类差另外产物档次 xff0c 由于其金属成份差别造成熔点也差别 xff0c 一样通常有铅焊锡丝 的熔点在183度 xff0c 而无铅焊锡丝的熔点为217 227度 含铅量越少熔点将越高 由于焊锡丝的熔点温度进步之
  • linux中的系统调用

    前言 xff1a 本文只讨论linux中的系统调用 xff0c 不考虑windows等其他操作系统 两点 xff1a 1 系统调用时 xff0c 进程调用的是操作系统的内核函数 xff0c 不是进程 2 系统调用时 xff0c 会出现上下文
  • iView 日期选择器开始时间至结束时间限制

    需要考虑以下条件 开始时间和结束时间都不能大于当前时间开始时间不能大于结束时间 html lt FormItem label 61 34 起止时间 34 gt lt DatePicker type 61 34 date 34 v model
  • 树莓派3安装笔记(1)-安装操作系统Raspbian以及安装必要软件

    拿到了树莓派3后 xff0c 经过短暂的兴奋 xff0c 终于开始实战安装OS了 以下步骤基于官方的文章https www raspberrypi org learning software guide quickstart xff0c 选
  • C中需要检验其执行是否成功的函数(检验返回值)

    一 malloc xff08 xff09 因为当内存分配完了后 xff0c 就无法再分配空间了 xff0c 所以malloc失败也是有的是 xff0c 当malloc失败时返回NULL char s 61 void malloc SIZE
  • 《Java核心技术 卷1》

    目录 第4章 对象和类 lt 1 gt 静态字段和静态方法 lt 2 gt 初始化块 lt 3 gt 定义抽象类的对象变量 lt 4 gt hashCode方法得到散列码 lt 5 gt 虚拟机中的泛型类型信息 第五章 继承 第6章 接口
  • Kalibr 之 Camera-IMU 标定 (总结)

    Overview 欢迎访问 持续更新 xff1a https cgabc xyz posts db22c2e6 ethz asl kalibr is a toolbox that solves the following calibrati
  • VMware Workstations Pro 14 建立的虚拟机目录无法删除

    起因 通过VMware新建的RedHat虚拟机 xff0c 无意间的强制关机 xff0c 导致该虚拟机开机黑屏无法正常开启 xff0c 而且也关不掉 尝试删除自己创建的虚拟机目录文件 xff0c 提示文件被占用 通过任务管理器想要结束相关进
  • 矩形目标检测

    身份证 名片 书籍 考试试卷 答题卡这些检测目标都属于矩形目标检测 一 xff0c 现有技术 传统检测方法思路 xff1a 第一步 xff0c 采用滑动窗口 xff0c 设置不同的大小 xff0c 遍历图像 xff0c 得到一些目标的候选框
  • 几种常用通信协议

    通信可以形象的比喻成两个人讲话 xff1a 1 你说的别人得能听懂 xff1a 双方约定信号的协议 2 你的语速别人得能接受 xff1a 双方满足时序要求 一 IIC协议 xff1a 2C串行总线一般有两根信号线 xff0c 一根是双向的数