串口通信协议

2023-05-16

概念

       串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
       串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据

常见的串行通信协议

1.UART(异步全双工)

       UART是通用异步收发传输器,使用RxD和TxD两根线实现异步全双工通信;为确保通信可靠,可以在通信两边接共地;因此,完整的UART通信只需最少3根线即可。

       UART是串行通信,利用一条传输线(RX,TX)将数据按bit进行顺序传送,特点是通信线路简单,成本低,适用在需要远距离传输,但对速率要求不高的应用场景

       RxD是发送数据线,TxD是接收数据线,通信双方使用交叉互联,RxD接对方TxD,TxD接对方RxD。UART使用标准的TTL/CMOS电平(05V,03.3V,02.5V,01.8V)来表示数据,高电平表示1,低电平表示0.为了增强抗干扰能力,提高传输长度,可将TTL/CMOS 电平转换为RS232电平逻辑电平,312V表示0,-3-12V表示1(RS232为负逻辑)

1)UART平时处于空闲状态,逻辑1状态。

2)当有数据发送时,先发送起始位,即将TxD拉低并维持1位时间,接收方在检测到起始位下降沿,等待1.5位后开始一位一位检测数据。

3)发送数据,UART数据一帧可以是5,6,7,8位等,一般是8bit,一个字节。数据发送是先发送低位,依次发送,直到最高位。

4)可以使用0或者1bit的校验位,校验位可以是奇校验或者偶检验。奇校验:数据加校验位中1的个数为奇数;偶校验:数据加校验位中1的个数为偶数。

5)最后是停止位,数据线恢复到空闲状态,停止位可以是1,1.5,2位。

UART的数据形式

在这里插入图片描述
       UART传输的数据会被封装为数据包,数据包包含1bit起始位,5~8bit数据位(取决与设备UART的具体设置),一个奇偶校验位(可选),以及1个或2个停止位。

起始位:UART数据传输线在空闲时保持高电平,当设备发出低电平信号时,表示数据的开始。

停止位:UART数据传输线从低电平状态向高电平转换,不过至少需要持续两位数据的时间宽度,才表示整个数据包的传输已经结束。并且由于数据是在传输线上定时的,不同的设备之间可能时钟存在偏差,偏差的积累可能会导致数据位的传输错误,所以数据定时发出停止位可以有效校正时间的偏差,停止位越多,校正的效果越好。

数据位:数据位的宽度可能有5,6,7,8位,一般8位会用的比较广泛(跟ACSII码有关,一个ASCII字符为8bit)。

校验位:是UART中一种简单的检错方式,一般有四种校错方式:偶校验,奇校验,高校验,低校验。对于奇偶校验的情况,串口会设置校验位(数据位的后一位),用1bit来校验数据有偶数个还是奇数个的逻辑高电平。比如如果数据位为00011,偶校验位就是0,为了保证数据位+校验位总数偶数的个数加起来为偶数。不过,校验位不是必须有,属于可选项。

在停止位之后,可能还会有空闲位,空闲状态时的信号处于高电平,即“1”,表示当前线路上没有数据传输。所以停止位开始的时候就能被有效检测到。

UART传输速率较慢,一般在20kbit/s到10Mbit/s之间,低速率的情况被使用的更多。

2.I2C(同步半双工)

       与UART不同,I2C 是同步半双工通信协议。I2C使用SCL,SDA两根双向数据线进行通信,同时为了支持线与逻辑,需要使用开漏输出,同时使用上拉电阻;上拉电阻大小常见的有1.8K,4.7K,10K;在低速场合,为了降低功耗,可以使用10K上拉电阻,1.8K的上拉电阻具有最好的性能,可满足较高速的应用。I2C常见的通信速率有普通:100K,快速:400K,高速:3.4M。I2C最大的从机数量受从机地址和最大总线电容400pF电容的限制。I2C的数据帧格式如下:

开始位 | 7bit从机地址 | 1bit读写方向位(0写,1读) | 1bit应答 | 8bit数据1 | 1bit应答1| 。… | 8bit数据N |1bit非应答N | 停止位 。

空闲状态:空闲时,SCL,SDA同时处于高电平。此时,各器件的输出场效应管处于截止状态,释放总线,总线信号由上拉电阻上拉至高电平。

开始START:SCL为高电平时,SDA有下降沿。

数据传输:数据传输已字节为单位,第一个字节表示从机地址+读写方向,后续数据格式由器件自己定义。数据传输中,SDA的只能在SCL低电平时变化,并在SCL上升沿进行数据采样。

应答:每发送一个字节后,接收方必须回应答信号ACK,但发送最后一个字节后,回非应答信号NACK。

停止STOP :SCL为高电平时,SDA有上升沿。

握手机制:I2C提供握手机制,当主机速度太快而从机无法满足快速通信时,从机可以拉低SCL来与主机握手,从而延长SCL低电平的时间。(SCL高电平由所有器件发出最短的高电平决定,低电平则有低电平最长的决定)。

