找回密码
 注册
关于网站域名变更的通知
查看: 593|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-13 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

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

. v8 O3 S7 n. I$ O. W) P0 v
7 M, E8 n) k- z& N4 z) L# B第一个区别当然是名字:
9 [" L! X# M) i' t4 U4 p" E7 ^8 Q
     SPI(Serial Peripheral InteRFace:串行外设接口);; T7 ]! W0 ]9 N' M

; t( W( P2 A7 r! i7 a; R. V     I2C(INTER IC BUS)
' T& C8 ?' {1 X7 ~* S3 t* ^+ U: S. B. A2 k. Y9 U
     UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)6 e; b# \5 L1 B
4 B; r) `! H1 i9 x6 n: \& ^- j
第二,区别在电气信号线上:
/ _# x% s+ @& V! N
5 \6 Y: r+ l! z. Z: \* }' ^. F     SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
% Z) x- a; V) ^4 P8 C& `
( u& O# ^. h% l* `3 q3 T- ]2 k     如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
1 U" |# N8 s. p+ S
  u$ G6 G+ f& {+ N7 W8 X     I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。& a$ y- }% P, C- S

+ f8 j- m& j) F4 n     如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备)
" ^* {7 |* v8 W1 Z9 y2 B4 }2 C& f& z" K! o5 Z) n) ?" d% v; C, V
     UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
; m  e9 Q( p2 D, c( \. ]6 V
6 k; \" q, R- n1 j! S# K  V* f; R     显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。* H* q, S! ?' B0 w
' i2 M1 e1 Q  P' R# G+ W
第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;  W* D. i) V5 A6 f* T5 }
7 [) l! y5 e+ M. z8 q
第四,看看牛人们的意见吧!
4 p2 |5 H* ~6 g! a
' A' K# F' b- i1 ]; U3 O+ e     wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
" ]& t3 c2 L3 f$ v" T  F* ?% H; }& A! o# y3 x# k" V+ L0 ]
     quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。
( }/ O$ ~  d2 l4 o- K
7 ?7 c# y& X: K6 s5 x6 NSPI接口介绍(转)
: _& c3 U2 s+ w; ~/ e* h) w% ?) ?这几天碰到了使用SPI接口的flash,才知道flash还可以是串行的,看来以前真是井底之蛙啊,找了一些SPI接口的资料都不全,后来找到一点英文资料,翻译了一下,加上我的个人理解,凑成一篇了,希望对初学者有点帮助。
3 V4 V: k+ |. l0 |6 W* o& Y& y- z) Y6 ~
   SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
3 e0 _  g( x( z) }; s, p/ Y
/ i% X: J: }, {5 O$ |' U% s6 ^7 Y   SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。* X/ f3 B" a( v$ l8 v9 Z
' T# A5 G9 s5 k& Y1 j% c2 a
   SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:
9 @1 a  V+ \' }/ R) P# x5 J3 ~6 Q) t( a3 G3 {/ o) |
(1)MOSI – 主器件数据输出,从器件数据输入
4 T* m3 a) s" G5 H3 H" L8 C' p/ d* K(2)MISO – 主器件数据输入,从器件数据输出
( W/ Z: ~: s1 {0 S# p2 l/ G7 t- S(3)SCLK – 时钟信号,由主器件产生! ^/ M( f5 o2 E/ p% I' z
(4)/SS  – 从器件使能信号,由主器件控制
' q; j$ n' ~0 m3 D& c6 c. q) e/ y

该用户从未签到

2#
发表于 2019-3-13 14:35 | 只看该作者
讲的非常清楚 赞一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-28 22:02 , Processed in 0.109375 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表