《UART以及其他接口协议.docx》由会员分享,可在线阅读,更多相关《UART以及其他接口协议.docx(10页珍藏版)》请在三一办公上搜索。
1、UART以及其他接口协议2007-06-26 16:42由于在消费类电子产品、计算机外设、汽车和工业应用中增加了嵌入式功能,对低成本、高速和高可靠通信介质的要求也不断增长以满足这些应用,其结果是越来越多的处理器和控制器用不同类型的总线集成在一起,实现与PC软件、开发系统(如仿真器)或网络中的其它设备进行通信。目前流行的通信一般采用串行或并行模式,而串行模式应用更广泛。 微处理器中常用的集成串行总线是通用异步接收器传输总线、串行通信接口、同步外设接口(SPI)、内部集成电路(I2C)和通用串行总线,以及车用串行总线,包括控制器区域网(CAN)和本地互连网(LIN)。这些总线在速度、物理接口要求和
2、通信方法学上都有所不同。本文将对嵌入式系统设计的串行总线、驱动器和物理接口这些要求提供一个总体介绍,为选择最优总线提供指导并给出一个比较图表(表1)。为了说明方便起见,本文的阐述是基于微处理器的设计。 串行与并行相比 串行相比于并行的主要优点是要求的线数较少。例如,用在汽车工业中的LIN串行总线只需要一根线来与从属器件进行通信,Dallas公司的1-Wire总线只使用一根线来输送信号和电源。较少的线意味着所需要的控制器引脚较少。集成在一个微控制器中的并行总线一般需要8条或更多的线,线数的多少取决于设计中地址和数据的宽度,所以集成一个并行总线的芯片至少需要8个引脚来与外部器件接口,这增加了芯片的
3、总体尺寸。相反地,使用串行总线可以将同样的芯片集成在一个较小的封装中。 另外,在PCB板设计中并行总线需要更多的线来与其它外设接口,使PCB板面积更大、更复杂,从而增加了硬件成本。此外,工程师还可以很容易地将一个新器件加到一个串行网络中去,而且不会影响网络中的其它器件。例如,可以很容易地去掉总线上旧器件并用新的来替代。 串行总线的故障自诊断和调试也非常简单,可以很容易地跟踪网络中一个有故障的器件并用新器件替换而不会干扰网络。但另一方面,并行总线比串行速度快。例如,Rambus公司的“Redwood”总线速度可高达6.4GHz,而最高的串行速度不会超过几个兆赫。 在工业和汽车应用中常用的串行协议
4、 1. UART UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信。 a. UART通信 UART首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是7个或8个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。 在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节
5、从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。 b. 数据方向和通信速度 数据传输可以首先从最低有效位(LSB)开始。然而,有些UART允许灵活选择先发送最低有效位或最高有效位(MSB)。 微控制器中的UART传送数据的速度范围为每秒几百位到1.5Mb。例如,嵌入在ElanSC520微控制器中的高速UART通信的速度可以高达1.1152Mbps。UART波特率还受发送和接收线对距离(线长度)的影响。 目前,市场上有只支持异步通信和同时支持异步与同步通信的两种硬件可用于UART。前者就是UART名字本身的含义,在摩托罗拉微控
6、制器中被称为串行通信接口(SCI);Microchip微控制器中的通用同步异步收发器(USART)和在富士通微控制器中的UART是后者的两个典型例子。 c. 计算机中的UART UART是计算机中串行通信端口的关键部分。在计算机中,UART相连于产生兼容RS232规范信号的电路。RS232标准定义逻辑“0”信号相对于地为3到25伏,而逻辑“1”相对于地为-3到-25伏。所以,当一个微控制器中的UART相连于PC时,它需要一个RS232驱动器来转换电平。 2. 同步外设接口 同步外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与EEPROM、ADC、FRAM和显示驱动器
7、之类的慢速外设器件通信。 a. SPI通信 该总线通信基于主-从配置。它有以下4个信号: MOSI:主出/从入 MISO:主入/从出 SCK:串行时钟 SS:从属选择 芯片上“从属选择”(slave-select)的引脚数决定了可连到总线上的器件数量。 在SPI传输中,数据是同步进行发送和接收的。数据传输的时钟基于来自主处理器的时钟脉冲,摩托罗拉没有定义任何通用SPI的时钟规范。然而,最常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数,CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于SO-数据位的时钟相位。CPOL和CPHA的设置决定了数据取样的时钟沿。 b. 数
8、据方向和通信速度 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通信 I2
9、C是一个半双工、多主总线,该总线网络有一个或几个主控器件和很多个从器件。信息由两条串行线传输:串行数据线(SDA)和串行时钟线(SCL)。图1显示了使用两个主控和三个从器件相连接的例子。 网络中的每一个器件都预指定一个7位或10位的地址。飞利浦会给器件制造商分配地址,也有一个特定的地址用于高速通信,以及一个通用呼叫地址用于与网络中所有器件的通信。10位寻址的优点是允许更多的器件(高达1024个)布置在网络中。然而,总线中器件的数目取决于总线的电容量,必须限制在400pF以内。 主控器件发起数据传送,并提供用于通信的时钟信号。通信开始于SCL为高电平时SDA由高到低的转换,紧接着是一个7位或10
10、位的从地址,一个数据方向位(R/W),一个应答位和停止状态。停止状态定义为在时钟信号为高时数据线电平由低到高的转换。每一个数据字节长度为8位,单次传送的字节数并没有限制。 由于I2C是一个多主总线,因此可能有两个或更多的主控器件同时试图访问总线,在时钟信号为高电平时在总线上置“1”的主控器件赢得总线仲裁。 I2C有三种不同的运行模式:标准、快速和高速模式。在使用快速和高速模式时,可能某个从属器件不能像主控器件那么快地处理数据。此时,从属器件会将SCL线拉至低电平来保持总线,这迫使主控器件进入等待状态,直至从属器件准备就绪。 b. 数据方向和通信速度 数据传输首先从最高位开始。I2C总线设计用于
11、三种数据传输速度,每个都向下兼容性: 低速,数据传输率为0到100kbps; 快速,数据传输率可以高达400kbps; 高速,数据传输率可以高达3.4Mbps。 c. I2C与SPI比较 I2C和SPI都能用于低速器件的通信,而SPI的数据传输速率高于I2C。此外,SPI具有一个内在地址功能,不需要设计一个额外的寄存器来测试地址,从而减少软件和硬件的设计开销。 4. 控制器区域网络 控制器区域网络(CAN)是一个多主异步串行总线。由于它具有优良的错误处理机制及可靠的数据传送性能,该总线在汽车工业中非常普遍,在高安全系数要求的医疗行业中也正在得到普及。 CAN最初由德国的Robert Bosch
12、公司开发,提供给汽车电子系统所用的低成本通信总线,现在已经成为国际标准,被采用为高速应用的ISO11898标准和用于低速应用的ISO11519标准。 a. CAN通信 当总线空闲时,任何CAN节点都可以开始数据发送。如果两个或更多的节点同时开始发送,就使用标识符来进行按位仲裁以解决访问冲突。CAN是一个广播类型的总线,所有节点都接收总线上的数据,硬件上的过滤机制决定消息是否提供给该接点用。 b. 四种消息帧的类型 数据帧:该帧从一个发送器承载数据到一个接收器。根据CAN规范有两种数据帧格式,它们的唯一本质区别在于标识符的长度:CAN标准帧,也称为CAN2.0A,支持11位长度的标识符;另一个是
13、CAN扩展帧,也称为CAN2.0B,支持29位长度的标识符。图2显示了两种规范的CAN数据帧。 远程帧:此帧由一个接收CAN节点发送,用来请求带有远程帧中规定的标识符的数据帧。 错误帧:此帧将任何总线错误通知其它单元,在接收到这个帧时发送器会自动进行消息重发。 超载帧:超载帧由一个忙的CAN节点送出,以请求在前后数据帧之间增加一个额外的延迟。 c. CAN硬件术语 基本CAN(Basic CAN)控制器:这是一种廉价的CAN控制器,具有有限的发送/接收消息缓冲器,以及有限的CAN消息过滤机制。 完全CAN(Full CAN)控制器:完全CAN是一个高成本、高性能的CAN控制器,具有能缓冲8个或
14、更多消息的缓冲器用于接收和发送。例如,富士通的集成CAN微控制器能提供16个消息缓冲器用于接收和发送。此外,富士通的MB90443微控制器能灵活地将两个CAN控制器的消息缓冲器组合在一个中,以形成能缓冲32个消息的缓冲器。 标准CAN控制器:该CAN控制器能够处理仅有11位标识符的消息。 扩展CAN控制器:该控制器能够处理含有11位和29位标识符的消息。 时间触发CAN(TTCAN)控制器:该CAN控制器根据时间和事件的触发来安排CAN消息,增强了CAN网络的总体性能和行为的确定性。 d. 数据方向和通信速度 数据字节的传输首先从最高位开始。一个8位的数据字节能在一次发送中进行传输,最大的CA
15、N总线速度是1Mbps。 e. CAN在汽车中的应用 图3的例子显示了CAN网络是如何通过富士通的16位CAN微控制器在汽车中应用。 f. 物理接口 大多数CAN微控制器需要一个外部收发器来连接物理总线。目前市场上提供以下一些收发器: 高速CAN收发器有飞利浦的82C251,TI的SN65/75LBC031,Bosch的CF150,C250,Unitrode的UC5350; 低速CAN收发器有飞利浦82C252、TJA1053,西门子TLE 6252G; 单线CAN收发器有飞利浦AU5790,英飞凌TLE 6255,Delphi DK166153。 5.本地互连网络 本地互连网络(LIN)是一
16、个低成本、单线串行总线,能执行全双工串行通信。LIN用在汽车的分布式电子系统中,例如与智能传感器和传动器的通信。LIN协议能采用低成本的UART/SCI接口来实现,几乎所有的微控制器都提供这些接口。 a. LIN通信 LIN网络由一个主控和多个从器件组成,主控器件发起所有的通信。 所有节点执行包括发送和接收任务在内的从属通信任务。此外,主节点执行主控发送任务,主控任务能决定什么时候、哪一个帧将在总线上传输。在该方式中,没有总线仲裁,并且在最坏情况下每个消息的时间很容易计算。当一个消息帧发送时,在接收和过滤标识符后,仅有一个从器件得到激活。 总线上的所有消息以帧的形式发送,帧由一个帧头和响应字段
17、(response field)组成。主控器件始终在总线上发送帧头,帧头至少由一个13位字段、一个同步字节和一个6位标识符组成,该标识符的范围为0到63。响应字段由两个、四个和八个数据字节和具有倒置8位和的校验和字段,以及所有的数据字节和标识符组成。 图4显示了在一个消息帧上所有字段的排列顺序。 b. 数据方向和通信速度 数据字节的传送首先从LSB开始,LIN总线的最大速度是20kbps。 c. 物理接口 只有很少微控制器集成有专用的LIN硬件,大多数供应商用SCI或UART来提供支持。因为LIN物理层是一个从汽车自诊断用ISO9141标准引出的单线12V总线,所以需要一个外部LIN收发器来转
18、换电平。例如当前市场上已有供货的摩托罗拉IMC33689 LIN和英飞凌公司的TLE6259-2G收发器。 d. CAN与LIN的比较 CAN和LIN两者都使用在汽车工业中。CAN用于汽车中的高速和低速网络,而LIN仅用于低速网络,如门控制单元。在很多方面,CAN比LIN更贵也更可靠,必需在可靠性和为设计硬件与软件支付额外成本之间进行权衡。由于LIN的成本较低且容易在UART中实现,故在低速网络应用方面LIN有望替代CAN。 6. 其它通用串行总线 用在微控制器工业中的其它总线有RS422、RS485、USB和Microwire. RS422和RS485通信可以用一个UART来执行。因此,在用
19、于这些总线时微控制器中不需要增加另外的硬件。 USB总线的普及性极大地鼓舞了微控制器制造商把USB控制器集成到他们的微控制器中。将外围器件加到USB总线中是很容易的,并不需要重自举系统。Cypress半导体公司和其它业界主导厂商都提供各种系列USB芯片来满足市场的需要。 国家半导体公司(NSC)开发的单线总线Microwire用在许多微控制器和像EEPROM这类非易失性存储器,以及ADC中。该总线能像SPI一样提供同步通信,可用在使用SPI的地方。有些微控制器供应商通过使用UART来支持Microwire总线。 FlexRay是一种在汽车工业中即将推出的新型总线,可用在使用CAN总线的地方,该
20、总线的速度是CAN总线的10倍,可以达到10Mbps。目前微控制器制造商正在努力开发具有FlexRay总线的器件。 总线选择准则 不同的应用在选择总线的标准方面并不同,下面是一些进行总线选择的通用参考准则: 1. 评估使用不同串行总线在网络上连接各种器件的系统成本。例如,在汽车应用中,一个只需要控制功能的系统可以用像LIN这类低成本的串行总线来管理。 2. 在效率、速度和可靠性方面确定对你最重要的性能。例如,对于一个安全关键系统来讲,可靠性是极为重要的,故而CAN是较好的选择。 3. 确定在网络上将连接多少器件,以及总线将可能具有的电容量。有些串行总线对连在网络上的器件数目有限制。 4. 注意
21、器件间的距离,有些串行总线只支持短距离通信。 5. 如果用在汽车中,CAN或LIN是较好的选择。由于它们具有很强的鲁棒性,因此具有较强的容故障能力和传输可靠性。 作者:Neelima Chaurasia 高级应用工程师 Email: nchauras Fujitsu Microelectronics America公司遥控接收部分的定制分如下几种情况:一,无独立接收器的情况如果客户不希望设计单独的遥控接收器而是有主设备直接对遥控信号进行解码,那么我公司可以提供如下解决办法:一是客户端原有的遥控解码程序不必更改,客户提供需要的编码格式我公司严格按此格式设计相应编码的遥控器即可达到目的;另一种方法
22、是我方提供遥控器编码的详细规格,客户按此设计新的解码程序。二,UART接口的定制UART是适合芯片与芯片之间短距离通信的选择,我公司一般提供TTL电平兼容空闲态输出高电平的“9600,8,n,1”的格式,也就是通信速率为9600bps,8数据位,1停止位,不带校验位。基本上所有档次的微处理机从简单的1位机、4位机、8位机到复杂的32位嵌入式处理器,都可以直接提供UART接口或直接对UART格式的信号进行简单的分析和解码,这比直接处理红外遥控的编码信号要简单得多。UART是最为简单的通信方式,此外还可以根据客户的要求提供其他方式的通信协议。三,COM(RS232)接口的定制:符合RS232标准的
23、接口也常称之为COM口即串行接口,从信号的格式上讲RS232与UART基本上是一会事,最重要的区别是RS232必须符合RS232电平规格,标准的RS232电平范围是-12V到+12V,常态即空闲时没有数据输出的情况下为-12V,正因为如此,采用RS232规格可以将数据输出到更远的地方。我公司提供的COM接口是兼容RS232电平的“9600,8,n,1”的格式,也就是通信速率为9600bps,8数据位,1停止位,不带校验位。说是兼容RS232电平的含义是,PC机的COM是不带电源端子的,接收器本身从数据线上取电,对功耗有严格的限制,输出的电平也在0到5V之间而不是RS232要求的-12V到+12
24、V电平范围,所以COM接口的传输距离也就达不到真正的RS232规格,一般延长线最多可以接3-5米。如果客户需要接收器与主设备例如PC机之间相隔更要远的距离,唯一的办法是对接收器单独供电,因为从主设备就是直接取+5V或12V的直流电也不会可靠传输10米以上的距离,更不用说从COM口的数据线上取电了。接收器单独供电后可以将接收器做成真正的完全符合RS232设备的接口,可以将遥控信号可靠地传输数十米的距离。更远的距离需求必须采用RS485接口标准,RS485采用平衡差分方式,有极为出色的抗干扰能力,在通信速率为9600BPS的情况下,最大传输距离为1200米。如果遥控适配器采用RS485接口那么在主
25、设备这一端也必需提供RS485接口,对一些只有COM接口的设备例如PC机而言,最为简单的办法就是加装接口转换器,直接将RS485信号转变为RS232信号。此外,红外遥控器都有一个特点,就是为了提高可靠性采取多码连续发送的方式,也就是说按下遥控器的某一个键,绝大多数会发出一连串相同的编码直到按键抬起,这是因为红外线在空间中传播遇到各种各样的干扰因素,而且遥控的方向距离等不同造成接收信号强弱不一致直接影响接收的效果,采用重复发码的方式提高可靠性是十分必要的。但在设置专用的遥控解码芯片之后,将解码后的数据输出到主设备时,通信的可靠性就有很好的保障,可以不用连续发码的方式,而是直接采用按下一键发出一个
26、字节的方式,以降低通信接收程序的复杂性。以PC机键盘为例,键盘有两个参数的设置直接影响操作者的使用习惯。一个参数是重复响应时间,一个参数是重复速率。一般按一下键就产生一个码,但有时候需要输入一串同样的自符或者连续调节某一个量例如播放器的音量,这时后键盘重复发码就十分的必要的,按键时间稍长一点例如500ms不放开,第二个同样的码值会出现,这个500ms的时间就是重复响应时间,根据大量的测试表明重复响应时间至少要设置为250ms。长时间按下键不松开,第三个、第四个键会相继出现,每秒中出现多少个重复键就用按键重复速率来表示,一般是每秒20-30个键值。因为考虑到后端设计的灵活性,在遥控发射器这一级不
27、能考虑重复响应时间,所以只要一按键就会发出一串的码,重复速率范围在25ms-300ms之间,100ms左右的居多。如果不特别指定,我公司的串口产品用于普通编码的遥控器时采取一键一码的方式。客户提出定制要求时可以指定部分键可以连续发码,例如在视频会议系统中,有些键用来调节摄像机的光圈、云台的旋转,对这些连续量的调节使用连续法码的按键处理方式操作起来就比较流畅、快捷。如果还是采取一键一码的方式也是可以的,效果是,按一下键抬起来,设备动作一下,再一次按下此键,设备再动作一下,如此反复,两次按键之间时间要有一定的间隔,必须大于遥控器编码的重复发码周期例如100ms。处理重发发码是一件比较繁琐的工作,实
28、时性要求很高,不然会直接影响最终产品的使用效果。 部分产品例如带鼠标的4型遥控器,采用面向字节的编码方式,除了重复发码机制外,还有开始字节(make码0xa0)和结束字节(break码0xaa)以实现更复杂的控制功能,例如在实现鼠标拖动时,左键按下,鼠标可以任意移动,只有这样才能实现拖动功能。驱动软件:以PC机为例,无论是Windows还是linux等,操作系统本身都没有标准的遥控驱动程序。我公司的解决办法是,一方面可以提供详细的串口数据格式,客户在应用程序中直接对串口编程读取遥控代码作出相应的处理即可;另一方面,可以针对我公司的遥控器产品开发相应的驱动程序,包括Windows98/me/2k/xp系列、DOS系列、WindowsCE系列和Linux系列。串口即可以模拟键盘也可以模拟鼠标,还可以实现一些普通键盘和普通鼠标不具备的功能,例如按某一遥控键启动一个特定的应用程序,按一定的规则按一系列的键可以作身份人证等等。串口还可以做成多用户遥控器,每一次按键同时输出该遥控器的地址码和该按键的码值,详见多用户遥控器的说明。100