25_嵌入式系统总线接口

目录

串行接口基本原理

串行通信

串行数据传送模式

串行通信方式

RS-232串行接口

RS-422串行接口

RS-485串行接口

RS串行总线总结

RapidIO高速串行总线

ARINC429总线

并行接口基本原理

并行通信

IEEE488总线

SCSI总线

MXI总线

PCI接口基本原理

PCI总线原理

PCI总线特点

USB接口基本原理

USB总线特点

USB系统描述

物理接口

电源

总线协议

健壮性

工作原理

SPI接口基本原理

SPI接口原理

SPI传输过程

IIC接口基本原理

IIC接口原理

通用传输过程及格式

数据传输过程

总线竞争的仲裁

SPI和IIC总线总结


串行接口基本原理

串行通信

数据是一位一位地进行传输,在传输中每一位数据都占据一个固定的时间长度。如下图所示,系统内部发送方先进行并/串转换,通过串口发送,到接收方再进行串/并转换被读取。

优点:传输线少,成本低。

缺点:速度慢。

串行数据传送模式

数据通信涉及两台数字设备之间传输数据的问题。常用的数据通信方式有并行通信和串行通信两种。当距离较近而且要求传输速率较高时,通常采用并行通信的方式,计算机系统的内部总线结构就是并行方式。当设备距离较远时,数据往往以串行方式传输。下图列出了三种基本的通信模式。

单工通信:数据仅能沿着从A到B的单一方向传播。

半双工通信:数据可以从A到B,也可以从B到A,但不能在同一时刻传播。

全双工通信:数据在同一时刻可以从A到B,或从B到A进行双向传播。

串行通信方式

串行通信在信息格式的约定上可以分为两种方式:异步通信和同步通信。

异步通信:是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致,传输过程如下图所示。

异步通信方式:数据是一帧一帧传送的,每帧数据包含有起始位(0)、数据位、奇偶校验位和停止位(1),每帧数据的传送靠起始位来同步。一帧数据的各位代码间的时间间隔是固定的,而相邻两帧的数据其时间间隔是不固定的。在异步通信的数据传送中,传输线上允许空字符。

异步通信必须遵循的三项规定如下。

(1)字符的格式:每个字符传送时,必须前面加一起始位,后面加上1、1.5或2位停止位。例如ASCⅡ码传送时,一帧应该是:前面一个起始位,接着七位ASCⅡ编码,再接着一位奇偶校验位,最后一位停止位,共十位。如下图所示。

(2)波特率:就是传送数据位的速率,用位/秒(bit/s)表示,称之为波特。例如数据传送的速率为120字符/秒,每帧包括十个数据位,则传送波特率为:10×120=1200bit/s=1200波特;每一位的传送时间是其倒数1/1200=0.833ms。一般情况下,异步通信的波特率的值为:150、300、600、1200、2400、4800、9600、14400、28800bit/s等,数值呈倍数变动。

(3)校验位:采用奇偶校验的方式。

异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小。但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。

同步通信:是一种比特同步通信技术,要求收发双方具有同频同相的同步时钟信号,只需在要传送报文的最前面附加特定的同步字符,使收发双方建立同步,以后便在同步时钟的控制下逐位发送/接收。

同步传输采用字符块的方式,减少每一个字符的控制和错误检测数据位,因而可以具有较高的传输速率。即将许多字符聚集成一个字符块后,在每块信息之前要加上1~2个同步字符,字符块之后再加入适当的错误检测数据才传送出去。

特点:数据传输速率高;但要求收发双方时钟保持严格同步。

采用同步和异步通信发送一串数据的示例如下。

RS-232串行接口

RS-232C是由美国电子工业协会(EIA)于1969年制定并采用的一种串行通信接口标准,后来被广泛采用,发展成为一种国际通用的串行通信接口标准。

下表为EIA所定的传送电气规格。

EIA所定的传送电气规格

状态

L(Low)

H(High)

电压范围

-25V~-3V

+3V~+25V

逻辑

1

0

名称

SPACE

MARK

RS-232C所用的驱动芯片通常以±12V的电源来驱动信号线,而微机系统里的TTL电路以+5V表示逻辑1,接地电压表示逻辑0,因此需要转换,TTL标准与RS-232C标准之间的电平转换电路利用集成芯片实现。

RS-232C接口信号:EIA制定的RS-232C接口与外界的相连采用25芯(DB-25)和9芯(DB-9)D型插接件。实际应用中,并不是每只引脚信号都必须用到,下面介绍9芯结构。

如下图所示,其各引脚功能如下。

CD:载波检测,主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音。

RXD:接收数据线,用于接收外部设备送来的数据。

TXD:发送数据线,用于将计算机的数据发送给外部设备。

