当前位置: 首页 > news >正文

UART ,IIC 和SPI三种总线协议

1.UART

1.1 简介

UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器。

常见的串行、异步通信总线,两条数据线Tx、Rx,实现全双工通信,常用于主机与外设的通信,点对点。

1.2 硬件连接

交叉连接

1.3  串口数据帧格式

1、起始位:发送1位逻辑0(低电平),开始传输数据。
2、数据位:可以是5~8位的数据,先发低位,再发高位,一般常见的就是8位(1个字节),其他的如7位的ASCII码。
3、校验位:奇偶校验,将数据位加上校验位,1的位数为偶数(偶校验),1的位数4为奇数(奇校验),【校验位可有可无,根据需求选择】
4、停止位:停止位是数据传输结束的标志,可以是1/1.5/2位的逻辑1(高电平)。
5、空闲位:空闲时数据线为高电平状态,代表无数据传输。

发送的波特率和接受的波特率要保持一致,且为了避免累计误差,不能连续发送多个字节,这就是数据最多发送8位的原因。

比特率的概念

UART传输速率的概念——比特率。

比特率的单位是bps,全称是bit per second,意为每秒钟传输的bit数量。

比特率9600bps,代表每秒钟传输bit的数量为9600,那么传输1bit数据的时间就是1/9600=104us,比特率115200bps,代表传输1bit数据的时间是8us。

 1.4 实现方式

1.4.1 UART寄存器配置

(1)设置发送引脚和接收引脚

(2)设置UART帧格式

(3)设置UART发送发送和接收模式

(4)设置UART的波特率

1.4.2 发送数据

(1)等待发送寄存器为空

(2)将发送的数据写入发送寄存器

1.4.3 接收数据

(1)判断接收寄存器是否接收到了数据

(2)如果接收到,则读取到寄存器

一般在开发中很少直接用串口进行编程,因为它存在很多问题,在实际应用中,通常用优化的UART:RS232、RS485

1.5 UART存在的问题

1、电气接口不统一

 UART只是对信号的时序进行了定义,而未定义接口的电气特性

(1)UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便

(2)UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异,所以不同的处理器使用UART通信时一般不能直接相连。

2、抗干扰能力差

一般直接使用TTL(+5V等价于逻辑“1”,0V等价于逻辑“0”)信号表示0和1,但是TTL信号抗干扰能力较差,数据在传输过程中很容易出错。

3、通信距离极短

由于TTL信号的抗干扰能力差,所以其通信举例也很短,一般只能用于一个电路板上的两个不同芯片之间的通信。

2.IIC

2.1 简介

I2C总线为两线制,只有两根双向信号线。一根是数据线SDA,另一根是 时钟线SCL。 IIC支持多主机多从机通信和一主机多从机通信。 I2C具有串行、半双工、硬件结构简单、成本低、应用广泛、非点对点通信等特点。

2.2 硬件连接

把芯片的SCL接到总线SCL上,把芯片的SDA接到总线SDA上。

IIC总线是一种多主机总线,连接在总线的器件分为主机和从机,主机有权发起和结束一次通信,而从机智能被呼叫。

当由多个主机同时启用总线时,IIC也具有冲突检测和仲裁的功能来防止错误的产生。

每个器件都可以作为主机或者从机,但是同一时刻只能由一个主机。总线上增加和删除器件,不影响其他器件正常工作。

每一个连接到IIC总线上的器件都有一个唯一的地址(7bit)。

一个器件,当它接收数据的时候是作为接收器,发送数据的时候作为发送器。

2.3 通信过程

2.3.1 IIC的信号

i2c总线是一种同步通信总线,也就表示通信双方的通信过程要在各种时钟信号的作用下实现。

起始信号、终止信号、应答信号、非应答信号、数据接收和发送信号

起始信号:SCL为高电平时,SDA由高变低表示起始信号

停止信号:SCL为高电平时,SDA由低变高表示停止信号

字节传输与应答

IIC总线通信时每个字节为8位长度,数据传输时先发高位、再发低位。

发送器每发完一个字节数据,接收器必须发送1位应答位来回应发送器,即一帧共有9位。

IIC总线协议:

  1. 主机发起起始信号
  2. 主机发送7bit从机地址+1bit读写标志
  3. 从机回应应答信号
  4. 发送方发送数据
  5. 接收方应答
  6. 发送方发送数据
  7. 接收方应答
  8. .....
  9. 主机发起终止信号,通信结束

3.SPI

3.1 简介

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术。其特点是高速、同步、串行、全双工、非差分、总线式、主从机通信模式、通信简单、数据传输率快。没有应答机制确定是否收到数据,可靠性较IIC差。

 3.2 硬件连接

SPI总线通信存在四根数据线进行连接:

(1)SDO/MOSI:主设备数据输出,从设备数据输入

(2)SDI/MISO:主设备数据输入,从设备数据输出

(3)SCLK:时钟信号,由主设备产生

(4)CS/SS:从设备使能信号,由主设备控制

当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。

 

3.3 SPI四种模式

SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA
是用来配置数据采样是在第几个边沿:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

http://www.lryc.cn/news/527490.html

相关文章:

  • Padas进行MongoDB数据库CRUD
  • 动手学图神经网络(6):利用图神经网络进行点云分类
  • C语言从入门到进阶
  • Python中容器类型的数据(下)
  • MySQL 用户相关的操作详解
  • 如何删除hugging face dowloaded的llm model?
  • Vue 封装http 请求
  • 恒源云云GPU服务器训练模型指南
  • Spring Boot应用中实现基于JWT的登录拦截器,以保证未登录用户无法访问指定的页面
  • MySQL 基础学习(1):数据类型与操作数据库和数据表
  • zyNo.19
  • Kafka生产者ACK参数与同步复制
  • IPhone14 Pro 设备详情
  • 【Linux】磁盘
  • Shell编程(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)
  • 强化学习数学原理(三)——值迭代
  • Day27-【13003】短文,什么是栈?栈为何用在递归调用中?顺序栈和链式栈是什么?
  • [JMCTF 2021]UploadHub
  • C++学习——认识和与C的区别
  • 为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
  • 基于SpringBoot的网上摄影工作室开发与实现 | 含论文、任务书、选题表
  • Flutter子页面向父组件传递数据方法
  • 回顾Maven
  • 除了layui.js还有什么比较好的纯JS组件WEB UI?在谷歌浏览上显示
  • 力扣111二叉树的最小深度(DFS)
  • c++学习第十三天
  • zookeeper-3.8.3-基于ACL的访问控制
  • Java定时任务实现方案(四)——Spring Task
  • WGCLOUD运维工具从入门到精通 - 如何设置主题背景
  • Babylon.js 中的 setHardwareScalingLevel和getHardwareScalingLevel:作用与配合修改内容