原创 SPI、I2C、UART三种串行总线协议的区别

2008-1-18 10:33 5483 4 4 分类: 通信
第一个区别当然是名字:
    SPI(Serial Peripheral Interface:串行外设接口);
    I2C(INTER IC BUS:意为IC之间总线)
    UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)

第二,区别在电气信号线上:
    SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
    如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。

    I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
    如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备)

    UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
    显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。

第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;

第四,看看牛人们的意见吧!
    wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
    quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。

文章评论0条评论)

登录后参与讨论
相关推荐阅读
wangyd_sea_932904099 2009-06-12 14:53
cy7c68013 usb 开发经验(转)
经验1:快速获取资料如果直接从 http://www.cypress.com/  网站进入搜索资料则速度很慢,如果点击如下连接则速度比较快。CY7C68013A 资源下载地址:http://app.c...
wangyd_sea_932904099 2009-05-22 09:23
一个比较重要的驱动函数的讲解(74HC595)
一个比较重要的驱动函数的讲解(74HC595)概述     74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过...
wangyd_sea_932904099 2009-05-22 08:44
嵌入式程序员应知道的几个基本问题
嵌入式程序员应知道的几个基本问题    预处理器(Preprocessor)   1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)      #define S...
wangyd_sea_932904099 2009-05-20 11:33
Windows CE OAL层的结构与开发
Windows CE OAL层的结构与开发 收藏  Windows CE是微软针对嵌入式领域推出的一款全新的操作系统。之所以说它是一款全新的操作系统,是因为尽管Windows CE的UI非常接近其它的...
wangyd_sea_932904099 2009-05-20 10:39
wince驱动开发学习笔记
因为课题前期调研没做好,用的CPU板卡和数据采集卡来自两个部门。加上买的是裸板,自己定制的OS,技术支持不爱搭理。所以给的AI板卡的驱动一直装不上,自己在郁闷中寻找答案,就扎进了wince驱动的知识库...
wangyd_sea_932904099 2009-05-20 10:32
Windows CE 下I/O操作基础
对外设进行 I/O 操作实际上也就是读写外设的寄存器,而我们通常使用的X86或者ARM处理器在硬件上决定了wince系统启动后,无法直接访问物理地址,因此需要做一些工作来实现I/O操作.<?xm...
广告
我要评论
0
4
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /5 下一条