DTR:数据终端就绪,当此引脚高电平时,通知Modem可以进行数据传输,计算机已准备好。

SG:接地信号线。

DSR:数据设备就绪,此引脚为高电平时,通知计算机Modem已准备好,可以进行数据通信。

RTS:请求发送,此引脚由计算机来控制,用以通知Modem马上传送数据至计算机;否则,Modem将收到的数据暂时放入缓冲区中。

CTS:清除(允许)发送,此引脚由Modem控制,用以通知计算机将要传送的数据送至Modem。

RI:振铃提示,Modem通知计算机有呼叫进来,是否接听呼叫由计算机决定。

计算机利用RS-232C接口进行串口通信,有简单连接和完全连接两种方式。简单连接又称为三线连接,即只连接发送数据线、接收数据线和信号地。如果应用中还需要使用RS-232C的控制信号,则采用完全连接方式,如下图所示。

RS-422串行接口

RS-422是RS-232的改进型,全称是“平衡电压数字接口电路的电气特性”。是一种单机发送、多机接收的单向、平衡传输规范,传输速率可达10Mb/s。采用差分传输方式,也称平衡传输。差分传输(两根信号线的差值)能够消除共模干扰。

RS-422允许在相同传输线上连接多个接收结点,最多可接十个结点,即一主多从结构,从设备之间不能通信。支持一点对多点的双向通信。其四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必需的信号交换均可以按软件方式或硬件方式实现。

RS-422的最大传输距离为4000英尺(约1219m),最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高传输速率。一般100m长的双绞线上所能获得的最大传输速率仅为1Mb/s。

RS-422需要在传输电缆的最远端接一个电阻,要求其阻值约等于传输电缆的特性阻抗。在短距离传输时可不需终接电阻,即一般在300m以下不需接电阻。

RS-485串行接口

为扩展应用范围,EIA在RS-422的基础上制定了RS-485标准,增加了多点、双向通信能力,通常在要求通信距离为几十米至上千米时,广泛采用RS-485收发器。RS-485收发器采用平衡发送和差分接收,即在发送端,驱动器将TTL电平信号转换成差分信号输出;在接收端,接收器将差分信号变成TTL电平,因此具有抑制共模干扰的能力,加上接收器具有高的灵敏度,能检测低达200mV的电压,故数据传输可达千米以外。

RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主设备,其余为从设备,但它比RS-422有所改进。无论四线还是二线连接方式总线上都可连接多达32个设备。

RS-485共模输出电压在-7V~+12V之间,接收器最小输入阻抗为12k2。RS-485满足所有RS-422的规范,所以RS-485的驱动器可以在RS-422网络中应用。

RS-485与RS-422一样,最大传输速率为10Mb/s。当波特率为1200b/s时,最大传输距离理论上可达15km。平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能使用规定最长的电缆长度。

RS-485需要两个终端电阻,接在传输总线的两端,其阻值要求等于传输电缆的特性阻抗。在短距离传输时可不需终端电阻,即一般在300m以下不需终端电阻。

RS串行总线总结

RS-232:点对点,全双工,传输距离短(小于15m),连接器DB9和DB25,仅使用三线也可进行通信,常用作嵌入式开发调试串口。速率低,可选一般是9600、19200bit/s。

RS-422:一点对多点,差分信号,全双工,传输距离可达上千米。最多连接10个设备。速率可达10Mb/s:

RS-485:多点通信,差分信号,二线连接是多对多点通信,半双工;四线连接就是RS-422,全双工,单点对多点通信。传输距离可达上千米。最多连接32个设备。速率可达10Mb/s。

RapidIO高速串行总线

RapidIO(Rapid Input/Output)是一种高速串行总线技术,旨在用于高性能计算和通信系统中的数据传输。

为了满足灵活性和可扩展性的要求,RapidIO协议分为三层:逻辑层、传输层和物理层。逻辑层定义了操作协议;传输层定义了包交换、路由和寻址机制;物理层定义了电气特性、链路控制和纠错重传等。

RapidIO支持的逻辑层业务主要是:直接IO/DMA(Direct IO/Direct Memory Access)和消息传递(Message Passing)。

直接IO/DMA模式是最简单实用的传输方式,其前提是主设备知道被访问端的存储器映射。在这种模式下,主设备可以直接读写从设备的存储器。直接IO/DMA在被访问端的功能往往完全由硬件实现,所以被访问的器件不会有任何软件负担。从功能上讲,这一特点和德州仪器DSP的传统的主机接口(Host Port Interface,HPI)类似。但和HPI口相比,SRIO(Serial RapidIO)带宽大,管脚少,传输方式更灵活。

对上层应用来说,发起直接IO/DMA传输主要需提供以下参数:目地器件ID、数据长度、数据在目地器件存储器中的地址。

