首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

I2C/SPI/UART/1-Wire/并行接口这几种常用嵌入式通信协议,你都了解吗

I2C/SPI/UART/1-Wire/并行接口这几种常用嵌入式通信协议,你都了解吗

随着通信与计算机整合时代的到来,数字化、宽带化和智能化已成为未来通信发展的方向,人类社会对电信业务从质量到业务种类都提出越来越高的要求,而接入网作为电信网的重要组成部分,连接本地交换机与用户,是整个电信网的毛细血管和瓶颈,实现数字化、宽带化和业务综合化的关键。 嵌入式系统是以应用为中心的硬件设计和面向应用的软件产品开发为基础的专用计算机系统,广泛应用于制造工业、过程控制、通信、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费产品等领域。

嵌入式系统中,板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线。下面将逐一说明常用的板上通信接口。



1. I2C总线



I2C总线是一种同步、双向、半双工的两线式串行接口总线。这里,半双工的含义是指在任意给定的时刻,只有一个方向上是可以通信的。I2C总线最早由Philips半导体公司于20世纪80年代研发面市。I2C最初的设计目标是为微处理器/微控制器系统与电视机外围芯片之间的连接提供简单的方法。I2C总线由两条总线组成:串行时钟线SCL和串行数据线SDA。SCL线负责产生同步时钟脉冲,SDA线负责在设备间传输串行数据。I2C总线是共享的总线系统,因此可以将多个I2C设备连接到该系统上。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。主设备负责控制通信,通过对数据传输进行初始化/终止化,来发送数据并产生所需的同步时钟脉冲。从设备则是等待来自主设备的命令,并响应命令接收。主设备和从设备都可以作为发送设备或接收设备。无论主设备是作为发送设备还是接收设备,同步时钟信号都只能由主设备产生。在相同的总线上,I2C支持多个主设备的同时存在。图2-26显示了I2C总线上主设备和从设备的连接关系。








基于输入缓冲区和漏极开路晶体管(或者是集电极开路晶体管),可以构建I2C总线接口。当总线处于空闲状态的时候,漏极开路晶体管(或者是集电极开路晶体管)处于悬空状态,输出导线(SDA和SCL)为高阻态。为了使总线正常工作,应该使用上拉电阻,将两条总线都上拉到供电电压(TTL系列器件为+5V,CMOS系列器件为+3.3V)。上拉电阻通常取值为2.2K。使用上拉电阻,总线上输出导线处于空闲状态的时候,对应于高电平。



通过将设备地址线硬件连接到所需的逻辑电平上,可以分配I2C设备的地址。在嵌入式设备中,当设计嵌入式硬件的时候,需要分配各种I2C设备的地址并完成硬件连接。系统与I2C从设备通信的工作顺序如下:



(1) 主设备将总线上的时钟线(SCL)拉高到高电平。



(2) 当SCL线处于高电平逻辑(这是数据传输的启动条件)的时候,主设备将数据线(SDA)拉低到低电平。



(3) 主设备通过SDA线,将从设备地址(具有7位或10位宽度)发送到通信目的地址。从设备会在SCL线上产生时钟脉冲,用于同步位接收。需要说明的是,系统总是首先传输数据的MSB(最高位)。在时钟信号处于高电平期间,总线中的数据是有效的。



(4) 根据需求,主设备发送读位或写位(位值等于1意味着读操作,位值等于0意味着写操作)。



(5) 主设备等待从设备发出确认位。在发送读/写操作命令的同时,从设备的地址也会发送到总线上。对于连接到总线上的从设备,会将接收到的地址与分配的地址进行比较。



(6) 如果从设备接收到来自主设备的指令并且地址正确,那么从设备通过SDA线发送确认位(值为1)。



(7) 主设备接收到确认位之后,如果操作指令是向设备写入数据,就通过SDA线向从设备发送8位数据。如果操作指令是从设备读出数据,从设备将通过SDA线将数据发送给主设备。



(8) 对于写入操作,在字节传输结束之后,主设备等待从设备发送确认位;对于读出操作,在字节传输结束之后,主设备向从设备发送确认位。



(9) 当时钟线SCL处于逻辑高电平(表示停止)的时候,通过将SDA线拉高到高电平,主设备可以终止数据传输。



I2C总线支持三种不同的数据速率:标准模式(数据速率为100kb/秒,即100kbps)、快速模式(数据速率为400kb/秒,即400kbps)、高速模式(数据速率为3.4Mb/秒,即3.4Mbps)。第一代I2C设备设计所支持的数据速率只有100kbps,新一代I2C设备则能够以高达3.4Mbps的数据速率工作。



2. SPI总线



SPI总线是同步、双向、全双工的4线式串行接口总线,最早由Motorola公司提出。SPI是由“单个主设备+多个从设备”构成的系统。需要说明的是:在系统中,只要任意时刻只有一个主设备是处于激活状态的,就可以存在多个SPI主设备。为了实现通信,SPI共有4条信号线,分别是:



(1)主设备出、从设备入(Master Out Slave In,MOSI):由主设备向从设备传输数据的信号线,也称为从设备输入(Slave Input/Slave Data In,SI/SDI)。



(2)主设备入、从设备出(Master In Slave Out,MISO):由从设备向主设备传输数据的信号线,也称为从设备输出(Slave Output/Slave Data Out,SO/SDO)。



(3)串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。



(4)从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。



图2-27显示了SPI总线上主设备和从设备的连接关系图。








主设备负责产生时钟信号,并通过将相应从设备的从设备选择信号拉低为低电平,选通所需的从设备。在没有选通的时候,所有从设备的数据输出线MISO都悬空处于高阻态。



SPI总线上的串行数据传输是用户可配置的。SPI设备包含特定的寄存器组,可以保存所需的配置。串行外围设备的控制寄存器用于保存各种配置参数,比如器件的主/从选择、通信波特率的选择、时钟信号控制等。状态寄存器则用于保存各种通信条件的状态,实现所需的数据传输和数据接收。



SPI的工作是基于移位寄存器的;为了实现数据传输或数据接收,主设备和从设备包含了专用移位寄存器。移位寄存器的长度取决于具体设备,通常是8的整数倍。数据在从主设备传输到从设备的过程中,主设备移位寄存器中的数据从MOSI管脚移出,然后通过从设备的MOSI管脚,输入到从设备的移位寄存器中。与此同时,由从设备移位寄存器移位出来的数据,通过MISO管脚,输入到主设备的移位寄存器中。也就是说,主设备和从设备的移位寄存器构成了一个循环缓冲区。对于特定类型的器件,可以通过配置寄存器(比如,对于Motorola公司生产的68HC12型控制器,需要配置SPI控制寄存器的LSBF位),决定最先发送的数据位是最高位还是最低位。



与I2C总线相比,SPI总线更适于数据流传输。SPI的不足之处在于,SPI不支持数据确认机制。



3. UART



基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信号来同步传输的发送端和接收端,而是依赖于发送设备和接收设备之间预定义的配置。对于发送设备和接收设备来说,两者的串行通信配置(波特率、单位字的位数、奇偶校验、起始位数与结束位、流量控制)应该设置为完全相同。通过在数据流中插入特定的比特序列,可以指示通信的开始与结束。当发送一个字节数据的时候,需要在比特流的开头加上起始位,并在比特流的末尾加上结束位。数据字节的最低位紧接在起始位之后。

返回列表