通信协议:


串行通信和并行通信



在数据的通信方式中根据数据传输方式的不同可以分为:串行通信和并行通信

串行通信:串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。
串行通信端口,即COM1、COM2,一般接鼠标,外置Modem或其他串口设备。它在一个方向上只能传送一路信号,一次只能传送一个二进制位,传送一个字节信息时,只能一位一位地依次传送。

在串行通信中,一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢。串行通讯的距离可以从几米到几千米。

串行通信的特点:

  • 优点传输距离远占用资源少
  • 缺点发送速度慢

并行通信:并行通信需要多条数据线,一般需要8条,可以一次传输1bite。如果一组数据的各数据位在多条线上同时被传输,这种传输方式称为并行通信。

并行通信端口,即LPT1,俗称打印口,因为它常接打印机,它是同时传送八路信号,一次并行传送完整的一个字节信息。

并行通信的特点:

  • 优点发送速度快
  • 缺点传输距离短资源占用多


单工通信、半双工通信、全双工通信


单工通信:只有一根数据线,通信只能在一个方向上进行(既就是只能一端发送数据另一端接收数据)
半双工通信:只有一根数据线,通信可以在两个方向上进行,但是不能同时进行(既就是两端都能发送和接收数据,但是不能同时既发送又接收数据)
全双工通信:有两条数据线,通信可以在两个方向上进行,可以同时进行发送和接收数据(既就是两根数据线都有发送器和接收器)

详细解释参考:https://blog.csdn.net/hai673580326/article/details/37819611?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-37819611-blog-8906060.pc_relevant_multi_platform_featuressortv2dupreplace&spm=1001.2101.3001.4242.1&utm_relevant_index=3


同步通信、异步通信


在串行通信中,由于是一位一位地进行数据传送。为了把每个字节区别开来,需要收发双方在传送数据的串行信息流中,加入一些标记信号位。在数据中根据所添加的标记信号位的不同方式,分成同步通信和异步通信两种。
同步通信:同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。
发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

异步通信:是一种很常用的通信方式(效率较低)异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。所传送的数据以字节为单位。每个字节前加上一位起始位,每个字节的后面加上停止位。好处:异步通信的好处是通信设备简单、便宜,但传输效率较低
发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

异步通信中的帧结构:      
START 位:  每帧以一个 START 位开始,并且始终为低电平。
数据位数据包:数据位可以是 5 到 9 位数据包。通常我们使用 8 位数据包,总是在 START 位之后发送。
STOP 位:可以是一位或两位。它在数据位包之后发送以指示帧的结束。停止位始终为逻辑高。

Note: 在异步串行通信帧中,第一个 START 位后跟数据字节和最后一个 STOP 位形成一个 10 位帧。有时最后一位也用作奇偶校验位。

异步通信采用应答方式(也称为握手方式):
异步通信的应答方式有三种:不互锁,半互锁,和全互锁。我们重新再举另外一个例子来说明这三种应答方式。你和张三在篮球场打球,你叫张三把球传给你。
你发出传球请求–>张三收到消息–>张三回复你“好”–>你接到球–>你回复张三“我接到球了”
不互锁
你发出传球请求,你不用等他回应你说“好”,只确定张三收到信息了,你就不再发出传球请求(撤销请求信号)。张三把球传给你,不用等你接到球再回复他“接到球了”,而是确定你接到球了,就(撤销回答信号)。
半互锁
你叫张三把球传给你,你要等他回应你说“好”,你才不发出传球请求(撤销请求信号)。张三把球传给你,不用等接到球再回复他“接到球了”,而是确定你接到球了,就(撤销回答信号)。
全互锁
你叫张三把球传给你,你要等他回应你说“好”,你再不发出传球请求(撤销请求信号)。张三把球传给你,要等你不再发出传球命令,才(撤销回答信号)。

不管是同步还是异步,字符的发送时间和接受时间要一样。如一个字符发送为1秒,接受也需要为1秒(小于一秒的话,利用软件延时)
同步异步最大的不同是:异步传输时,间隙可以不同步。比如,帧1传输完后 隔5秒传输帧2.间隙为5秒。再接受方,接受完帧1后,可以隔10秒再开始接受帧2. 而同步传输,间隙也必须一致。