直接IO/DMA模式又可进一步分为以下几种传输格式:

(1)NWRITE:写操作,不要求接收端响应。

(2)NWRITE_R:带响应的NWRITE(NWRITE with Response),要求接收端响应。

(3)SWRITE:流写(Stream Write),数据长度必须是8字节的整数倍,不要求接收端响应。

(4)NREAD:读操作。

SWRITE是最高效的传输格式;带响应的写操作或读操作效率则较低,一般只能达到不带响应的传输效率的一半。

消息传递模式则类似于以太网的传输方式,它不要求主设备知道被访问设备的存储器状况。数据在被访问设备中的位置则由邮箱号(类似于以太网协议中的端口号)确定。从设备根据接收到的包的邮箱号把数据保存到对应的缓冲区,这一过程往往无法完全由硬件实现,而需要软件协助,所以会带来一些软件负担。

对上层应用来说,发起消息传递主要需提供以下参数:目地器件ID、数据长度、邮箱号。

ARINC429总线

ARINC429总线是一种串行标准,为面向接口型的单向广播式传输总线。该总线上只允许有一个发送设备,但可以有多个接收设备(最多为20个)。

并行接口基本原理

并行通信

并行通信通常是将数据字节的各位用多条数据线同时进行传送。一般用来连接打印机、扫描仪等,所以又称为打印口。如下图所示。

特点:控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。

并行接口可以分为SPP(标准并行接口)、EPP(增强型并行接口)和ECP(扩展型并行接口)。并行总线分为标准并行总线和非标准并行总线。IEEE488总线和SCSI总线是常用的标准并行总线;MXI总线是一种高性能的非标准的通用多用户并行总线。

IEEE488总线

IEEE488总线又称GPIB(General Purpose Interface Bus)总线。它按照位并行、字节串行双向异步方式传输信号。以总线方式连接,仪器设备直接并联于总线上,总线上最多可连接15台设备。最大传输距离20m,信号传输速度一般为500kb/s,最大传输速度为1Mb/s。广泛应用在仪器、仪表、测控领域。

SCSI总线

SCSI总线速度可达5Mb/s,传输距离6m。传输速率很高。普遍用作计算机的高速外设总线,如连接高速硬盘驱动器。

MXI总线

MXI总线是一种高性能非标准的通用多用户并行总线。是32位高速并行总线。最高速度可达23Mb/s,传输距离20m,用作计算机与测控机箱的互联。

PCI接口基本原理

PCI总线原理

PCI(Peripheral Component Interconnect)总线是一种高性能局部总线,是为了满足外设间以及外设与主机间高速数据传输而提出来的。在数字图形、图像和语音处理,以及高速实时数据采集与处理等对数据传输率要求较高的应用中,采用PCI总线来进行数据传输,可以解决原有的标准总线数据传输率低带来的瓶颈问题。

PCI总线是一种树型结构,并且独立于CPU,可以和CPU并行操作。PCI总线上可以挂接PCI设备和PCI桥片,一个PCI设备可以既是主设备也是从设备,但是在同一个时刻,这个PCI设备或者为主设备或者为从设备。在PCI总线中有三类设备,PCI主设备、PCI从设备和桥设备。其中PCI从设备只能被动地接收来自HOST主桥,或者其他PCI设备的读写请求;而PCI主设备可以通过总线仲裁获得PCI总线的使用权,主动地向其他PCI设备或者主存储器发起存储器读写请求。而桥设备的主要作用是管理下游的PCI总线,并转发上下游总线之间的总线事务。PCI总线有三种桥,即HOST/PCI桥、PCI/PCI桥和PCI/LEGACY桥。

PCI总线的地址总线与数据总线是分时复用的。这样做的好处是,一方面可以节省接插件的管脚数,另一方面便于实现猝发数据传输。在做数据传输时,由一个PCI设备做发起者(主控,Initiator或Master),而另一个PCI设备做目标(从设备,Target或Slave)。总线上的所有时序的产生与控制,都由Master来发起。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构(Arbiter),来决定谁有权力拿到总线的主控权。

PCI总线特点

(1)高速性。PCI局部总线以33MHz的时钟频率操作,采用32位数据总线,数据传输速率可高达132MB/s,远超过以往各种总线。而早在1995年6月推出的PCI总线规范2.1已定义了64位、66MHz的PCI总线标准。因此PCI总线完全可为未来的计算机提供更高的数据传送率。另外,PCI总线的主设备(Master)可与计算机内存直接交换数据,而不必经过计算机CPU中转,也提高了数据传送的效率。

(2)即插即用性。PCI设备识别主要是对开发商代码和设备代码进行识别,PCI设备的硬件资源,则是由计算机根据其各自的要求统一分配,绝不会有任何的冲突问题。作为PCI板卡的设计者,不必关心计算机的哪些资源可用,哪些资源不可用,也不必关心板卡之间是否会有冲突。

