嵌入式系统设计的多种串行总线特性及比较
MOSI:主出/从入
MISO:主入/从出
SCK:串行时钟
SS:从属选择
芯片上“从属选择”(slave-select)的引脚数决定了可连到总线上的器件数量。
在SPI传输中,数据是同步进行发送和接收的。数据传输的时钟基于来自主处理器的时钟脉冲,摩托罗拉没有定义任何通用SPI的时钟规范。然而,最常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数,CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于SO-数据位的时钟相位。CPOL和CPHA的设置决定了数据取样的时钟沿。
b. 数据方向和通信速度
SPI传输串行数据时首先传输最高位。波特率可以高达5Mbps,具体速度大小取决于SPI硬件。例如,Xicor公司的SPI串行器件传输速度能达到5MHz。
c. SPI与UART比较
SPI通信快于UART通信,两者都可以用在中等速度外设的通信中,例如非易失性EEPROM存储器。然而,SPI更常用于EEPROM或数模变换器的通信中。
有些UART能支持SPI通信,在这种情况下,会用一个通用IO作为从属选择引脚。
3. I2C总线
I2C是由飞利浦公司开发的双线同步总线。像SPI一样,该总线可用来与EEPROM、ADC、DAC和LCD这类慢速器件进行通信。
a. I2C通信
I2C是一个半双工、多主总线,该总线网络有一个或几个主控器件和很多个从器件。信息由两条串行线传输:串行数据线(SDA)和串行时钟线(SCL)。图1显示了使用两个主控和三个从器件相连接的例子。
网络中的每一个器件都预指定一个7位或10位的地址。飞利浦会给器件制造商分配地址,也有一个特定的地址用于高速通信,以及一个通用呼叫地址用于与网络中所有器件的通信。10位寻址的优点是允许更多的器件(高达1024个)布置在网络中。然而,总线中器件的数目取决于总线的电容量,必须限制在400pF以内。
主控器件发起数据传送,并提供用于通信的时钟信号。通信开始于SCL为高电平时SDA由高到低的转换,紧接着是一个7位或10位的从地址,一个数据方向位(R/W),一个应答位和停止状态。停止状态定义为在时钟信号为高时数据线电平由低到高的转换。每一个数据字节长度为8位,单次传送的字节数并没有限制。
由于I2C是一个多主总线,因此可能有两个或更多的主控器件同时试图访问总线,在时钟信号为高电平时在总线上置“1”的主控器件赢得总线仲裁。
I2C有三种不同的运行模式:标准、快速和高速模式。在使用快速和高速模式时,可能某个从属器件不能像主控器件那么快地处理数据。此时,从属器件会将SCL线拉至低电平来保持总线,这迫使主控器件进入等待状态,直至从属器件准备就绪。
b. 数据方向和通信速度
数据传输首先从最高位开始。I2C总线设计用于三种数据传输速度,每个都向下兼容性:
低速,数据传输率为0到100kbps;
快速,数据传输率可以高达400kbps;
高速,数据传输率可以高达3.4Mbps。
c. I2C与SPI比较
I2C和SPI都能用于低速器件的通信,而SPI的数据传输速率高于I2C。此外,SPI具有一个内在地址功能,不需要设计一个额外的寄存器来测试地址,从而减少软件和硬件的设计开销。
4. 控制器区域网络
控制器区域网络(CAN)是一个多主异步串行总线。由于它具有优良的错误处理机制及可靠的数据传送性能,该总线在汽车工业中非常普遍,在高安全系数要求的医疗行业中也正在得到普及。
CAN最初由德国的Robert Bosch公司开发,提供给汽车电子系统所用的低成本通信总线,现在已经成为国际标准,被采用为高速应用的ISO11898标准和用于低速应用的ISO11519标准。
a. CAN通信
当总线空闲时,任何CAN节点都可以开始数据发送。如果两个或更多的节点同时开始发送,就使用标识符来进行按位仲裁以解决访问冲突。CAN是一个广播类型的总线,所有节点都接收总线上的数据,硬件上的过滤机制决定消息是否提供给该接点用。
b. 四种消息帧的类型
数据帧:该帧从一个发送器承载数据到一个接收器。根据CAN规范有两种数据帧格式,它们的唯一本质区别在于标识符的长度:CAN标准帧,也称为CAN2.0A,支持11位长度的标识符;另一个是CAN扩展帧,也称为CAN2.0B,支持29位长度的标识符。图2显示了两种规范的CAN数据帧。
远程帧:此帧由一个接收CAN节点发送,用来请求带有远程帧中规定的标识符的数据帧。
错误帧:此帧将任何总线错误通知其它单元,在接收到这个帧时发送器会自动进行消息重发。
超载帧:超载帧由一个忙的CAN节点送出,以请求在前后数据帧之间增加一个额外的延迟。
c. CAN硬件术语
基本CAN(Basic CAN)控制器:这是一种廉价的CAN控制器,具有有限的发送/接收消息缓冲器,以及有限的CAN消息过滤机制。
完全CAN(Full CAN)控制器:完全
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)