1.引言
UART、I2C(IIC)与SPI可以说是在嵌入式操作系统中最常见的三种通信协议,那么,这三种通信协议孰优孰劣呢?
正所谓:“梅须逊雪三分白,雪却输梅一段香”。在信息迅速迭代的今天,这三种通信协议仍然能在嵌入式开发中占有绝对的优势,肯定都有着各自的看家本领,很多时候这三种通信协议的选择,是出于主控芯片(有可能是单片机)本身的接口数量和从机芯片本身具有的通信协议出发的。
关于这几个通信协议的具体介绍请参考下面链接:
2.协议对比
具体可以从一下几个方面进行对比:
- 从传输速度来看,UART是比较慢的,不过有很多个波特率可以设置,因在UART中,波特率=比特率,因而可以很方便地与其他二者进行比较。UART有很多种波特率可以设置,最常见的是
9600
和115200
;IIC有两种模式,标准模式和快速模式,标准模式下可达100Kb/S,快速模式下最快400Kb/S;SPI最快可达上百MHz,直接碾压前面两种。 - 从传输线来看表面上SPI是最浪费传输线的,但其实有个问题,就是一般情况下
UART
只支持一对一传输,而其他两种传输协议则支持一主多从数据传输,所以综合来看,传输线的数量应该是UART最少。 - 数据可靠性是个很重要的指标。一般在很多系统中,快和准一直是一对矛盾。传输协议也不例外。虽然SPI传输速度非常快,但这也意味着数据的准确性得不到保证。UART有奇偶校验,而I2C有应答机制,都以一种优雅的方式解决了这个问题,但这点在SPI上缺并未体现。
- 最后便是同步和异步的问题,UART支持异步传输,而I2C和SPI只支持同步传输。
特别地:
- UART也可以实现“一主多从”,但这个时候需要借助硬件使其进行
RS485
通讯,而且有个好处,就是软件部分基本不需要改什么东西(对比原来的UART),提升了开发效率,且RS485通讯距离很远,由于采用差分信号的传输方法,可以大大抑制共模干扰。最远可以传输1000
多米。 - UART是软件开发中程序调试的重要手段,因为并不是所有的嵌入式开发都可以有工具进行
debug
调试。 - I2C传输协议需要外接上拉电阻,这个时候电阻值就显得尤为重要,有时候会因为电阻值取得不合理而导致通信失败或通信数据异常。
--------------------------------------------------------------------------------END-----------------------------------------------