常用基本通信协议UART/I2C/SPI对比

这三种协议的参数对比如下

协议 引脚  同步异步  方向  大端小端  速率
 UART  TXD/RXD  异步  全双工  小端  baud rate: 9600/115200
I2C   SCL/SDA  同步  半双工 大端   100kbps/400kbps/3.4Mbps
SPI   MOSI/MISO/SS  同步  全双工 小端   比I2C快

由上图,我们可以看出,只要是同步通信方式,那么必定会存在一根时钟线,而如果是全双工的方式,那么就会有两条数据线,一收一发。

 

UART

  空闲时信号线维持高电平,以拉低1拍表示起始位,然后是8位数据位,截止位为1拍高电平,协议并未固定数据位为8位,数据位后还有可选的奇偶校验位,如下

 

 

I2C

  SCL为高时拉低SDA表示开始,续8个上升沿进行数据采样,外接一个应答位,从机应答并非强制需求,在SCL为高时SDA拉高表示结束。I2C属于总线协议,一主多从,传输数据前需要先发送从机ID与读写标志,后续接读写数据,最后为截止符,读写数据可连续。下面取两张我另一个I2C读写EEPROM博客里的时序供参考 https://www.cnblogs.com/qingkai/p/9803070.html

写时序

 

读时序

 

 

 

SPI

  SPI作为一个总线,从机的选择通过SS(slave select)实现,片选拉低后,接受端立刻可以开始采集数据,附上一部AD网站的图https://www.analog.com/cn/analog-dialogue/articles/introduction-to-spi-interface.html

 

posted @   自由的青  阅读(1333)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示