I2C SPI UART串行接口对比分析

2023-10-18 23:59

本文主要是介绍I2C SPI UART串行接口对比分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 SPI

SPI:串行外转接口,允许以全双工方式实现数据与各种外围设备高速数据传输。由3根线组成,(串行时钟)SCLK、(串行数据输出)SDO和(串行数据输入)SDI组成,当然对于多个从设备而言,会添加一根SS片选信号。SDO和SDI都是基于时钟脉冲SCLK完成数据,且是一比特比特传输。而且SCLK只能由主设备控制。

       特点包括如下几点

  • l  采用主从方式,且由主设备控制SCLK。
  • l  全双工的同步方式传输数据,全双工就是指主设备发送数据时也会接收到从设备的数据。而之所以称为同步是因为传输数据必须严格根据时钟,以及时钟极性和时钟相位(CPHA)控制两个SPI设备间何时交换数据。
  • l  数据交换方式,之所以称为数据交换是因为在发送完一比特数据后也会接收到一比特数据。所以SPI没有读写区分,因为发送完一比特就会接收到一比特。
  • l  接收方式:只要发生了数据传输完成事件,都要去SPI设备相应的寄存器中读取数据,即使数据没有意义。

重点介绍下SPI的工作模式。虽然是依靠SCLK完成传输,但是由于时钟极性和时钟相位的不同衍生出了四种工作模式,传输时序。

CPOL: 时钟极性, 表示 SPI 在空闲时, 时钟信号是高电平还是低电平. 若 CPOL 被设为 1, 那么该设备在空闲时 SCK 管脚下的时钟信号为高电平。当 CPOL 被设为 0 时则正好相反。

CPHA: 时钟相位, 表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样。若 CPHA 被设置为 1, 则 SPI 设备在时钟信号变为下降沿时触发数据采样, 在上升沿时发送数据。当 CPHA 被设为 0 时也正好相反。


1 I2C

       I2C,基于两线(SDA和SCL)的串行通信协议。其最大的优点在于只需要两根线,降低了互联成本。

       其特点:

       某次通信过程中,主设备和从设备与硬件连线无关(对比SPI)。

       每个设备独立编址,广播地址为全0。

       有较为复杂的协议控制,如先发地址,而且地址最后一位代表是读还是写,然后每发送完1字节从设备需要回复一个ACK。也正是基于上述几点使得I2C适合组建小型的网络。

       开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

       结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。


       应答信号: Master每发送完8bit数据后等待Slave的ACK。即在第9个clock,若从IC发ACK,SDA会被拉低。若没有ACK,SDA会被置高,这会引起Master发生RESTART或STOP流程,如下所示:


I2C写流程

写寄存器的标准流程为:
1.    Master发起START
2.    Master发送I2C addr(7bit)和w操作0(1bit),等待ACK
3.    Slave发送ACK
4.    Master发送reg addr(8bit),等待ACK
5.    Slave发送ACK
6.    Master发送data(8bit),即要写入寄存器中的数据,等待ACK
7.    Slave发送ACK
8.    第6步和第7步可以重复多次,即顺序写多个寄存器
9.    Master发起STOP

写一个寄存器

写多个寄存器


I2C读流程

1.    Master发送I2C addr(7bit)和w操作1(1bit),等待ACK
2.    Slave发送ACK
3.    Master发送reg addr(8bit),等待ACK
4.    Slave发送ACK
5.    Master发起START
6.    Master发送I2C addr(7bit)和r操作1(1bit),等待ACK
7.    Slave发送ACK
8.    Slave发送data(8bit),即寄存器里的值
9.    Master发送ACK
10.    第8步和第9步可以重复多次,即顺序读多个寄存器
读一个寄存器


读多个寄存器

       具体以AT24C02为例,讲解其传输逻辑,如下图所示。

 

2 UART

       通用异步传输协议,收发器。较为简单,由两线组成,TxD和RxD,设备交叉连接。由起始们、奇偶校验位、数据位、停止位组成。同时如果使用了RTS、CTS等流控信号线则更为复杂,有待补充。

       它使用的电平标准是TTL/CMOS逻辑电平标准,(0~5v、0~3.3v、0~2.5v或0~1.8v)来表示数据,高电平表示1,低电平表示0。为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOD逻辑电平转换为RS-232逻辑电平,3~12v表示0,-3~-12v表示1。这也就是UART和RS232的区别和联系。数据传输流程如下:

(1)平时数据线处于空闲状态(1状态)

(2)当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间,这样接收方检测到开始位后,在等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。

(3)UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将他们发送出去,首先发送最低位。

(4)如果使用校验功能,UART在发送完数据后,还要发送1位校验位。有两种校验方法:奇校验、偶校验——数据位连同校验位中,1的数据等于奇数或偶数。

(5)最后,发送停止位,数据线恢复到空闲状态(1状态)。停止位的长度有3种:1位、1.5位、2位。

3 对比

       如下表所示。

 

SPI

I2C

UART

电气信号线

4线:SS、SCLK、SDO和SDI

2线:SCL、SDA

2线:TXD、RXD

工作模式

全双工

半双工

全双工

组网

规模有限

支持128个设备组成的网络(地址是7位)

 

寻址模式

通过片选信号

发送具体地址

 

传输速率2

几Mbps但是比I2C快

标准速度:100kbps

快速模式:400kbps

高速模式:3.4Mbps

RS232:<20kbps

RS422:最高10Mbps

RS485:最高10Mbps

注:关于传输速率,其实SPI应该根据Master芯片能发起的频率以及Slave能接受的频率,但是肯定的是它一般大于I2C传输频率。对于其它总线传输频率,如下。

l  USB总线

   USB1.1:

-------低速模式(low speed):1.5Mbps

-------全速模式(full speed): 12Mbps

USB2.0:向下兼容。增加了高速模式,最大速率480Mbps。

-------高速模式(high speed): 25~480Mbps 

USB3.0:向下兼容。

-------super speed :理论上最高达4.8Gbps,实际中,也就是highspeed 的10倍左右。

Ethernet,也就是通常的网速。

--------早期的以太网传输速率只有10Mbps

--------百兆网:理论上最大100Mbps

--------千兆网:理论上最大1Gbps

l  SD总线:最高能达10Mbps。

l  SATA接口:

--------SATA1.0:理论传输速度是150MB/s(或者1.5Gb/s),实际也就30MBps。

--------SATA2.0: 300MBps,即3Gbps。实际也就80MBps。

--------SATA3.0: 600MBps,即6Gbps。

--------eSATA:理论传输速度可达到1.5Gbps或3Gbps。

l  PCI总线

--------PCI:32位,33MHz时钟频率,速率是33*4 = 133MBps,即1Gbps。

-------- PCI 2.1:64位,66MHz时钟频率来说:速率是66*8 = 528MBps,即4Gbps。

4 参考文献

[1] http://blog.csdn.net/skyflying2012/article/details/11710801

[2] http://blog.chinaunix.net/uid-20672257-id-3072937.html

[3] http://blog.csdn.net/xukai871105/article/details/15028117

 

这篇关于I2C SPI UART串行接口对比分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/235956

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Spring、Spring Boot、Spring Cloud 的区别与联系分析

《Spring、SpringBoot、SpringCloud的区别与联系分析》Spring、SpringBoot和SpringCloud是Java开发中常用的框架,分别针对企业级应用开发、快速开... 目录1. Spring 框架2. Spring Boot3. Spring Cloud总结1. Sprin

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory