数字通讯协议有哪几种
带你了解单片机的通信协议通讯协议:通讯协议是指在单片机开发中,不同的硬件系统或者操作系统之间进行数据交换的方式。是一种数据要进行传输的约定规则。通讯协议通常来说有很多种,那我们今天......接下来具体说说
网络通信协议是用于在计算机网络中进行数据传输和交换的规则集合。不同类型的网络通信协议有以下几种:
一个做嵌入式的工程师,无论是做硬件还是软件,每天都在接触一些通信相关的名词,若不认真整理这些概念,就很可能会混淆或忘记具体的含义与区别,因为最近正好在做项目用到了SPI协议传输数据,接下来我打算整理一下各种通信协议的区别。
目录
一、串行通信与并行通信的概念
1、串行通信
2、并行通信
二、UART
三、TTL电平
1、标准TTL电平逻辑
2、CMOS电平
四、RS-232
1、RS-232电平逻辑
2、D型9针接口定义
3、USB转RS-232
4、TTL和RS-232互转
五、RS-485
1、RS-485电平逻辑
2、TTL和RS-485转换
3、RS-232和RS-485转换
六、USB
1、USB速率
2、USB接口定义
七、CAN总线
1、CAN电平逻辑
八、I2C
九、SPI
一、串行通信与并行通信的概念
1、串行通信
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。串口可以算是一个泛称,一般指代的是串口时序标准。UART、RS232、RS485、TTL都遵循着类似的通信时序协议,因此都被通称为串口。
串行通信(serial communication)是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。串行通信按照发送时钟源和接收时钟源是否需要保持一致,又可分为同步通信和异步通信两种。参考链接:异步串行通讯和同步串行通讯区别_CSDN-MarkYang-CSDN博客
2、并行通信
并行通信(Parallel communication)就是指数据的每一位同时在多根数据线上发送或者接收。可以以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信。计算机或PLC各种内部总线就是以并行方式传送数据的。
总结:串行通信是一种概念,是指一个bit一个bit的收发数据,相对于并行通信可一次性可以同时收发n个bit而言。包括普通的串口通信,包括IIC,包括SPI等等。串口通信是一种通信手段/方式,是相对于以太网方式、红外方式、蓝牙方式、usb方式(usb广义也算串行通信)等而言,是一种比较低级的通信手段。
二、UART
UART(Universal Asynchronous Receiver/Transmitter),意为通用异步收发传输器,该总线双向通信,可以实现全双工传输和接收。UART包含TTL电平的串口和RS-232电平的串口,使用UART通信的双方设备都需要遵从UART协议。
UART是串行通信的一种,重点是异步,和同步相对应,意思是不需要同步的时钟,通信两端预先约定bit的传输速率(每秒传多少bit),而不是由时钟触发的。
在嵌入式设计中,UART用于主机与辅助设备通信。UART是实现串口收发的逻辑电路(硬件形式),这部分可以*成芯片,也可以作为模块嵌入到其他芯片里,单片机、SOC、PC里都会有UART模块,例如STM32单片机里有两种UART模块,USART和UART,前者可以同步通信,而后者只能异步通信。一般电脑是没有uart接口的(ttl电平),我们可以通过电脑的usb接口和单片机通信,只需一个usb转串口模块插到usb接口上,装上驱动,另一边接单片机即可。有很多可以usb协议转为串口协议的芯片,如ch340,cp2102,pl2303等。
1、TX -- 数据发送接口
2、RX -- 数据接受接口
两个设备间将TX与RX相连,RX与TX相连即可正常工作。
三、TTL电平
TTL是Transistor-Transistor Logic的简写,是一种电平逻辑,晶体管-晶体管逻辑。通常我们采用二进制来表示数据,为了表示二进制,需要用高低电平表示这些二进制数,3.3V/5V等价于逻辑“1”,0V等价于逻辑“0”。UART特指单片机的UART端口,使用的就是TTL电平。嵌入式里面说的串口,一般是指UART口,而TTL、RS-232、RS-485是指的电平标准(电信号)。
1、标准TTL电平逻辑
输出电路:电压大于等于(≥)2.4V为逻辑1;电压小于等于(≤)0.4V为逻辑0;
输入电路:电压大于等于(≥)2.0V为逻辑1;电压小于等于(≤)0.8V为逻辑0;
2、CMOS电平
输出电路:电压大于等于(≥)0.9×Vcc为逻辑1;电压小于等于(≤)0.1×Vcc为逻辑0;
输入电路:电压大于等于(≥)0.7×Vcc为逻辑1;电压小于等于(≤)0.3×Vcc为逻辑0;
四、RS-232
RS-232接口符合美国电子工业联盟(EIA)制定的串行数据通信的接口标准,全双工,其中 RS 为英文 “Recomend Standard” 的缩写,中文翻译为“推荐标准”,232为标识号。原始编号全称是EIA-RS-232(简称232,RS232)。它被广泛用于计算机串行接口外设连接,连接电缆和机械、电气特性、信号功能及传送过程,其输出的电平称为 RS232 电平。
1、RS-232电平逻辑
RS-232不同于TTL的电平逻辑,为负逻辑,最简单的RS232通信由三条数据线组成,即 TxD、RxD 和GND。负12V代表高电平,即-15V ~ -3V为逻辑1,正12V代表低电平,即+3V ~ +15V为逻辑0,电压也有标准范围。这里的电平,是TXD线(或者RXD线)相对于 GND 的电压。
2、D型9针接口定义
记住一点,这种接口的协议只有两种:RS-232和RS-485。不会是TTL电平的(除非特殊应用)。
一般用的较多的是RXD、TXD、GND,三个信号。
9针串口的定义可以参考这里:9针串口定义 - 百度文库
3、USB转RS-232
USB转232,可以先将USB转换为TTL,再将TTL转换为RS232,市面上也有很多USB直接转RS232的线材,线材内部集成转换电路,下图为USB转RS-232串口:
4、TTL和RS-232互转
在实际中由于需要,有时候会要将TTL电平**为RS232电平,有时候也会要将RS232电平**为TTL电平,因为单片机接口一般是TTL电平,如果需要接232电平的外设,就需要加TTL转RS232的模块,转换方向是双向的。能实现TTL和RS232电平互相转换最常用的芯片是MX232。框图如下
五、RS-485
RS-485和RS-232一样,都是串行通信标准,现在的标准名称是TIA/EIA-485-A,习惯称为RS-485标准,半双工,使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485使得廉价本地网络以及多支路通信链路的配置成为可能,而且增加了联网功能。
1、RS-485电平逻辑
RS-485和RS-232单端传输不一样,是差分传输,使用一对双绞线,其中一根线定义为A,另一个定义为B,一般收发器内部是一个发送器加一个收发器组成。对于使能信号,字母上面加一横的为低电平有效,不加的为高电平有效。逻辑“1”以两线间的电压差为+(2 ~ 6)V表示;逻辑“0”以两线间的电压差为-(2 ~ 6)V表示,使能端起作用和其他状态时为高阻态。
2、TTL和RS-485转换
TTL转成RS-485很常见,收发器芯片市面上很多,比如MAX485,用起来也很简单,一般左边接MCU的GPIO,用来控制。
3、RS-232和RS-485转换
RS-232和RS-485之间可以转换,一个方法是RS-232转换成TTL,再由TTL转换为RS-485,当然也有芯片支持将RS-232支持转换成RS-485,双向转换。
六、USB
USB是Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,是应用在PC领域的接口技术,USB接口的特点是传输速度快,支持热插拔,可连接多个设备。
一条USB传输线分别由地线、电源线、D+和D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(与CMOS的5V电平不同),而电源线和地线可向设备提供5V电压,最大电流为500mA(可以在编程中设置)。USB设备可以直接和HOST通信,或者通过Hub和Host通信。一个USB系统中仅有一个USB 主机,设备包括USB功能设备和USB HUB,较多支持127个设备。物理连接指的是USB传输线。在USB 2.0系统中要求使用屏蔽双绞线。
1、USB速率
USB1.0:低速模式(low speed):传输速率为1.5Mbps;
USB1.1:全速模式(full speed):传输速率为12Mbps;
USB2.0:向下兼容,高速模式(high speed):25~480Mbps;
USB3.0:向下兼容,(super speed):理论上*高达5Gbps,实际中,也就是high speed 的10倍左右;
USB3.1:Gen2 超高速(SuperSpeed+)传输速率为 10Gbps。
2、USB接口定义
常见的Type-A型USB接口定义如下。
USB是普遍使用的一种高速通信接口,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和逻辑电平标准都和串口完全不同,因此和串口无关。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。参考链接:USB协议基本知识_u010142953的博客-CSDN博客_usb协议栈
七、CAN总线
CAN是Controller Area Network的简称,是一种有效支持分布式控制或实时控制的串行通信网络,现在是汽车网络的标准协议。参考链接:CAN总线入门(硬件部分)_记得诚-CSDN博客
1、CAN电平逻辑
显性电平:逻辑0 典型值 CAN_H = 3.5V,CAN_L = 1.5V;
隐性电平:逻辑1 典型值 CAN_H = 2.5V,CAN_L = 2.5V;
总结:TTL电平一般用于芯片与芯片之间的通信;RS232采用了正负逻辑电平,提高线路的抗干扰性最远可以达到15米左右;如果更远的距离会采样RS485,它使用两线制的差分信号传输,最远可至1200米;RS232全双工只支持点对点通讯(1:1),RS485半双工或单双工支持总线形式通讯(1:N)。当我们在做电路工作时,应该注意下外设的串口是Uart类型的还是RS232类型的,如果不匹配,应当找个转换线(通常这根转换线内有块类似于Max232的芯片做电平转换工作的),不能盲目地将两串口相连。
1、RS232、RS-485最终结果都是转换为TTL电平方式与单片机通信(CAN收发器把差分信号**为TTL-->CAN控制器(MCU))。其目的都是提高通信质量,提高抗干扰能力。
2、TTL、RS232是逻辑电平信号。RS-485、CAN为差分信号。
八、I2C
I2C总线是由Philips公司开发的一种简单、半双工、双向二线制同步串行总线。它只需要两根线(SDA、SCL)即可在连接于总线上的器件之间传送信息。同一时刻可以单主机多从机或单主机单从机,I2C总线上的任意设备都可以当主机,一般主机是MCU,当有多个主机时,会通过总线仲裁的方式选出一个主机,其他退出作从机。
SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平。IIC参考资料:I2C 时序详解,精确到每一个时钟_谁de如花的博客-CSDN博客
主机用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从机,在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从机,则主机首先寻址从机,然后主动发送数据至从机,最后由主机终止数据传送;如果主机要接收从机的数据,首先由主机寻址从机。然后主机接收从机发送的数据,最后由主机终止接收过程。在这种情况下,主机负责产生定时时钟和终止数据传送。
九、SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写,意为串行外围接口,是摩托罗拉首先在其MC68HCXX系列处理器上定义的,SPI是一种高速的,全双工,同步的通信总线,SPI的速率比I2C高,一般可以到几十Mbps,不同的器件当主机和当作从机的速率一般不同。SPI最典型的应用是单主机单从机,下图是接线方式,当然也可以多从机。
带你了解单片机的通信协议
通讯协议:通讯协议是指在 单片机 开发中,不同的硬件系统或者操作系统之间进行数据交换的方式 。 是一种数据 要进行传输的 约 定 规 则 。
通讯协议 通常来说 有很多种, 那 我 们 今天要说的 就 是串口通讯协议, 我们 是基 于 STM32 简单的说一下 。
串口通信 。 串口是单片机 非常 常见的 一种 外设。常见 的 UAR T 串口主要有两 条 线,一 条 是发送、一 条 是接收。 许多 单片机 所 自带的串口 都是 已经把这个最底层的电平级别的协议做好了,我们 直接 使用 就可以了 ,收发都是以一个字节为单位来进行的。
举个例子,我们想使用串口连 接 STM3 2 的串 口 1 到 P C 机,然后通 过 P C 上位机 给 STM3 2 发送一个字 节 0x0 1 ,然后 在 STM3 2 接收到之后,判断一下是不 是 0x0 1 ,如果是的话,点亮一个小灯,如果不是的话,就不点亮灯。这个 逻辑不论从 理解 还是 实现起来 都 非常容易,基本上几行代码就实现了。
若果 把刚才的例子 进行 扩展 , STM3 2 连接了很多 的 灯,然后我们要使用串口发送一个指令来控制所有灯,这时候应该怎么操作?
再 把问题再扩展一下,假如我们要控制或通信的不是一个灯,而是一个更复杂的东西,比如是一个电机控制模块、是一 个 GP S 模块、是一个物联网模块呢,这些东西在数据交互的时候都有很大的数据量,不可能一个一个字节去发送数据。
这时候我们就可以联想一下人类是怎么交互的,首先经过上万年的潜移默化,人类形成了很多种语言,同一个国家的人说话基本上都可以听懂,而不同国家的人说话的时候,如果不懂外语是听不懂的。这是为什么呢,因为同一个国家的人,说话的时候使用的协议是相同的,你说桌子,我就知道是桌子。而不同国家的人,通讯协议是不一样的,所以说话的时候不能理解,比如你 说 appl e ,我如果没有学过英语,我就不知道你说的是苹果。但是我学习了你的语言,也就是协议。就可以听懂你说的是苹果了。
所以 , STM3 2 和 P C 通讯,或者扩展到更多的场景 , STM3 2 和 GPS , 其他单片机 和 WIF I 等等,这样的通讯都需要通讯双方执行同样的协议。那么对于刚接触单片机的人而言,就产生了几个问题,协议是什么样的,如何执行协议?
还是以最简单的场景来举例子。以使 用 P C 机发指令来控 制 STM3 2 点 亮 8 个小灯中的若干个小灯固定时长(一秒 到 25 5 秒之间)然后关闭这样一个实际小项目为例,如果只发一个指令,是没办法完成 我们需要完成的 任务。所以我们需要制定一个简单的协议。
比如 我 STM3 2 的程序这么写:当串口收 到 0xA A 然后又收 到 0x5 5 的时候,我就开始不断收集,并把收集到的所有数据都放在一个数字中,直到收 到 0xA5x5 A 这两个的时候就停止收集。接下来我把收集到的数组里面的靠前个拿出来,使 用 i f 进行判断,如果 是 0x0 1 的话就点亮靠前个小灯,如果 是 0x0 0 或者其他的话,就不点亮灯,然后看看数组的第二个字节是多少,是多少就给延时多少。相当于通过前两个字节来控制靠前个灯亮灭固定时间长度。同样的接下来的两个字节是第二个灯的亮灭和时间长度。按这样的节奏来,要控制 这 8 个灯需 要 1 6 个字节。那么我们是否可以优化一下这个协议呢?
假如 把 8 个灯的亮灭信息只用一个字节来表示,后面 加 8 个字节,分别用来表示每个灯的亮灭时间长度,这样的话,就可以 用 9 个字节来完成这个任务。
现在我们再想想,假如在这个数据传输的过程中,出了一点小错误,其中有一个电平在跳变的时候受到了干扰,没有按照发送方的数据跳变,这时候接收方接收到的数据就是错误的,假如这个错误发生在靠前个灯的亮灭位上,那这个灯就会发生错误的反应,这不是发送方想要的结果。那如何避免这种情况发生呢?使用校验位,校验位是什么意思呢,就是我在给你发的时候,我 把 9 个字节的数据做一个运算。运算有很多种方式,以求和为例子, 把 9 个字节的数据求和,然后拿出里面低八位的数据,放在我要发送 的 9 个字节后面。这样,发送的内容除 了 0xAA,0x55,0xA 5 和 x5 A 之外,还多了一个位,我们把多出来的这个通过数据位运算得到的这一字节称为校验位。
当发送出去之后,接收方在接收完这些数据之后,也对数据位做一个求和,然后取出低八位,和发送方发送过来的那个校验位做比较,如果相等,说明数据发送过程中没有出错,如果不相等,说明数据发送过程中有地方出错了,那么我们整个不要这一包数据了,然后给发送方通知一下,告诉他让他重新发送一下刚才的数据。
现在回到数据收发 , P C 端发数据 , STM3 2 端接收,这时 候 STM3 2 也就要每过一会儿(很短暂的时间)就去看看串口是否有数据收到,这种方式称为扫描。扫描有一个缺点,就是需要不断的去看,结果可能去看了一百次,才有一次有数据收到,这样效率太低了,老板 ( cp u )肯定不高兴,就给串口说,以后你自己处理,有数据来了给我说一下我去处理就行,别让我自己去看,手里事情多着呢。所以就有了中断,中断就是当串口上有数据接了,就会产生一个接收中断,这时候串口就去通知老板来处理。原本要不断过来看看有没有数据,现在他有数据了才通知老板,老板开始还感觉不错,比以前扫描的时候轻松了点。
过了一段时间,老板想,这样每来一包数据,我得去拿几十次呀,太累,于是扔给串口一个仓库(数组),然后说,我给你一个特殊的通道 ( DM A )你以后收完一包数据直接通过这个通道把数据放在这个仓库里,放完了再通知我来处理,别让我来一次处理一个,手里事情多着呢。然后就有了串口空闲中断,串口每次收到一帧数据之后,才会产生一个中断通 知 cp u 处理。串口空闲中 断 +DM A 的方式简直是处理串口通讯的神器,没有之二。
接下来我们再想想,如果我们有一天突然觉得只控 制 8 个灯不够用了,需要扩展几个呢,这时候,灯加上去之后,协议上还要有很大的 变 动,比如要把灯的控制位插在数据位的后面,就要把校验位往后挪挪,这样程序就需要 改一下 ,那么有没有一种方式,可以允许你在一定范围之内随意改灯的数量而不需要修改协议呢?这就需要设计一个不定长的通讯协议了。既然不定长,那也就意味着,发送方每次都可能发送出不同长度的数据给接收方,这也就要求发送方在发送数据的时候,在这个数据包的前面要加上数据有几个字节,这样接收方才好根据这个数量去接收(串口空闲中 断 +dm a 的方式不需要根据这个数量去接收),并且根据这个数量去解析,进而控制灯。
本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回 复 “ 我要入 门 ” ,与我们一起成长,喜欢的可以点个赞关注我们!
以上就是数字通讯协议有哪几种?的详细内容,希望通过阅读小编的文章之后能够有所收获!