串口通信协议

本文介绍了三种常见的串行通信协议:I2C使用两根线进行双向通信,包括起始和停止信号,数据由主机发送,从机响应;SPI有四条线,支持同步数据传输,每个从机需独立的SS线;UART则通过两条线进行数据传输,采用起始位、数据位、校验位和停止位的格式。各种协议各有优缺点,如I2C利用开漏输出实现多设备共享,SPI提供高速传输,UART则仅需两条线但速度较慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I2C

总线有两根双向数据线,一根是数据线 SDA,一根是时钟先 SCL

数据格式

起始位+七位地址字节+一个读/写位+数据字节+一个应答+一个停止位

数据是八位的

主机或从机会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据

0 写 1 读

应答信号   是从机给主机的,0表示没收到,1表示收到了

空闲: SDL  SCL都是高电平

起始信号   SCL 高      SDL由高变低的跳变(跳低)

停止信号 SCL 高   SDL由低变高的跳变(跳高)

主设备在SCL线上产生一个时钟脉冲,将SDL线上传输一个数据位,当一个字节数据传输完之后,从设备将拉低SDA线,回传给主设备一个应答位,这就是一个字节的真正传输

一般操作

发送两次起始信号的目的是在读取操作期间,将总线上的数据方向正确切换。第一次起始信号将写入信息到从机中(第一次通信),第二次起始信号(第二次通信)是往主机传输写入

注意读过程第二次通信发送要读取的从机地址(本质上是操作系统将从机寄存器上的值写入主机)

在连续读(或者写的时候)地址会递增(要读取或者写入寄存器的地址),意思是我们在第一次读写的是提供一个起始地址,后续连续读写会自己往一个内存进行

当SCL高,SDA从高变低,就是START

当 SCL 高,SDA从低变高,就是STOP

主机将地址发送到总线上,从设备匹配上就会做出回应

开漏输出和推挽输出的区别?iic为什么要用开漏输出

SDA 和SDA必须都是(开漏+上拉)

推挽输出是高低电平都具有驱动能力

开漏输出,实现多设备共享总线

高电平没有驱动能力需要借助上拉电阻完成对外驱动

SPI

模拟spi 数据帧格式 8位地址+8位数据

四条线

SCLK :串行时钟,用来同步数据传输,由主机输出

MISO:主机输入,从机输出(数据来自从机)

MOSI: 主机输出,从机输入(数据来自主机)

SS:片选,片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号)

每个从机都需要一条单独的SS线

信号采集四种方式

1、只有时钟信号是上升沿(1),数据(mosi)采集才有效

 2、只有在时钟的下降沿有效

数据格式

八位数据位

起始:

终止:

spi数据通信的流程

1、主设备发起信号,将cs/ss拉低,启动通信

2、主设备通过发送时钟信号,来告诉从设备进行读写操作,它将立即读取数据线上的信号,这样就得到了一位数据

3、主机将要发送的数据写到发送数据缓存区,缓存区经过移位寄存器,串行移位寄存器通过MOSI信号线将字节一位一位的的移动到接收缓存区

4、从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机,同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就可以交换

数据传输

在SPI一个周期内,完成如下操作

1、主机通过MOSI线发生1位数据,从设备通过这根线读取这1位数据

2、从机通过MISO线发送1位数据,从设备通过这根线读取这1位数据

3、时钟使能线,当要和某个从设备通信就将之使能

这是通过移位寄存器实现的,主机和从机各有一个移位寄存器,且二者连接成环

UART(只能两个设备之间通信)

RXD、 TXD 以及 GND 三条信号线,直接传输数据信号

 

 数据是先发送低位再发送高位,发送0先拉低电平一段时间再发送,发送1先拉高电平一段时间再发送

数据构成:起始位+ 数据位 + 校验位 + 停止位

  • 奇校验:如果数据位中的二进制值中1的个数为偶数,则校验位被设置为1,以保证整个数据(数据位+校验位)中1的个数为奇数。
  • 偶校验:如果数据位中的二进制值中1的个数为奇数,则校验位被设置为1,以保证整个数据(数据位+校验位)中1的个数为偶数

数据包的内容由起始位、主体数据、校验位、停止位组成,通讯双方的数据包格式以及波特率要约定一样

·1、接口

UART仅通过两条TXD和RXD用于数据发和收

SPI、I2C和UART

优缺点

1、只使用两条信号线,不需要时钟线,有校验位进行错误检测

2、传输速率比较慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值