(3)可靠性。PCI独立于处理器的结构,形成一种独特的中间缓冲器设计方式,将中央处理器子系统与外围设备分开。这样用户可以随意增添外围设备,以扩充计算机系统而不必担心在不同时钟频率下会导致性能的下降。PCI总线增加了奇偶校验错(PERR)、系统错(SERR)、从设备结束(STOP)等控制信号及超时处理等可靠性措施,使数据传输的可靠性大为增加。

(4)复杂性。PCI总线强大的功能大大增加了硬件设计和软件开发的实现难度。硬件上要采用大容量、高速度的CPLD或FPGA芯片来实现PCI总线复杂的功能。软件上则要根据所用的操作系统,用软件工具编制支持即插即用功能的设备驱动程序。

(5)自动配置。PCI总线规范规定PCI设备可以自动配置。PCI定义了三种地址空间:存储器空间、输入/输出空间和配置空间,每个PCI设备中都有256字节的配置空间用来存放自动配置信息,在系统初始化时,通过idsel引脚片选决定PCI设备,自动根据读到的有关设备的信息,结合系统的实际情况为设备分配存储地址、中断和某些定时信息。

(6)共享中断。PCI总线是采用低电平有效方式,多个中断可以共享一条中断线。

(7)扩展性好。如果需要把许多设备连接到PCI总线上,而总线驱动能力不足时,可以采用多级PCI总线,这些总线上均可以并发工作,每个总线上均可挂接若干设备。因此PCI总线结构的扩展性是非常好的。

(8)多路复用。在PCI总线中为了优化设计采用了地址线和数据线共用一组物理线路,即多路复用。PCI接插件尺寸小,又采用了多路复用技术,减少了元件和管脚个数,提高了效率。

(9)严格规范。PCI总线对协议、时序、电气性能、机械性能等指标都有严格的规定,保证了PCI的可靠性和兼容性。由于PCI总线规范十分复杂,其接口的实现就有较高的技术难度。

USB接口基本原理

USB总线特点

通用串行总线(Universal Serial Bus,USB)是由Intel等厂商制定的连接计算机与具有USB接口的多种外设之间通信的串行总线。最多可连接127个设备。用于多种嵌入式系统设备的数据通信,如移动硬盘、数码相机、高速数据采集设备等。

(1)使用简单。USB提供机箱外的热即插即用功能,连接外设不必再打开机箱,也不必关闭主机电源,USB可智能地识别USB链上外围设备的动态插入或拆除,具有自动配置和重新配置外设的能力,因此连接设备方便。

每个USB系统中有个主机,USB总线采用“级联”方式可连接多个外部设备。每个USB设备用一个USB插头连接到上一个USB设备的USB插座上,而其本身又提供一或多个USB插座供下一个或多个USB设备连接使用。这种多重连接是通过集线器(Hub)来实现的,整个USB网络中最多可连接127个设备,支持多个设备同时操作。

(2)应用范围广。USB系统数据报文附加信息少,带宽利用率高,可同时支持同步传输和异步传输两种传输方式。可同时支持不同速率的设备,速率最高可达几百Mb/s。

(3)支持主机与设备之间的多数据流和多消息流传输,且支持同步和异步传输类型。

(4)低成本的电缆和连接器。USB通过一根四芯的电缆传送信号和电源,电缆长度可长达5m。

(5)较强的纠错能力。USB系统可实时地管理设备插拔。在USB协议中包含了传输错误管理、错误恢复等功能,同时根据不同的传输类型来处理传输错误。

(6)总线供电。USB总线可为连接在其上的设备提供5V电压/100mA电流的供电,最大可提供500mA的电流。USB设备也可采用自供电方式。

USB系统描述

一个USB系统由三部分来描述:USB主机、USB设备和USB互连。

USB主机:在任一USB系统中只有一个主机,到主计算机系统的USB接口被称作主控制器。主控制器可采用硬件、固件或软件相结合的方式来实现。与Hub集成在主机系统内,向上与主总线(如PCI总线)相连,向下可提供一或多个连接点。

USB设备分类:为Hub(集线器)和Function(功能)两大类。Hub提供到USB的附加连接点,Function为主机系统提供附加的性能,如ISDN连接、数字操纵杆或扬声器等。实际上,功能就是可发送和接收USB数据的、可实现某种功能的USB设备。USB设备应具有标准的USB接口。

USB互连:是USB设备与主机的连接和通信方式,它包括总线拓扑结构、内层关系、数据流模型和USB调度表。

USB总线用来连接各USB设备和USB主机。USB在物理上连接成一个层叠的星形拓扑结构,Hub是每个星的中心,每根线段表示一个点到点(Point-to-Point)的连接,可以是主机与一个Hub或功能之间的连接,也可以是一个Hub与另一个Hub或功能之间的连接。

