uart、spi和i2c协议对比
三种外设协议的不同点
协议 | 名称 | 是否独立 | 目的 | 使用线数 | 异步或同步 | 并行或串行 | 其他 |
---|---|---|---|---|---|---|---|
uart | 通用异步接收器/发送器 | 微控制器中的物理电路或独立的IC | 发送和接受串行数据 | 2条 | 异步 | 串行 | 发送和接收UART之间的波特率只能相差约10% |
spi | 串行外设接口 | 否 | 发送和接受串行数据 | 4条 | 同步 | 串行 | 无中断传输数据,可以在连续流中发送或接收任意数量的位。使用I2C和UART,数据以数据包的形式发送,限制为特定位数。开始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中被中断。 |
i2c | 集成电路总线 | 否 | 发送和接受串行数据 | 2条 | 同步 | 串行 |
协议 | 速度 | 最大主设备数 | 最大从设备数 | 先发送最高位或最低位 | 开始位 | 数据位 | 奇偶校验位 | 停止位 | 空闲时 | 时钟线 | 缺点 |
---|---|---|---|---|---|---|---|---|---|---|---|
uart | 1200x2**(0-5)/57600 | 1 | 1 | 一般最低位 | 1bit | 5-8/9bit | 0-1bit | 1-1.5-2bit | 高 | 无 | 无法确认是否已成功接收数据 |
spi | 最高可达10Mbps | 1 | 理论上无限 | 一般最高位 | - | - | - | - | 根据极性决定 | 有 | 没有任何形式的错误检查,如奇偶校验位,无法确认是否已成功接收数据 |
i2c | 100k、400k、1M、3.4M、5M | 多主 | 多从 | 一般最高位 | 起始信号 | 地址位7/10位、数据位8位 | 应答信号 | 停止信号 | 高 | 有 |
协议 | 单工半双工全双工 |
---|---|
uart | 全双工 |
spi | 全双工 |
i2c | 半双工 |
UART的优缺点
优点
1.仅使用两根传输线
2.无需时钟信号
3.具有奇偶校验位以允许进行错误检查
4.只要双方都设置好数据包的结构,即可改变其数据包结构
缺点
1.数据帧的大小最大为9位
2.不支持多个从属系统或多个主系统
3.每个UART的波特率必须在彼此的10%之内
UART传输协议的特点如下:
1.因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。如果要解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步;
2.双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位);
3.传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步。
4.串口协议通常会首先发送最低有效位;
5.异步串行工作得很好,但是在每个字节发送的时候都需要额外的起始位和停止位以及在发送和接收数据所需的复杂硬件方面都有很多开销。
6.不难发现,如果接收端和发送端设置的速度都不一致,那么接收到的数据将是垃圾(乱码)。
SPI总线的优点与缺点
优点
1.无起始位和停止位,因此数据位可以连续传输而不会被中断
2.没有像I2C这样复杂的从设备寻址系统
3.数据传输速率比I2C更高(几乎快两倍)
4.分离的MISO和MOSI信号线,因此可以同时发送和接收数据
缺点
1.使用四根信号线(I2C和UART使用两根信号线)
2.无法确认是否已成功接收数据(I2C拥有此功能)
3.没有任何形式的错误检查,如UART中的奇偶校验位
4.只允许一个主设备
SPI的优点
1.全双工串行通信;
2.高速数据传输速率。
3.简单的软件配置;
4.极其灵活的数据传输,不限于8位,它可以是任意大小的字;
5.非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
SPI的缺点
1.没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
2.通常仅支持一个主设备;
3.需要更多的引脚(与I2C不同);
4.没有定义硬件级别的错误检查协议;
5.与RS-232和CAN总线相比,只能支持非常短的距离;
SPI和IIC的对比
SPI是全双工,而IIC是半双工。
IIC支持多主机多从机模式,而SPI只能有一个主机。
从GPIO占用上来看,IIC占用更少的GPIO,更节省资源。
SPI的数据位宽更灵活,可以根据需要选择多位数据宽度。
SPI协议没有响应机制,主机无法得知从机是否接收到所发的数据,如果不采取一些方法的话可能会导致数据丢帧。
正是因为没有复杂的响应机制,SPI协议可以做到非常高的速率(上百兆),每一个SCK都可以进行数据的传输,通过引入CRC校验等校验方法,可以即高速传输数据,又能保持数据的准确度。
IIC通过器件地址来选择从机,从机数量的增加不会导致GPIO的增加,而SPI通过CS选择从机,每增加一个从机就要多占用一个GPIO,当然也可以通过加入译码器来实现多从机控制。
SPI协议在SCLK边沿进行采样,IIC在SCL高电平器件进行采样。
两者大多都应用于板内器件短距离通讯。
SPI和I2C的对比
I2C是半双工,SPI是全双工。
I2C支持多主多从模式,而SPI只能有一个主机。
从GPIO占用上来看,I2C占用更少的GPIO,更节省资源。
I2C有应答响应机制,数据可靠性更高,SPI没有应答机制。
I2C速率不会太高,最高速率3.4Mbps,SPI可以达到很高的速率。
I2C通过器件地址来选择从机,从机数量的增加不会导致GPIO的增加,而SPI通过CS选择从机,每增加一个从机就要多占用一个GPIO。
SPI协议在SCLK边沿进行数据采样,I2C在SCL高电平期间进行数据采样。
两者大多都应用于板内器件短距离通讯。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架