详细解释参考:同步通信和异步通信的区别_赤云的博客-CSDN博客_同步通信和异步通信主要区别


常用的串口协议


UART(Universal Asynchronous Receiver/Transmitter)


通用异步收发器,是一种通用的串行、异步通用总线。该总线有两条数据线,可以实现全双工发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。

异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。

单片机有两个引脚是专门用来做 UART 串行通信的,它们分别叫做 RXD 和 TXD,由它们组成的通信接口就叫做串行接口,简称串口。

整个串口控制器包含transmitterreceiver两部分,这两部分功能彼此独立

transmitter由发送缓冲区和发送移位寄存器构成。我们要发送信息时,首先将信息进行编码(一般用ASCII码)成二进制流,然后将一帧数据(一般是8位)写入发送缓冲区(从这里以后程序就不用管了,剩下的发送部分由硬件自动完成),最后发送移位寄存器会自动从发送缓冲区中读取一帧数据,然后自动移位(移位的目的是将一帧数据的各个位分别拿出来)将其发送到Tx通信线上。

receiver由接收缓冲区和接收移位寄存器构成。当有人通过串口线向我发送信息时,信息通过Rx通信线进入我的接收移位寄存器中,然后接收移位寄存器自动移位并将该二进制位保存入我的接收缓冲区,接收完一帧数据后receiver会产生一个中断给CPU,CPU收到中断后即可知道receiver接收满了一帧数据,就会来读取这帧数据。

UART FIFO

  • 典型的串口设计,发送/接收缓冲区只有1字节,每次发送/接收只能处理1帧数据。这样在单片机中没什么问题,但是到复杂SOC中(一般有操作系统的)就会有问题,会导致效率低下,因为CPU需要不断切换上下文。
  • 解决方案就是想办法扩展串口控制器的发送/接收缓冲区,譬如将发送/接收缓冲区设置为64字节,CPU一次过来直接给发送缓冲区64字节的待发送数据,然后transmitter慢慢发送,发送完再找CPU再要64字节数据。但是串口控制器本来的发送/接收缓冲区是固定的1字节大小的,所有做了个变相的扩展,就是FIFO。CPU先将64字节的数据放到FIFO中,然后启动FIFO模式,FIFO每次会自动往发送缓冲区中添加1字节数据,最后进行移位操作传输数据。
  • FIFO,就是first in first out,先进先出。FIFO其实是一种数据结构,这里这个大的缓冲区叫FIFO是因为这个缓冲区的工作方式类似于FIFO这种数据结构。

细节参考:(77条消息) 串口通信UART_易风尘的博客-CSDN博客_uart串口通信

硬件连接

硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:

  • TX(发送数据pin):发送数据端,要接对面设备的RX
  • RX(接收数据pin):接收数据端,要接对面设备的TX
  • GND(接地pin):保证两设备共地,有统一的参考平面

软件通信协议

  • 起始位:起始信号一般由一个逻辑“0”的数据位表示
  • 数据位:在起始位后,紧接着的是传输数据的主体内容,即有效数据。通常有效数据的长度有5-8位长
  • 校验位:在有效数据之后,有一个可选的数据校验位。由于数据通信很容易收到外界干扰,导致数据传输出现偏差,因此,可以在传输过程中加上数据校验位来解决这个问题。校验方法有奇偶校验,0校验,1校验以及无校验
  • 停止位:停止信号可由1,1.5或2个逻辑“1”的数据位表示
  • 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
  • 波特率:用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的码元。(简而言之:串口传输的波特率即为每秒钟传输二进制的位数)常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。

以9600 8N1(9600波特率,8个数据位,没有校验位,1位停止位)为例,这是目前最常用的串口配置,现在我们传输’O’'K’两个ASCII值,'O’的ASCII为79,对应的二进制数据为01001111 ,'K’对应的二进制数据为01001011 ,传输的格式数据如下图所示:

串口波特率为9600,1bit传输时间大约为104us,传送一个数据实际是10个比特(开始位,8个数据位,停止位),一个bytes传输速率实际为9600*8/10=7680bps。


UART的延申USART


等待后续补充