USB的拓扑结构最多只能有七层(包括根层)。在主机和任一设备之间的通信路径中最多支持五个非根Hub,复合设备(Compound Device)要占据两层,不能把它连到第七层,第七层只能连接Function设备。七层拓扑结构如下图所示。

物理接口

USB总线的电缆有四根导线:一对标准尺寸的双绞信号线和一对标准尺寸的电源线。

USB总线支持的数据传输率有三种:高速信令位传输率为480Mb/s:全速信令位传输率为12Mb/s;低速信令位传输率为1.5Mb/s。

USB2.0支持在主控制器与Hub之间用高速传输全速和低速数据,而Hub与设备之间以全速或低速传输数据,这种支持能力可以将全速设备和低速设备对高速设备可用带宽的影响减到最小。

电源

USB的电源规范包括两个方面:

(1)电源分配用来处理USB设备如何使用主机通过USB总线提供的电源。每根USB电缆提供的电源功率是有限的,主机为直接连接到它的USB设备提供电源,Hub也对它所连接的USB设备提供电源,USB设备也可自带电源。完全依赖电缆供电的USB设备称作总线供电设备(Bus-Powered Device),有后备(Alternate)电源的设备称作自我供电设备(Self-Powered Device)。

(2)电源管理用来处理USB系统软件和设备如何适应主机上的电源管理系统。USB主机有一个独立于USB的电源管理系统,USB系统软件与主机电源管理系统之间交互作用,共同处理诸如挂起或恢复这样的系统电源事件。

总线协议

USB是一种查询(Polling)总线,由主控制器启动所有的数据传输。USB上所挂连的外设通过由主机调度的(Host-Scheduled)、基于令牌的(Token-Based)协议来共享USB带宽。

大部分总线事务涉及三个包的传输。当主控制器按计划地发出一个描述事务类型和方向、USB设备地址和端点号的USB包时,就开始发起一个事务,这个包称作“令牌包”(Token Packet),它指示总线上要执行什么事务,欲寻址的USB设备及数据传送方向。然后,事务源发送一个数据包 (Data Packet),或者指示它没有数据要传输。最后,目标一般还要用一个指示传输是否有成功的握手包(Handshake Packet)来响应。

主机与设备端点之间的USB数据传输模型被称作管道。管道有两种类型:流和消息。消息数据具有USB定义的结构,而流数据没有。管道与数据带宽、传输服务类型、端点特性(如方向性和缓冲区大小)有关。当USB设备被配置时,大多数管道就形成了。一旦设备加电,总是形成一个被称作默认控制管道的消息管道,以便提供对设备配置、状态和控制信息的访问。

事务调度表(Transaction Schedule)允许对某些流管道进行流量控制,在硬件级,通过使用NAK(否认)握手信号来调节数据传输率,以防止缓冲区上溢或下溢产生。当被否认时,一旦总线时间可用会重试该总线事务。流量控制机制允许灵活地进行调度,以适应异类混合流管道的同时服务,因此,可以在不同的时间间隔,用不同规模的包为多个流管道服务。

健壮性

USB采取以下措施提高它的健壮性:

(1)使用差分驱动器和接收器以及屏蔽保护,以保证信号的完整性。

(2)控制域和数据域的CRC保护校验。

(3)连接和断开检测及系统级资源配置。

(4)协议的自我修复,对丢失包或毁坏包执行超时(Timeouts)处理。

(5)对流数据进行流量控制,以保证对等步和硬件缓冲器维持正常的管理。

(6)采用数据管道和控制管道结构,以保证功能之间的独立性。

(7)协议允许用硬件或软件的方法对错误进行处理,硬件错误处理包括对传输错误的报告和重发。

工作原理

USB设备插入USB端点时,主机通过默认地址0与设备的端点0进行通信。在这个过程中,主机发出一系列试图得到描述符的标准请求,通过这些请求,主机得到所有感兴趣的设备信息,从而知道了设备的情况以及该如何与设备通信。随后主机通过发出Set Address请求为设备设置一个唯一的地址。这样,配置过程就完成了,以后主机就通过为设备设置好的地址与设备通信,而不再使用默认地址。

SPI接口基本原理

SPI接口原理

串行外围设备接口(Serial Peripheral Interface,SPI)是由Motorola公司开发,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口(SPI有时候也被称为4线接口)。这种接口可以用来连接存储器(存储数据)、A/D转换器、D/A转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至其他处理器。

SPI主要使用四个信号:主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行SCLK或SCK、外设芯片(CS)。有些处理器有SPI接口专用的芯片选择,称为从机选择SS。

