常用基本通信协议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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?