总线技术在单片机中非常重要,协助CPU控制整个系统工作,各种外扩芯片或外接设备都需要和总线打交道。总线与接口非常相似,一般来说,接口不具备多个设备的选择功能,根据不同设备,CPU总线往往具有多个设备寻址、选择功能,能对一条总线上的多个设备进行寻址与操作。
总线就是单片机内部各个功能部件之间以及与外部设备进行传递信息的一组信号线的集合,为各部件间提供标准信息通路。一个单片机系统由CPU、存储器、输入/输出等部分组成,单片机的各个部件均通过总线来连接。单片机总线主要有如下指标。
① 总线宽度。总线宽度是指数据总线一次操作可以传输的数据位数,通常微型计算机系统的总线宽度不会超过其CPU的外部数据总线宽度。
② 总线频率。总线通常都有一个基本时钟,这个时钟是总线工作的最高频率时钟。
③ 单个数据传输周期数。传输方式不同,每个数据传输所用的时钟周期数也不同。
根据信息传输方式可以将总线分为并行总线和串行总线。
并行总线是CPU与外设之间传输数据的通道。采用并行传送方式在单片机与外部设备之间进行数据传送的接口称为并行接口。它有两个主要特点:一是同时并行传送的二进制位数就是数据宽度;二是在单片机与外设之间采用应答式的联络信号来协调双方的数据传送操作,这种联络信号又称握手信号。早期采用并行总线传输数据是提高数据传输速率的重要手段,但由于并行传送方式的前提是用同一时序传播信号,用同一时序接收信号,而过分提升时钟频率将难以让数据传送的时序与时钟合拍,布线长度稍有差异,数据就会以与时钟不同的时序送达。另外,提升时钟频率还容易引起信号线间的相互干扰,导致传输错误。因此,并行方式难以实现高速化。从制造成本的角度来说,增加位宽会导致电路板的布线数目随之增加,成本随之攀升。
串行总线中的数据是一位紧接一位在通信介质中进行传输的。在传输过程中,每一位数据都占据一个固定的时间长度。串行总线将外部设备与CPU之间联系起来,使它们能够通过串行传送方式互相传送和接收信息。由于串行总线接口简单,且传输速率已有很大提高,目前多数单片机具有多种串行总线,使用场合非常多。
并行总线在同一时刻可以传输多个二进制位,主要性能参数有总线位宽、总线频率、总线带宽。
总线位宽是指总线能同时传送的二进制数据的位数,或数据总线的位数,即8位、16位、32位、64位等。总线位宽越大,数据传输速率越大。
总线频率是指总线的工作时钟频率,以MHz为单位,工作频率越高,总线工作速度越快,总线带宽越大。
总线带宽指总线在单位时间内可以传输的数据总量,它与总线位宽和总线频率密切相关,其计算方式如下:
总线带宽=总线位宽×总线频率÷8
例如,对于64位、800MHz的前端总线,它的数据传输速率=64bit×800MHz÷8(Byte)=6.4GB/s。因此,常说的总线带宽就是指总线的数据传输速率。
通用计算机中常用的并行总线有PC/XT、ISA(AT)、EISA、PCI及AGP等总线。
单片机的并行总线是指片内的总线。近十几年来,单片机发展迅速,片内总线的位数及频率均有很大提高。目前,单片机的并行总线以8位、16位、32位为主,少数采用64位并行总线。需要注意的是,目前多数16位或32位单片机的并行总线在片内和片外有差异,主要原因是单片机集成了多种功能部件,片外扩展器件较少,因此部分单片机片内并行总线没有或只有部分引到片外。
1.USB(Universal Serial Bus,通用串行总线)
USB是一种应用于计算机或单片机领域的新型串行通信技术。USB是Intel、Compaq、Microsoft、IBM、DEC、Northern Telecom、NEC七家公司共同制定的串行接口标准。1994年11月制定了第一个草案,1996年2月公布了USB规范版本1.0.1998,在进一步对以前版本的标准进行阐述和扩充的基础上,发布了USB 1.1。USB 2.0发布于1999年,最高数据传输速率可以达到480Mbit/s。2008年,USB 3.0发布,USB 3.0采用了四线制差分信号线,支持双向并发数据流传输,最大传输速率可达5.0Gbit/s。
USB的物理连接是一种分层的星形结构,集线器(Hub)是每个星形结构的中心,计算机是根集线器(Root Hub),外设或附加的Hub与之相连。USB最多可支持5个Hub层、127个外设。
USB通过4线电缆传输数据和供电,其中D+和D-是差模信号线, V cc 为+5V电源,GND为电源地,如图1-3所示。
图1-3 USB信号的差分传输方式
USB提供12Mbit/s高速模式和1.5Mbit/s低速模式进行数据传输,两种模式可并存于一个系统中。低速模式主要用于一些低速设备(如鼠标、键盘等)。高速模式用于系统中的高速设备(如磁盘、CD刻录机等)。高速模式必须使用带屏蔽层的双绞线,最大长度为5m。低速模式可用一般双绞线,最大长度为3m。
USB设备包括Hub和功能设备。功能设备又可分为定位设备和字符设备。一个USB设备可以分为三层:底层是总线用户接口,用于发送和接收包;中间层是逻辑设备,用于处理总线接口与不同端点之间的数据流通;最上层是功能层,即USB设备所提供的功能,如鼠标、键盘等。
USB主机在USB系统中处于中心地位,对连接的USB设备进行控制。USB主机控制所有USB设备的访问,一个USB设备只有在USB主机允许时才能访问USB总线。USB主机包括:设备驱动程序、USB系统软件、USB主控制器。另外,USB还有两个软件接口:USB驱动接口(USBD)和主机控制驱动接口(HCD)。
2.SPI(Serial Peripheral Interface)总线
Motorola公司的SPI总线的基本信号线为3根传输线,即MOSI、MISO、SCK。传输速率由主片发出的SCK频率决定,MOSI为主片数据输出和从片数据输入,MISO为从片数据输出和主片数据输入。SPI总线的系统结构如图1-4所示,它包含了一个主片和多个从片,主片通过发出片选信号 来选择与哪个从片进行通信。当某个从片的 信号有效时,能通过MOSI接收指令、数据,并通过MISO发回数据,而未被选中的从片的MISO端处于高阻状态。
主片在访问某一从片时,必须使该从片的片选信号 有效;主片在SCK信号的同步下,通过MOSI发出指令、地址信息;如要将数据输出,则接着写指令,由SCK同步在MOSI上发出数据;如要读回数据,则接着读指令,由主片发出SCK,从片根据SCK的节拍通过MISO发回数据。
图1-4 SPI总线的系统结构
对具有SPI接口的从片器件来讲,SCK、MOSI是输入信号,MISO是输出信号。SCK用于主片和从片通信的同步。MOSI用于将信息传输到器件,输入的信息包括指令、地址和数据,且指令、地址和数据的变化在SCK的低电平期间进行,并由SCK信号的上升沿锁存。MISO用于将信息从器件传出,传出的信息包括状态和数据,信息在SCK信号的下降沿送出。
3.I 2 C总线
I 2 C总线是由Philips公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少、控制方式简单、器件封装尺寸小、通信速度较大等优点。I 2 C总线主要特点如下。
① 只需要两条总线线路:一条串行数据线SDA,一条串行时钟线SCL。
② 每个连接到总线的器件都可以通过唯一的地址访问,主机可以作为发送器或接收器。
③ 它是一个真正的多主机总线,如果两个或更多主机同时初始化,可以通过冲突检测和仲裁防止数据被破坏。
④ 串行的8位双向数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。
由于连接到I 2 C总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0(低)和逻辑1(高)的电平不是固定的,它由电源 V cc 的相关电平决定,每传输一个数据位就产生一个时钟脉冲。SDA线上的数据必须在时钟的高电平周期内保持稳定。数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。
4.UART(Universal Asynchronous Receiver/Transmitter)
UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工发送和接收。在嵌入式设计中,UART用于主CPU与辅助设备CPU通信。
UART在发送时,首先将并行数据转换成串行数据,再按二进制位进行传输。在UART通信协议中规定信号线上的状态位高电平代表“1”,低电平代表“0”。当两个设备使用UART串口通信时,必须先约定好统一的传输速率和帧格式。如果通信双方速率不同,会导致接收方和发送方的数据位错位,出现收/发数据不一致。帧格式通常为起始位、数据位、停止位,其中数据位的长度通常是8位或9位,其中,9位数据通常包含一个奇偶校验位。接收器发现起始位时知道对方准备发送数据,并尝试与发送器时钟频率同步。如果选择了奇偶校验位,UART就在数据位后面加上奇偶校验位,可以用该位进行校验。
在接收过程中,UART从接收的串行数据中去掉起始位和结束位,对收到的数据进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。数据传输可以首先从最低有效位(LSB)开始。然而,有些UART允许灵活选择先发送最低有效位或最高有效位(MSB)。
UART是单片机中串行通信端口的关键部分。计算机中的UART连接到产生RS232规范信号的电路,因此,当计算机与其他微处理器进行串口通信时,需要进行TTL电平与RS232电平相互转换的电路处理。单片机的UART数据传输速率范围为每秒几百位到1.5Mbit。UART通信速率通常受发送和接收线距离长短的影响。
近几年,单片机串口UART有新的扩展,如STM32F10x系列的32位单片机中串口通信描述为USART(Universal Synchronous Asynchronous Receiver and Transmitter),即通用同步/异步收发器。从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型。当串口进行异步通信时,USART与UART没有区别,但用在同步通信时,USART与UART的区别之一就是能提供主动时钟。如STM32F10x系列单片机的USART可与支持ISO 7816标准的智能卡接口直接通信。