MOSI信号由主机产生,从机接收。在有些芯片上,MOSI只被简单地标为串行输入(SI),或者串行数据输入SDI。MISO信号由从机产生,不过还是在主机的控制下产生的。在一些芯片上,MISO有时被称为串行输出(SO)或串行数据输出(SDO)。外设片选信号通常只是由主机的备用I/O引脚产生的。

与标准的串行接口不同,SPI是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机产生,接收数据的外设使用时钟来对串行比特流的接收进行同步化。可以将多个具有SPI接口的芯片连到主机的同一个SPI接口上,主机通过控制从设备的片选输入引脚来选择接收数据的从设备。

SPI传输过程

上图是微处理器通过SPI接口与外设进行连接。主机和外设都包含一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器是通过MOSI信号线将字节传送给外设,外设也将自己移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换了。外设的写操作和读操作是同步完成的,因此SPI成为一个很有效的协议。

如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取外设的一个字节,就必须发送一个空字节来引发从机的传输。

当主机发送一个连续的数据流时,有些外设能够进行多字节传输。许多拥有SPI接口的存储器芯片都以这种方式工作。在这种传输方式下,SPI外设的芯片选择端必须在整个传输过程中保持低电平。比如,存储器芯片会希望在一个“写”命令之后紧接着收到的是四个地址字节(起始地址),这样,后面接收到的数据就可以存储到该地址。一次传输可能会涉及千字节的移位或更多的信息。

其他外设只需要一个单字节(比如一个发给A/D转换器的命令),有些甚至还支持菊花链连接,如下图所示是菊花链连接三台SPI设备。

主机处理器从其SPI接口发送三个字节的数据。第一个字节发送给外设A,当第二个字节发送给外设A的时候,第一个字节己移出了A,而传送给了B。同样,主机想要从外设A读取一个结果,它必须再发送一个3字节(空字节)的序列,这样就可以把A中的数据移到B中,然后再移到C中,最后送回到主机。在这个过程中,主机还依次从B和C接收到字节。

注意,菊花链连接不一定适用于所有的SPI设备,特别是要求多字节传输的(比如存储器芯片)设备。有的外设芯片不支持菊花链连接。

根据时钟极性和时钟相位的不同,SPI有四个工作模式。

时钟极性CPOL有高、低两极;时钟极性为低电平时,空闲时时钟(SCK)处于低电平,传输时跳转到高电平;时钟极性为高电平时,空闲时时钟处于高电平,传输时跳转到低电平。

时钟相位CPHA有两个:时钟相位0和时钟相位1。当时钟相位为0时,时钟周期的前一边缘采集数据;当时钟相位为1时,时钟周期的后一边缘采集数据。

IIC接口基本原理

IIC接口原理

内部集成电路总线(Inter Integrated Circuit BUS,IIC BUS)是由Philips公司推出的二线制串行扩展总线,用于连接微控制器及其外围设备。是具备总线仲裁和高低速设备同步等功能的高性能多主机总线。直接用导线连接设备,通信时无需片选信号。

在IIC总线上,只需要两条线——串行数据SDA线和串行时钟SCL线,它们用于总线上器件之间的信息传递,都是双向的。每个器件都有一个唯一的地址以供识别,而且各器件都可以作为一个发送器或接收器(由器件的功能决定)。

IIC总线有如下操作模式:主发送模式、主接收模式、从发送模式、从接收模式。

通用传输过程及格式

起始条件:当IIC接口处于从模式时,要想数据传输,必须检测SDA线上的起始条件,起始条件由主器件产生。在SCL信号为高时,SDA产生一个由高变低的电平变化处,即产生一个启动信号。当IIC总线上产生了启动信号后,这条总线就被发出起始信号的主器件占用了,变成“忙”状态。

停止条件:在SCL信号为高时,SDA产生一个由低变高的电平变化处,产生停止信号。停止条件也由主器件产生,作用是停止与某个从器件之间的数据传输。当IIC总线上产生了一个停止条件,那么在几个时钟周期之后总线就被释放,变成“闲”状态。如下图所示。

当主器件送出一个起始条件,它还会立即送出一个从地址,来通知将与它进行数据通信的从器件。1个字节的地址包括7位的地址信息和1位的传输方向指示位,如果第7位为0,表示马上要进行一个写操作;如果为1,表示马上要进行一个读操作。

数据传输格式:SDA线上传输的每个字节长度都是8位,每次传输中字节的数量是没有限制的。在起始条件后面的第一个字节是地址域,之后每个传输的字节后面都有一个应答(ACK)位 (即一帧共有9位)。传输中串行数据的MSB(字节的高位)首先发送。