通信协议基础以及常用的串口通信协议相关推荐

  1. 单片机中常用的串口通信协议帧

    单片机中常用的串口通信协议帧 前言 一.单片机串口简介 二.常用的通信协议类型 1.没有格式 2.帧头帧尾+数据 3.帧头帧尾+数据+附加功能码 4.帧头帧尾+数据+附加功能码+目标地址 5.帧头帧尾 ...

  2. 我也聊聊串口通信协议:用户层通信协议的编制

    1.闲话闲聊 最重要的写在前面:用户层通信协议就是数据包格式!!! 没有进行串口通讯实践的朋友可能会想:为什么要编制用户通信协议呢?通信过程中为什么要进行数据处理呢?在设计中编过串口通信程序的读者应该 ...

  3. stm32串口接收不定长数据_基于STM32之UART串口通信协议--接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

  4. 六种常用的物联网通信协议

    本文来自:http://www.ebyte.com/ 随着现在物联网设备的数量不断的增加,这些设备之间的通信连接也成了一个值得我们思考的课题.据预测,到2020年物联网的设备数量将达到204亿台.我们 ...

  5. c语言单片机串口通讯,单片机C语言之串口通信协议

    串口通信概述 串口通信指串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据. 常用三种串口通信协议 1.RS-232 RS ...

  6. 串口通信协议简介—学习笔记

    串口通信协议简介-学习笔记 文章目录 串口通信协议简介-学习笔记 一.串口.COM口.UART口, TTL.RS-232.RS-485区别详解 1.物理接口形式 2.电平标准 2.1 **TTL** ...

  7. 自定义串口通信协议,如何实现?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 有一些初学者总觉得通信协议是一个很复杂的知识,把它想的很高深,导致不知道该怎么学. 同时,偶尔有读者 ...

  8. 如何实现自定义串口通信协议?

    有一些初学者总觉得通信协议是一个很复杂的知识,把它想的很高深,导致不知道该怎么学. 同时,偶尔有读者问关于串口自定义通信协议相关的问题,今天就来写写串口通信协议,并不是你想想中的那么难? 1什么通信协 ...

  9. 单片机c语言串口通信协议实现,单片机C语言之串口通信协议

    串口通信概述 串口通信指串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据. 常用三种串口通信协议 1.RS-232 RS ...

最新文章

  1. cookie 和 session 机制
  2. BugkuCTF-MISC题乌云邀请码
  3. Eclipse添加SVN插件:导入项目+上传项目+更新项目
  4. ajax请求数据 ztree_ajax 异步获取数据填充到表格显示(ajax) 文档(Options API) DataTables中文网...
  5. (33)Verilog HDL缩减运算
  6. laravel框架学习(三)
  7. 蓝桥杯笔记:DFS(深度优先搜索)解决问题
  8. datagrid编辑单元格中的内容
  9. SIP - pjsip Linux Windows 编译安装
  10. 自媒体平台数据统计分析爬虫系列教程文档
  11. zip 的ZipEntry转换为InputStream
  12. itunes备份文件夹更换
  13. IDOC的处理函数IDOC_INPUT_ORDERS的增强点的分析
  14. Windows 语音引擎TTS修复
  15. MathType的配置问题;将word中的公式转换为mathtype格式失败,缺少OMML2MML.XSL
  16. android 设置webview的浏览器标识 User-Agent
  17. suse bios版本_如何检查和更新BIOS版本
  18. 超级详细树讲解三 —— B树、B+树图解+代码
  19. 东北育才 d1t1 优雅的序列
  20. 对比两个Json对象是否一致

热门文章

  1. form表单AJAX提交
  2. WPF中CefSharp的使用(在WPF中使用快乐的使用chrome)
  3. Android Google Services Framework Google Play
  4. checkbox 设置默认选中
  5. 【异常】java: Internal error in the mapping processor: java.lang.NullPointerException
  6. 修改PyCharm的背景颜色
  7. Dilated Convolutions——扩张卷积
  8. 单片机的智能垃圾桶设计
  9. mysql 值很少的索引_关于 Mysql 字段值分布很少的字段要不要加索引的问题.
  10. 【数据结构】算法的时间复杂度和空间复杂度解析