仲裁:SDA是线与逻辑,因此,只要有一端输出低,总线就为低电平,因此是低电平优先仲裁。仲裁规则是发送低电平个数多的主机获得总线权。

由于I2C通信的方向性,在一次通信中不能改变数据流方向,因此读过程中需要一次dummy写过程:
dummy写完后,在restart,然后将数据流方向改为读,接着就可以读取从机数据内容了。

3.SPI(同步全双工)

SPI是同步全双工串行通信协议。SPI定义了4根信号线:

SCK:时钟线,主机提供

MISO:主入从出

MOSI:主出从入

SS:片选。

片选信号可选,因此通信最少需要3根信号线。SPI在时钟上升沿下进行双向数据交换,主机在输出的同时,也会接收到从机的数据。在设计上,主机从机均需要一个移位寄存器。SPI不区分读写方向,只进行数据交换,要读也必须写,才能将数据交换过来。

SPI通过时钟极性和时钟相位定义了4种通信模式:

时钟极性CPOL:0:空闲时SCK为0,1:空闲时SCK为1.

时钟相位CPHA:0:数据在第一个时钟跳沿采样(可能是上升沿,可能是下降沿,与CPOL有关),1:数据在第二个时钟跳沿采样(可能是上升沿,可能是下降沿,与CPOL有关)。

若在上沿采样,则数据在下沿输出,因此数据能够稳定的被采样。

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

串口通信协议 的相关文章

  • Autosar系列之Ports类型

    文章目录 一 接口二 接口类型三 S R接口四 C S 接口 一 接口 接口是连接2个SWC通信的 二 接口类型 三 S R接口 发送 接受数据传输接口 一般通过全局变量才传递 四 C S 接口 客户 服务接口 xff1b 通过函数Runn
  • Autosar系列之Runnable可运行实体

    文章目录 一 RUnnable Entity 一 RUnnable Entity 可运行实体 xff0c 其实就是 C文件内的函数而已 一个SWC可以包含多个Runnable Entity xff0c 就是一个 C文件中可以包含多个函数 x
  • Autosar系列之RTE

    文章目录 一 RTE二 RTE功能 一 RTE RTE Run TIme Environment 是Autosar体系结构的核心 RTE是Autosar软件架构中 xff0c 介于应用层和基础软件层之间 xff0c 是Autosar虚拟功能
  • Autosar系列之Autosar应用层整体入门

    文章目录 一 整个功能示意图二 软件组件SWC分类三 SWC组件 xff1a ports1 发送 接收端口Sender Receiver2 客户端 服务端端口Client Server 四 可运行实体Runnables五 BSW1 微控制器
  • ubuntu下mysql数据库的设置

    gt su root gt mysql span class token operator span u root span class token operator span p gt show databases span class
  • Python装饰器Decorators

    文章目录 一 功能二 64 语法糖三 args kwargs四 带参数的装饰器五 类装饰器六 装饰器顺序 一 功能 装饰器本质上是一个 Python 函数或类 xff0c 它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能 xf
  • Autosar系列之Developer工具

    文章目录 一 什么是DaVinci Developer xff1f 二 DaVinci Developer Workspace三 Software Conponent xff08 SWC xff09 Design 一 什么是DaVinci
  • vscode中调试rust程序

    文章目录 一 vscode运行和调式rust程序二 常见问题1 rust Request textDocument formatting failed 2 cargo命令3 使用rust gdb调试rust程序4 cargo build太慢
  • Available-Python-Tuf

    文章目录 一 Pyhon tuf二 安装方法三 启动四 一个可用的Python Tuf 一 Pyhon tuf 1 github link 向该Pyhton tuf的repo server上传包不会持久化保存到本地 xff0c 是个demo
  • 现代C++教程2023

    文章目录 2 C 43 43 默认实参21 模板模板形参22 C 43 43 11形参包24 std nothrow25 std call once与pthread once 2 C 43 43 默认实参 21 模板模板形参 模板参数 xf
  • Python模板字符串Template

    文章目录 一 Template说明二 Python字符串替换的几种方法1 适用于变量少的单行字符串替换2 字符串命名格式化符替换3 模版方法替换 一 Template说明 1 定义字符串 根据需要 xff0c 设置字符串中需要替换的字符以
  • 聊一聊MCU的软件分层

    一 MCU级软件有必要分层吗 xff1f 1 1 如果不分层会怎样 xff1f 看下面这段示例代码 void main sys init while 1 用PA1控制LED亮灭 GPIO SetBits GPIOA GPIO Pin 1 d
  • Spring Security OAuth2.0认证授权一:框架搭建和认证测试

    一 OAuth2 0介绍 OAuth xff08 开放授权 xff09 是一个开放标准 xff0c 允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息 xff0c 而不 需要将用户名和密码提供给第三方应用或分享他们数据的所有内容

随机推荐