应答信号:为了完成1个字节的传输操作,接收器应该在接收完1个字节之后发送ACK位到发送器,告诉发送器己经收到了这个字节。ACK脉冲信号在SCL线上第9个时钟处发出(前面8个时钟完成1个字节的数据传输,SCL上的时钟都是由主器件产生的)。当发送器要接收ACK脉冲时,应该释放SDA信号线,即将SDA置高。接收器在接收完前面8位数据后,将SDA拉低。发送器探测到SDA为低,就认为接收器成功接收了前面的8位数据,如下图所示。

数据传输过程

开始:主设备产生启动信号,标明数据传输开始。

地址:主设备发送地址信息,包含7位的从设备地址和1位的数据方向指示位(读或写位,表示数据流的方向)。

数据:根据指示位,数据在主设备和从设备之间进行传输。数据一般以8位传输,MSB先传;具体能传输多少量的数据并没有限制。接收器产生1位的ACK(应答信号)表明收到了每个字节。传输过程可以被中止和重新开始。

停止:主设备产生停止信号,结束数据传输。

总线竞争的仲裁

IIC总线上可以挂接多个器件,有时会发生两个或多个主器件同时想占用总线的情况。IIC总线具有多主控能力,可对发生在SDA线上的总线竞争进行仲裁。

仲裁原则:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。

总线竞争的仲裁在两个层次上进行:首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位比较,从而确保了竞争仲裁的可靠性。由于是利用IC总线上的信息进行仲裁,不会造成信息的丢失。

SPIIIC总线总结

SPI包含四根信号线,分别是:

(1)SCLK:Serial Clock(output from master)。

(2)MOSI,SIMO:Master Output,Slave Input(output from master)。

(3)MISO,SOMI:Master Input,Slave Output(output from slave)。

(4)SS:Slave Select(active low,output from master)。

SPI是单主设备总线,有片选信号,是环形总线结构,其数据收发线是各自独立的。

IIC有两条信号线:数据线SDA、时钟信号线SCL。

IIC是多主机总线,没有物理的片选信号线,其数据收发线是复用的。IIC数据传输速率有标准模式(100kb/s)、快速模式(400b/s)和高速模式(3.4Mb/s),另外一些变种实现了低速模式(10kb/s)和快速+模式(1Mb/s)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS【详解】长度单位 ( px,%,em,rem,vw,vh,vmin,vmax,ex,ch )

px 像素 pixel 的缩写,即电子屏幕上的1个点,以分辨率为 1024 * 768 的屏幕为例,即水平方向上有 1024 个点,垂直方向上有 768 个点,则 width:1024px 即表示元素的宽度撑满整个屏幕。 随屏幕分辨率不同,1px …

【大模型LLM面试合集】大语言模型基础_LLM为什么Decoder only架构

LLM为什么Decoder only架构 为什么现在的LLM都是Decoder only的架构? LLM 是 “Large Language Model” 的简写,目前一般指百亿参数以上的语言模型, 主要面向文本生成任务。跟小尺度模型(10亿或以内量级)的“百花齐放”…

SpringBoot运维篇

工程打包与运行 windows系统 直接使用maven对项目进行打包 jar支持命令行启动需要依赖maven插件支持&#xff0c;打包时须确认是否具有SpringBoot对应的maven插件 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><ar…

最小表示法

#define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;const int N (int)3e5 5; int n; int a[N * 2];int main() {cin >> n;for (int i 0; i < n; i) {cin >> a[i];a[i n] a[i]; // 构造成链}int l 0, r 1; // 一开始 r …

昇思12天

FCN图像语义分割 1. 主题和背景 FCN是由UC Berkeley的Jonathan Long等人于2015年提出的&#xff0c;用于实现图像的像素级预测。 2. 语义分割的定义和重要性 语义分割是图像处理和机器视觉中的关键技术&#xff0c;旨在对图像中的每个像素进行分类。它在很多领域有重要应用…

npm安装完yarn还是用不了?

前言 解决 找到你的包全局安装目录 复制路径&#xff0c;配置到Path全局环境变量 结果 不过发现在idea里还是用不了&#xff0c;此时你会想&#xff0c;这什么烂贴&#xff0c;没一点屁用 不过在重启idea之后&#xff0c;你也许就不会这么想了

秋招提前批面试经验分享(下)

⭐️感谢点开文章&#x1f44b;&#xff0c;欢迎来到我的微信公众号&#xff01;我是恒心&#x1f60a; 一位热爱技术分享的博主。如果觉得本文能帮到您&#xff0c;劳烦点个赞、在看支持一下哈&#x1f44d;&#xff01; ⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读…

数据结构/作业/2024/7/7

搭建个场景: 将学生的信息&#xff0c;以顺序表的方式存储&#xff08;堆区)&#xff0c;并且实现封装函数︰1】顺序表的创建&#xff0c; 2】判满、 3】判空、 4】往顺序表里增加学生、5】遍历、 6】任意位置插入学生、7】任意位置删除学生、8】修改、 9】查找(按学生的学号查…

网络安全基础-2

知识点 1.网站搭建前置知识 域名&#xff0c;子域名&#xff0c;DNS&#xff0c;HTTP/HTTPS&#xff0c;证书等 注册购买域名&#xff1a;阿里云企航_万网域名_商标注册_资质备案_软件著作权_网站建设-阿里云 2.web应用环境架构类 理解不同WEB应用组成角色功能架构: 开发语…

DHCP的原理及配置

目录 一、了解DHCP服务 1.什么是DHCP 1.1DHCP广播 2.使用DHCP的好处 2.1为什么使用DHCP 3.DHCP的模式与分配方式 3.1分配方式 3.2模式 二、DHCP工作原理 1.四次回话 2.重新登录 3.更新租约 4.扩展 三、安装DHCP服务 四、DHCP局部配置并且测试 五、使用…

7.Android逆向协议-抓取安卓http和https数据包(设备需要root权限)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;微尘网校 上一个内容&#xff1a;6.Android逆向协议-配置FD抓包环境 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s…

Nestjs基础

一、创建项目 1、创建 安装 Nest CLI&#xff08;只需要安装一次&#xff09; npm i -g nestjs/cli 进入要创建项目的目录&#xff0c;使用 Nest CLI 创建项目 nest new 项目名 运行项目 npm run start 开发环境下运行&#xff0c;自动刷新服务 npm run start:dev 2、…

GuitarPro2024音乐软件#创作神器#音乐梦想

嘿&#xff0c;亲爱的朋友们&#xff01;&#x1f44b;&#x1f44b;&#x1f44b;今天我要给你们安利一款超赞的软件——Guitar Pro。这款软件简直是吉他手的福音啊&#xff01;&#x1f389;&#x1f389;&#x1f389; Guitar Pro免费绿色永久安装包下载&#xff1a;&#…

YOLOv8 | 代码逐行解析(五) | YOLOv8中损失函数计算的详解包含Cls和Bbox计算的解析,小白必看(下)

一、本文介绍 本文给大家带来的是YOLOv8中的损失函数计算的完整解析&#xff0c;内容包括v8DetectionLoss的解析&#xff0c;以及BboxLoss的解析&#xff0c;如果你相对损失函数的计算原理&#xff0c;本文内容绝对会对你有所帮助&#xff0c;全文内容包含1万两千字&#xff0…

(十) Docker compose 本地部署 apollo

文章目录 1、apollo2、数据库准备3、启动后会用到的几个地址4、docker-compose运行 apollo方式一&#xff1a;使用容器 hostName 作为网络媒介方式二&#xff1a;使用端口映射固定 ip 作为网络媒介 6、客户端 1、apollo https://www.apolloconfig.com/#/zh/deployment/quick-s…

使用策略模式加工厂模式实现数据上传时的不同云平台的处理

在处理不同云存储的 SDK 和接口调用时可以使用策略模式加工厂模式实现了灵活的云存储上传处理 策略模式&#xff1a;可以为每个云存储&#xff08;如阿里云、腾讯云等&#xff09;创建一个策略类&#xff0c;实现统一的接口&#xff0c;来封装不同的上传逻辑。工厂模式&#x…

【代码管理的必备工具:Git的基本概念与操作详解】

一、Git 初识 1.提出问题 不知道你工作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种⽂档时&#xff0c;为了防止⽂档丢失&#xff0c;更改失误&#xff0c;失误后能恢复到原来的版本&#xff0c;不得不复制出⼀个副本&#xff0c;比如&#xff1a; “…

敏感词匹配DFA算法

算法简介与场景介绍 DFA算法&#xff0c;中文全称为确定性有穷自动机。它的基本思想是构建一个有穷自动机&#xff0c;当用户输入文本时&#xff0c;通过自动机的状态转换来快速匹配敏感词。具体特征是&#xff0c;有一个有效状态的集合和一些从一个状态通向另一个状态的边&am…

VuePress 的更多配置

现在&#xff0c;读者应该对 VuePress、主题和插件等有了基本的认识&#xff0c;除了插件&#xff0c;VuePress 自身也有很多有用的配置&#xff0c;这里简单说明下。 ‍ ‍ VuePress 的介绍 在介绍了 VuePress 的基本使用、主题和插件的概念之后&#xff0c;我们再来看看官…

简介空间复杂度

我们承接上一篇博客。我们写了时间复杂度之后&#xff0c;我们就要来介绍一下另一个相关复杂度了。空间复杂度。我觉得大家应该对空间复杂度认识可能比较少一些。我就是这样&#xff0c;我很少看见题目中有明确要求过空间复杂度的。但确实有这个是我们不可忽视的&#xff0c;所…