1 / 59

第 8 章 PIC 与计算机接口设计

第 8 章 PIC 与计算机接口设计. 本章主要对 PIC 单片机系统的有关数据传输和数据通信的基本方法及相关的器件芯片做较为详细的介绍,围绕 PIC 单片机在实际应用中与计算机通信时的接口设计。根据通信的不同方式介绍 PIC 单片机与计算机的各种通信方式和数据传输方式。 本章内容主要包括: PIC 与计算机的串行通信、 PIC 的 USART 使用及 PIC 的 USB 接口设计等。 PIC 单片机(或者计算机)与外界进行的信息交换经常被人们称为数据通信,通信的基本方式分为并行通信和串行通信两种。

talasi
Download Presentation

第 8 章 PIC 与计算机接口设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 PIC与计算机接口设计 本章主要对PIC单片机系统的有关数据传输和数据通信的基本方法及相关的器件芯片做较为详细的介绍,围绕PIC单片机在实际应用中与计算机通信时的接口设计。根据通信的不同方式介绍PIC单片机与计算机的各种通信方式和数据传输方式。 本章内容主要包括:PIC与计算机的串行通信、PIC的USART使用及PIC的USB接口设计等。 PIC单片机(或者计算机)与外界进行的信息交换经常被人们称为数据通信,通信的基本方式分为并行通信和串行通信两种。 并行通信是指一次就可以同时传送一个数据字的传输方式(其中包括8位、16位,甚至更长位的数据)。其优点是传输速度快;缺点是需要同时连接的线数多,尤其在通信距离较长时,传输线的成本会急剧增加。对于单片机而言,还需要占用多个宝贵的引脚资源。40引脚的PIC16F87X内有一个并行通信模块PSP,它就是利用RD和RE端口的11个引脚(8根数据线+3根控制线),来实现与其他处理器(如计算机)之间的并行通信。 串行通信是指把一个数据字逐位顺序分时进行的传输方式。其缺点是指传送速度较低,假设并行传送n位数据所需要的时间是T,那么串行传送同样数据的时间至少nT,实际工程上往往总是大于nT,原因

  2. 是时间上还需要额外的开销。而串行通信的突出的优点是仅仅需要数量很少的传输线,特别适合远距离传输。此外,对于PIC单片机而言,串行通信的另一个优点就是,需要占用的引脚的资源较少。是时间上还需要额外的开销。而串行通信的突出的优点是仅仅需要数量很少的传输线,特别适合远距离传输。此外,对于PIC单片机而言,串行通信的另一个优点就是,需要占用的引脚的资源较少。 PIC16F87X单片机内部集成了两个类型不同的串行通信模块,即通用同步/异步收发器USART(Universal Synchronous/Asynchronous Receiver Transmitter)模块和主控同步串行端口MSSP(Master Synchronous Serial Port)模块。前者的主要应用目标是系统之间的远距离串行通信,此项技术的应用历史比较久远。而后者的主要应用目标是系统内部近距离的串行扩展。 串行通信的实现,在制式、种类、形式、规范、标准、编码、检错、纠错、帧结构、组网方式、调制方式等方面,存在着多种类型、变化、选择和解决方案。例如,Philips公司发明的I2C总线,Intel等公司提出的SMBUS总线,Freescale公司首先应用的SPI接口,美国国家半导体公司(NSC)公司首先应用的MicroWire接口,达拉斯公司推出的1-Wire总线,美国电子工业协会推荐标准RS-232、RS433、RS-485接口,Intel等公司提出的USB总线,苹果公司提出的IEEE-1394总线,博世公司提出的CAN总线,现场总线基金推出的FF总线,Motorola公司联合东芝公司共同开发的LONworks总线等,都是用来实现与串行通信功能相关的技术和规范。

  3. 8.1 标准串行接口RS-232C接续 串行通信是指单片机或者计算机和外设之间使用一根数据信号线,数据在一个数据信号线上一位一位地进行传输,每一位数据都占据一个固定地时间长度,串行通信的特点是使用的数据线少,其传输的速度比较慢。串行通信的优点也正体现在远程通信和上下位机通信中,随着新的串行数据协议的诞生,速度和距离都有了较大提高。 一个完整的串行通信系统如图8.1所示,该通信系统包括数据终端设备(DTE)和数据通信设备(DCE)。 1.数据通信设备DTE:DTE是产生二进制信号的数据源,也是接收信息的目的,是由数据发送器或接收器或兼具两者组成的设备,它可以是一台计算机。 2.数据通信设备DCE:DCE是一个使传输信号符合线路要求,或者满足DTE要求的信号匹配器,它是提供数据终端设备与通信线路之间通信的建立、维持和终止连接等功能的设备,同时执行信号变换与编码,它可以是一个MODEM。

  4. 图8.1 串行通信系统 在数据通信、计算机网络以及分布式工业控制系统中,经常采用串行通 信来交换数据和信息。1969年,美国电子工业协会(EIA)公布了RS-232C作 为串行通信接口的电气标准,该标准定义了数据终端设备(DTE)和数据通信 设备(DCE)间按位串行传输的接口信息,合理安排了接口的电气信号和机械 要求,在世界范围内得到了广泛的应用。但它采用单端驱动非差分接收电路, 因而存在着传输距离不太远(最大传输距离15m)和传送速率不太高(最大位 速率为20Kb/s)的问题。远距离串行通信必须使用Modem,增加了成本。在分 布式控制系统和工业局部网络中,传输距离常介于近距离(<20m)和远距 离(>2km)之间的情况,这时RS-232C(25脚连接器)不能采用,用Modem又 不经济,因而需要制定新的串行通信接口标准。

  5. 1977年EIA制定了RS-449。它除了保留与RS-232C兼容的特点外,还 在提高传输速率,增加传输距离及改进电气特性等方面作了很大努力,并增 加了10个控制信号。与RS-449同时推出的还有RS-422和RS-423,它们是 RS-449的标准子集。另外,还有RS-485,它是RS-422的变形。RS-422、 RS-423是全双工的,而RS-485是半双工的。 RS-422标准规定采用平衡驱动差分接收电路,提高了数据传输速率(最 大位速率为10Mb/s),增加了传输距离(最大传输距离1200m)。 RS-423标准规定采用单端驱动差分接收电路,其电气性能与RS-232C 几乎相同,并设计成可连接RS-232C和RS-422。它一端可与RS-422连接, 另一端则可与RS-232C连接,提供了一种从旧技术到新技术过渡的手段。同 时又提高位速率(最大为300Kb/s)和传输距离(最大为600m)。 RS-485为半双工的,当用于多站互连时可节省信号线,便于高速、远距 离传送。许多智能仪器设备均配有RS-485总线接口,将它们联网也十分方便。 串行通信由于接线少、成本低,在数据采集和控制系统中得到了广泛的应用, 产品也多种多样。 8.1.1 RS-232C接口规格 RS-232C其中RS是Recommended Standard的缩写,代表标准,232是标 识符,C代表RS-232的最新一次修改(1969年),在这之前,有过RS-232A、 RS-232B标准,它规定连接电缆和机械、电气特性、信号功能及传送过程。 现在,计算机上的串行通信端口(RS-232)是标准配置端口,已经得到广泛 应用,目前计算机上一般都1~2个标准RS-232C串口,即通道COM1和COM2。

  6. 1.RS-232C标准的电气特性 EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了明确规定。在TXD和RXD 引脚上电平定义:逻辑1(MARK)= -3V~-15V;逻辑0(SPACE) = +3~+15V 在RTS、CTS、DSR、DTR 和DCD等控制线上电平定义:信号有效(接通,ON状态,正 电压)=+3V~+15V;信号无效(断开,OFF状态,负电压)=-3V~-15V 对于数据(信息码):逻辑“1”的传输的电平为-3V~-15V,逻辑“0”传输的电平 为+3V~+15V;对于控制信号;接通状态(ON)即信号有效的电平为+3V~+15V,断开状 态(OFF)即信号无效的电平为-3V~-15V,也就是当传输电平的绝对值大于3V 时,电路 可以有效地检查出来;而介于-3~+3V之间的电压即处于模糊区电位,此部分电压将使得 计算机无法准确判断传输信号的意义,可能会得到0,也可能会得到1,如此得到的结果 是不可信的,在通信时候体现的是会出现大量误码,造成通信失败。因此,实际工作时, 应保证传输的电平在±(3~15)V 之间。 目前,大部分计算机的RS-232C通信接口都使用了DB9连接器,主板的接口连接器有9 根针输出,也有些比较旧的计算机使用DB25连接器输出,表8.1为RS-232C串口引脚定义表。

  7. 表8.1 RS-232C串口引脚定义表

  8. RS-232C 规定的逻辑电平与一般微处理器、单片机的逻辑电平是不同的,例如 RS-232的逻辑“1”是以-3~-15V来表示的,而单片机的逻辑“1”是以+5V来表示的, 两者完全不同。因此,单片机系统要和电脑的RS-232接口进行通信,就必须把单片 机的信号电平(TTL电平)转换成计算机的RS-232C电平,或者把计算机的RS-232C 电平转换成单片机的TTL电平,通信时必须对两种电平进行转换。实现这种转换的方法 可以使用分立元件,也可以使用专用RS-232电平转换芯片。目前较为广泛地使用专用 电平转换芯片,如MC1488、MC1489、MAX232等电平转换芯片来实现EIA到TTL电 平的转换。下面介绍MAXIM公司的单电源电平转换芯片MAX232及接口电路。 如图8.2中所示,MAX232是单电源双RS-232发送/接收芯片,采用单电源(+5V) 供电,外接只需4个电容,便可以构成标准的RS-232通信接口,硬件接口简单,所以被 广泛采用。 图8.2 MAX232实物及芯片引脚排列

  9. 8.1.2 接续方法 单片机和计算机RS-232接口电路如图8.3所示,图中的C1、C2、C3、C4是电荷泵升压及电压反转部分电路,产生V+、V-电源供EIA电平转换使用,C5是VCC对地去耦电容,其值为0.1UF,电容C1~C5安装时必须尽量靠近MAX232芯片引脚,以提高抗干扰能力。 图8.3 采用MAX232CPE 芯片的PC机与单片机串行通信接口电路

  10. 图8. 4是一个采用分立元件构成的简易RS-232串行通信接口电路,使用三极管 进行电平转换,由于简单的通信,对于通信稳定性要求较高的应用,不建议使用分立 元件,因为分立元件电路的稳定性,误码率较高,不能完全满足RS-232C的全部技术 指标。分立元件组成的电路优点是成本低廉,部分网站上介绍的产品就分立元件构成。 图8. 4 采用分立元件的简易RS-232C通信接口电路

  11. 8.1.3 PIC串行通信设计实例 当 PIC单片机不具备片上硬件 USART或者USART不够用时,可以利用软件模拟实 现异步串行通信。Microchip公司推出的 PIC系列单片机PIC16C711具有运行速度快、 低功耗、价格低、体积小等优点。因为,不具备硬件 USART时需要用一般 I/O口来模拟 串行口。 1.串行接口硬件电路 如图 8. 5所示,RB0为接收脚,RB5为发送脚。RB0除作为一般 I/O引脚外,还可 以作为外部中断输入引脚,引起中断的方式分为上跳沿和下跳沿两种方式。设置下跳沿 引起中断。当起始位到来时,RB0上出现下跳沿,引起中断,如果不是干扰信号则开始 接收数据。 RS- 485标准的特点是抗干扰能力强,传输速率高、传送距离远。它规定了双端(平 衡式)电气接口特性。当单片机与具有 RS-485接口的PC机通信时,需要进行信号形式 的转换。从单片机发送到 PC机的信号首先转换成平衡信号,再送往 PC机。从PC机发送 到单片机的信号先转换成非平衡信号,再输入单片机。信号形式的转换工作由RS-485接 口芯片 SN75176完成。SN75176差分总线收发器工作在半双工方式,当工作于发送方 式时,发送使能引脚DE为高电平,接收使能引脚RE也为高电平。当工作于接收方式时, 发送使能引脚 DE为低电平,接收使能引脚RE也为低电平。这样,可以将 DE与RE连接 在一起,由 RB6引脚输出控制信号,控制 SN75176的发送和接收使能。为了减少线路 上信号的反射,需要匹配线路的特性阻抗。由于通信载体是双绞线,它的特性阻抗为 120Ω左右,所以线路设计时,在 RS- 485网络传输线的始端和末端各应接1只 120Ω 的匹配电阻,R1为单片机一侧的匹配电阻。由于 RS485芯片的特性,接收器的灵敏度 为 ±200mV,即差分输入端 VA-VB≥200mV时,输出逻辑“1”;VA- VB≤-200 mV时, 输出逻辑“0”。当︱VA-VB︱≤200 mV时,输出不确定。因此,当 A、B无信号输入时, 可能造成接收引脚R上出现低电平,这会误认为通信帧起始位到来而引起工作不正常。

  12. 为了避免这种情况发生,可以人工的让 A端电位高于 B端电位,使 R引脚在RS485总线 不发送期间呈现唯一的高电平,单片机不会被误中断而接收到乱字符。通过在 A、B接上 拉、下拉电阻 R3、R2可解决这个问题。 图 8. 5PIC16C711与 PC机之间的接口电路 2.单片机通信程序框图 PIC单片机与 PC机之间的通信方式为半双工方式。一帧数据包括一位起始位、8位数 据位、一位停止位和无奇偶校验位。设发送和接收数据的波特率为9600 b/s,则每一位 占用的时间td为19600s,约为104μs。单片机晶振频率为 4MHz,单片机执行一条指 令耗费时间 1μs。 ● 单片机接收数据程序框图 PIC16C711单片机的 RB0引脚具备外部引脚跳变沿中断功能,向 RB0引脚送一个上 跳沿或下跳沿信号,则 INTCON寄存器的外部引脚跳变沿中断标志位 INTF被置 1。如果 总中断和外部引脚跳变沿中断都使能,并且此时单片机没有执行其他中断服务子程序,程 序进入 INT中断服务子程序。根据异步串行通信的特点,通信线路空闲时单片机接收的是

  13. 高电平,起始位到来时单片机接收到低电平,因此空闲位和起始位之间是一个下跳沿。单高电平,起始位到来时单片机接收到低电平,因此空闲位和起始位之间是一个下跳沿。单 片机接收到下跳沿即起始位后,马上进入中断服务子程序,准备接收一帧数据。因此在主 程序中设置由下跳沿引起外部引脚跳变沿中断。下面将主要分析接收子程序即中断服务子 程序。单片机接收数据程序框图如图8. 6所示。 进入中断服务子程序后,首先保护中断现场,然后检测起始位是否是“真的”。由于可能存在的各种干扰,PIC单片机有可能接收到的干扰信号正好是一个下跳沿,而实际上此时 根本没有数据到来,从而造成误接收数据。因此检测起始位的真实性是有必要的。采取的 方法是在52μs(起始位的中点)后,检测一次 RB0上的信号。程序框图中是延时47μs 后检测 RB0上的信号,原因是保护中断现场的几条指令要耗费几个μs。如果是低电平, 则起始位是“真的”,否则为干扰信号,单片机清 INTF标志位,然后退出中断服务子程序,回到主程序。若起始位是“真的”,则准备接收数据。设计规定数据位为 8位,故首先设置 接收计数器R_CNT内容为 8。然后将 STATUS寄存器中的 C位清零,并右移接收数据寄 存器RCV_R。C的内容即 0移入 RCV_R最高位,接下来接收数据位。为尽量保证数据的 准确性,应该在每位数据的中点检测该位数据。因此,检测第一位数据的时刻距离检测起 始位的时刻应该是一位数据所占的时间即 104μs,此后的每一位数据检测时刻之间也是 如此。此时又要用到延时程序。因为每两次检测时刻之间除了延时之外,指令 (C清零、 右移等指令)还要占用时间,这些指令占用 5~6μs,因此,为了尽量保证在每一位的中 心位置检测数据,延时时间定为 98μs。如果检测得到的数据位为1,则置 RCV_R最高位为 1。如果数据位为 0,则不必改变最高位,因为 C为 0且已经移入 RCV_R的最高位。 然后,将接收计数器内容减 1。8位数据接收完毕后,清 INTF标志。最后,退出中断服务子程序。至此,8位数据接收全部存放于 RCV_R中。

  14. ● 单片机发送数据程序框图 用RB5引脚作为发送引脚,单片机发送数据程序框图如图8. 7所示。当有数据要从单片机发往PC机时,单片机调用发送子程序。在发送子程序中,首先设置发送计数器内容为 8,然后发送起始位,起始位应持续 104μs。因此要调用延时子程序,延时子程序执行完后,RB5上的信号并未立刻变成第一位数据的值,这是因为还要执行几条指令,如右移 TRS_R、置位等 RB5上的信号才会变化。假设延时 104μs,那么加上几条指令的执行时间,起始位就比 104μs宽了。因此,延时子程序少于 104μs,根据具体的程序定为 97μs。然后,右移发送数据寄存器 TRS_R,将其最低位即要发送的数据位移入 C中,再根据 C中的内容将RB5清零或置 1,然后将发送计数器内容减 1,并判断其是否为 0。若为 1,则说明未发送完毕,继续发送;否则,发送停止位。最后,退出发送子程序。

  15. 图 8.6 单片机接收数据程序框图 图 8.7 单片机发送数据程序框图

  16. 8.2 PIC的USART应用 8.2.1 PIC16F877非同步通信功能(USART接口) 通用同步/异步接收发送模块(USART)是两个串行通信接口之一,USART又称为SCI(Serial Communication Interface)。USART可以设置为全双工异步串行通信系统,这种方式可以与个人计算机PC或串行接口CRT等外围设备进行串行通信。也可以设置为半双工异步串行通信系统,与串行接口的A/D或D/A集成电路、串行EEPROM等器件连接。 USART是二线制串行通信接口,它可以被定义如下三种工作方式:全双工异步方式、半双工同步主控方式、半双工同步从动方式。为了把RC6和RC7分别设置成串行通信接口的发送/时钟(TX/CK)线和接收/数据(TX/DT)线,必须首先把SPEN位(TCSTAT的RD7)和方向寄存器TRISC的D7:D6置1。 USART功能模块含有两个8位可读/写的状态/控制寄存器,它们是发送状态/控制寄存器TXSTA和接收状态/控制寄存器。

  17. USART带有一个8位波特率发生器BRG(Baud Rato Generator),BRG支持 USART的同步和异步工作方式。用SPBRG寄存器控制一个独立的8位定时器的周期。 在异步方式下,发送状态/控制寄存器TXSTA的BRGH位(即D2)也被用来控制波特 率(在同步方式下忽略BRGH位)。 向波特率寄存器SPBRG写入一个新的初值时,都会使BRG定时器复位清零,由此 可以保证BRG不需要等到定时器溢出后就可以输出新的波特率。 对USART方式进行初始化的程序如下: BSF STATUS,RP0 ;将指针指向数据存储器的第1页 MOVLW 0x19 MOVWF SPBRG ;设置波特率为9600 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 CLRF RCSTA ;将接收控制和状态寄存器清零 BSF RCSTA,SPEN ;串口允许 CLRF PIR1 ;清除中断标志 BSF STATUS,RP0 ;将指针指向数据存储器的第1页 CLRF TXSTA ;将发送控制和状态寄存器清零 BSF TXSTA,BRGH ;设置为异步、高速波特率 BSF TXSTA,TXEN ;允许发送 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 BSF RCSTA,CREN ;允许接收 初始化完成后,即可发送或接收数据。在发送或接收数据时,通过查询发送/接收中 断标志位即可判断是否发送完一个数据/接收到一个数据。 送/接收中断标地不需要也不有用软件复位。

  18. 在异步串行发送的过程中,只要TXREG寄存器为空,中断标志TXIF就置位。因此,在异步串行发送的过程中,只要TXREG寄存器为空,中断标志TXIF就置位。因此, TXIF为1并不是发送完毕的标志,但仍可以用TXIF标志来判断。因此当TXREG为空时, 将数据送入后,数据会保留在TXREG寄存器中,直到前一个数据从发送移位寄存器中移 出,即前一个数据发送。 8.2.2 串行接口芯片8251A 8251的管脚和内部结构如图8. 8所示。 1.同CPU的连接信号 ● RESET:当这个引脚上出现一个6倍时钟宽的高电平信号时,芯片被复位,使芯片 处于空闲状态。这个空闲状态将一直保持到由编程确定了新状态才结束。在系统中 使用此芯片时,总是把复位端与系统的复位线相连,使它受到加电自动复位和人工 复位的控制。 ● CLK:是为芯片内有关电路工作提供时钟的输入端。这个时钟的频率与数据速率并 无直接关系,但是,为了电路工作可靠,在同步方式下最好使这个频率比数据速率 大30倍以 上。在异步方式下,大4.5倍。 ● 、 :是CPU对8251A中的寄存器读、写时的控制信号输入端。 ● C/ :是一个决定CPU对芯片读写内容的控制输入端。如果输入为高电平,CPU 对芯片就是写控制字或读状态字;反之,读写的内容就是数据。通常,将该端与地址 线的最低位相接。于是,8251A就占有两个端口地址,偶地址为数据口地址,而奇 地址为控制口地址。 ● :片选输入端。该引脚输入低电平时,芯片可以与CPU之间传输数据;反之, 芯片的8个数据引脚处于悬空状态。

  19. 图8.8 8251A 芯片引脚 ● D0~D7:双向8位数据线,同片内数据总线缓冲器相连,CPU通过D0~D7向8251A 写数据和控制字,以及读数据和状态字。 2.MODEM控制信号 8251A还提供了四个与MODEM相连的控制信号,信号的含义与RS232C标准相同。 ● (Data Terminal Ready):数据终端准备好(输出,低电平有效)。这是 一个通用的输出信号,可由命令字的位1置“1”,而变为有效,用以表示CPU准备就绪。

  20. ● (Data Terminal Ready):数据终端准备好(输出,低电平有效)。这是 一个通用的输出信号,可由命令字的位1置“1”,而变为有效,用以表示CPU准备就绪。 ● (Request To Send):请求发送(输出,低电平有效)。此信号用于通知 调制器,CPU已准备好发送。它可由命令字的位5置“1”而变为有效(低电平有效)。 ● (Clear To Send):清除发送信号(输入,低电平有效)。这是调制解凋器 或其它外设送到8251A中的调制解调器控制器的信号。当其有效时,表示允许USART 发送数据。 上述四个信号在使用时应按规定引脚连接。信号在传输过程中,由MODEM输入 后存放在8251A的状态字节中,芯片内对此并不作处理,只有当CPU读状态后才可能 给出响应。CTS也是从MODEM送来的信号,如果为低电平。且8251A中已经设置了 允许发送命令,芯片就可以向MODEM送出串行数据。如果在数据传送中,出现了某 个条件不满足 的情况,那么,在传输完当前的字节后,即行停止。和都是由CPU写命 令时给8251A设置的,为使两个引脚有效(低电平),对寄存器中这两位应写入“1”。 3.发送器有关信号 ● TxD:发送数据。发送缓冲器从数据总线上接收数据,转换成串行数据,并按要求 插入附加字符或附加位后,在时钟 的下降沿按位从TxD上发送出去。 ● xRDY:发送器准备好信号。如果该信号有效,就表示发送缓冲器已空,CPU可以向 芯片送入新的数据。这个信号的状态要受到命令字中TxEN位(允许发送)的控制。 如果 把TxRDY信号作为向CPU请求数据的中断信号,TxEN位就可以看作是中断控 制的屏蔽 位。在8251A的状态字中有一位TxRDY,CPU也可以用查询的方式判断 是否可以送数据。

  21. TxE:发送缓冲器空标志。不管发送时是处于等待还是发送状态,只要发送缓冲器 中没有再要发送的字符,这个标志就变高。当从CPU送入一个数据字符时,该位标 志就被复位。 这个标志可以用来表示一段数据传输的结束。如果是半双工工作, 这个标志可以用作从发到收的转换。同步工作时,如果临时出现TxE,就意味着数据 发送出现空缺,芯片会自动插补同步字符。 ● :输人控制发送器数据速率的时钟。每个数据的移位输出,是在TxC的下降 沿实现的。异步方式下, 的频率可以是数据速率的1、16或64倍。同步方式时, 的频率与数据速率相同。 4.接收器有关信号 ● RxD:接收数据。用来接收外设送来的串行数据,按规定检查有关字符或有关位后, 经串一并转换送入数据总线缓冲器,RxD在时钟上升沿采样输入。 ● RxRDY:接收器准备好标志。如果该位为高电乎,接收缓冲器中就已经有组装好了 的一个数据字符,可通知CPU将它取走。与TxRDY相似,RxRDY也可用作中断请 求信号,也可以通过读状态字了解接收器状态。一旦CPU读走这个数据字符,RxRDY 被复位。要是CPU没有及时取走数据,新接收数据将覆盖数据,使一个数据丢失, 出现溢出错误,并反映在状态字中。 ● :接收时钟输入端。当时钟处在上升沿时,才可能把数据取样输入。时钟速率 的规定与 相同。实际上, 和 往往连接在一起,用同一个时钟源。

  22. SYNDET/BRKDET:同步和间断检测。芯片在同步方式工作时,用作同步检测端; 异步时则用作间断检测输出。芯片可以由编程确定是内同步还是外同步。如果是内 同步,就由 芯片内电路搜索同步字符,一旦找到,就由该端输出一个高电平。 如果是外同步,当片外检测电路找到同步字符后,就可以从该引脚输入一个高电平 信号,使8251A正式开始接收。一旦开始正常接收数据,同步检测端恢复低电平输 出。 异步方式工作中,通常在线路上无数据时以高电平表示。在8251A中也可以由程序 控制,使无数据的间断时间内线路上呈现低电平,即发送一个字符长度的全“0”码。接收 端具有对这种间断码检测的能力,如果检测到间断码,将从该端输出一个高电平。为了 避免接收器对尚未正式开始工作的线路低电平误认为间断状态,8251A在复位后总是要 在检测到一次高电平输入后,才开始对间断状态的检测。 对于8251A它有三个字,一个方式指令字、命令指令字、状态字,其中方式指令字 和命令字都是要写入到控制口里的,而状态字是从控制口读出来的,如果读和写能够区 别,也就是状态字和指令字这两个可以区别,但指示字里是方式指示字还是命令指示字, 这个关系必须要注意,它们的关系应是在开机时、在复位时以及完成后,先给的字认为 是方式指示字。给完了方式指示字后再给的自动认为是命令指令字,就不会把后面给的 当作方式字进行保存,而当作命令控制操作。 8.2.3 USART应用通信编程实例 1.概述 要在PIC16F877与 PC机间进行数据交换,这里可应用USART来实现。在编写程序 时首先要设置好USART异步通讯模块工作模式及相关寄存器,PIC16F877的USART与 其他具有USART的 PIC单片机一样,可以被设置成为与 PC机进行全双工异步通讯,

  23. 它是利用PORTC口的RC6和RC7两个引脚作为通讯的2线制串行通讯接口。为了把它是利用PORTC口的RC6和RC7两个引脚作为通讯的2线制串行通讯接口。为了把 PORTC口的RC6和 RC7两个引脚分别设置成串行通讯接口的发送(TX)脚和接收(RX) 脚,必须要把USART的接收状态和控制寄存器 RCSTA 的 bit7(SPEN)位和TRISC寄 存器的bit7置“1”,把TRISC寄存器的bit6置“0”。为了使USART分别工作于接收或发送 状态,就必须设置相应的状态寄存器和控制寄存器。在设置接收器时,要注意接收脚对 接收信号的采样。接收脚 RX上的数据被采样3次,通过一个三中取二逻辑检测电路来判 断 RX脚上的电平是高还是低,以作为采样取值。另外,要使USART工作在异步通讯方 式,就必须要设置通讯的传送、接收速率即波特率,USART的波特率设置是通过控制独 立的一个8位波特率发生器BRG实现的。 在异步工作方式下,串行通讯接口USART采用标准的不归0(NRZ)格式(即1位 起始位、8位或9位数据位及1位停止位),最常用的数据格式是8位。PIC16F877片内 的8位波特率发生器BRG可以用来驱动振荡器的时钟,产生标准的波特率频率。 PIC16F877的 USART发送和接收顺序是从最低位(LSB)开始。USART发送器和接收 器在功能上是完全独立的,但是它们所用的数据格式和波特率必须是相同的。波特率发生 器可以根据发送状态和控制寄存器TXSTA的 bit2(BRGH)位设置产生2种不同的移位 速度:对系统时钟16分频和64分频的波特率时钟,即设置该位在异步通讯模式为1时表 示通讯为高速,为0时表示通讯为低速。要使USART工作于异步通讯模式,可通过对发 送状态和控制寄存器TXSTA的bit4(SYNC)位设置清“0”。 由上可知,PIC16F877的USART异步工作设置主要包括对以下部件的设置:波特率 发生器BRG、采样电路、异步发送器、异步接收器等。这里关于PIC16F877的USART 异步工作有两点需要说明:一是USART硬件不支持奇偶效验,但可以用软件实现(并可 作为第9位数据传输);二是在CPU处于休眠工作方式时,USART不能工作在异步通讯 方式。

  24. 2. USART波特率发生器BRG设置 在异步通讯方式下,波特率发生器BRG需要设置一个初值,以使BRG输出一个合适 的波特率。在BRG设置时,其工作在高速还是低速是由发送状态寄存器和控制寄存器 TXSTA的 bit2(BRCH)位进行设置的。在 PIC16F877内部时钟工作模式下,设置 BRG波特率寄存器 SPBRG在低速和高速初值的计算公式如下: BRGH=0(低速) 异步波特率=FOSC/ (64(X+1)) BRGH=1(高速) 波特率=FOSC/ (16(X+1)) 其中,X为SPBRG寄存器的值(0~255)。 实际应用中,上式用于高速方式(BRGH=1)下计算波特率可以减小误差。另外, 在向波特率寄存器SPBRG写入一个新值时会使BRG定时器复位(清零),由此就可保 证波特率发生器BRG不需要等到定时器溢出后就可输出新的波特率。 3. USART异步通讯的寄存器设置 实现USART异步通讯的寄存器主要有:发送状态寄存器和控制寄存器 TXSTA、接 收状态和控制寄存器RCSTA、波特率发生器存器SPBRG、发送数据寄存器 TXREG、接 收数据寄存器 RCREG、外围接口中断使能寄存器 PIE1 和外围接口标志寄存器 PIR1等。 ● 发送状态和控制寄存器(表8.2) 表8.2 发送状态和控制寄存器

  25. bit7 CSRC:异步方式未用。 bit6 TX9:发送数据长度选择位。1 =选择9位数据;0=选择8位数据。 bit5 TXEN:发送允许位。1=允许发送;0=关闭发送。 bit4 SYNC:USART同步/异步方式选择位。1 =选择同步方式;0=选择异步方式。 bit3 此位未用。 bit2BRGH:高速波特率使能位。1 =高速;0 =低速。 bit1 TRMT:发送移位寄存器(TSR)“空”标志位。1=TSR空;0=TSR满。 bit0 TX9D:发送数据的第9位。 ● 接收状态和控制寄存器(表8.3) 表8.3 接收状态和控制寄存器 bit7 SPEN:串行口使能位。1=允许串行口工作(把RC7和 RC6设置成串行口引脚; 0 =禁止止串行工作; bit6 RX9:接收数据长度选择位。1 =选择接收9位数据;0=选择接收8位数据。 bit5 SREN:单字节接收允许位。异步方式此位未用。 Bit4 CREN:连续接收选择位。1 =允许连续接收;0=禁止连续接收。

  26. bit3ADDEN:地址匹配检测使能位。1=允许地址匹配检测,允许中断并且当RSR 的D8被置1时读接收缓冲器数据;0=禁止地址匹配检测,接收所有字节,第9位被看作 奇偶效验位。 bit2 FERR:帧格式错标志位。1=帧格式错(读RCREG寄存器可对该位刷新并且 准备接收下一个有效位);0=无帧格式错。 bit1OERR:越位溢出错标志位。1=有溢出错,清CREN位可将此位清零;0=无溢出错。 bit0 RX9D:接收数据的第 9 位,可作奇偶效验位。 ● 外围接口中断使能寄存器(表8.4) 表8.4外围接口中断使能寄存器 bit5 RCIE:串行异步通讯接口接收中断使能位。1=允许USART接收中断; 0 =禁止US2ART接收中断。 bit4 TXIE:串行异步通讯接口发送中断使能位。1=允许USART发送中断; 0=禁止USART发送中断。 其余位在异步通讯中未用。

  27. ● 外围接口中断标志寄存器(表8.5) 表8.5 外围接口中断标志寄存器 bit5 RCIF:异步串行通讯(USART)接口接收中断标志位;1=USART接收缓冲区 满;0 = USART接收缓冲区空。 bit4 TXIF:异步串行通讯(USART)接口发送中断标志位;1= USART发送缓冲区 空;0= USART发送缓冲区满。 其余位在异步通讯中未用。 ● 其他寄存器波特率 发生器存器 SPBRG的设置可以参考USR2TA波特率发生器BRG的设置内容,在设 置该寄存器就是根据单片机工作时钟频率确定传输数据的波特率,只要将其初值写入 SPBRG寄存器即可。 发送数据寄存器 TXREG是将单片机需要发送的数据存放的寄存器,在单片机未发 送之前就必须要将备发送的数据装入该寄存器。接收数据寄存器RCREG是将单片机接收 到外界数据后存放数据的寄存器,在单片机确定接收的数据无误后,将其数据存放到该 寄存器中。

  28. 4.PIC16F877单片机与PC机实现电平转换 PC机的串行接口是符合 EIA RS- 232C规范的外部总线标准接口。RS- 232C 采用的是负逻辑,即逻辑”1”:- 5~- 15 V;逻辑”0”:+5~ +15 V。而CMOS电平为: 逻辑“1”:4.99 V,逻辑“0”:0.01 V;TTL电平的逻辑“1”和“0”则分别为2.4 V和0.4 V。 因此在用RS-232C总线进行串行通信时需外接电路实现电平转换。在发送端用驱动器将 TTL 或CMOS电平转换为RS- 232C电平,在接收端用接收器将 RS-232C电平再转换为 TTL 或 CMOS电平。这里选用了MAXIM公司的MAX232来作电平转换。MAX232属于 MAXIM公司的通用串行接收/发送驱动器芯片。其外围电路简单,只需外接4个0.1μF的 电容即可,其系统硬件电路如图8. 9所示。图中MAX232将PIC16F877的TX输出的TTL 电平信号转换为RS-232C电平,输入到 PC机,并将 PC机输出的 RS-232C 电平转换为 TTL 电平,输出到PIC16F877单片机的RX引脚。 5. PC机支持与 PIC16F877 进行数据交换的PC机可与PIC16F877可以编程实现,其实现功能如下:PC机和单 片机均可发送和接收数据,由 PC机决定是发送还是接收;程序设定当 PC机键盘输入发 送指令时,PC机分别显示PC机发送的数据和单片机会送的数据;当 PC机键盘输入接收 指令时,PC机将接收单片机发送过来的数据,并将其数据显示。在编程中,必须要注意 设置 PC机与PIC16F877单片机在进行数据交换时的数据传输格式相同。通常采用的通 讯协议如下:波特率为9 600 bps,8位数据位,1位停止位,无奇偶效验位。PC机发 送命令给单片机,键盘输入发送命令时,控制单片机接收数据,当PC机键盘输入接收命 令时,控制单片机发送数据给PC机。PC机与PIC16F877单片机进行数据交换的程序编 制流程如图8.10所示。

  29. 图8.9PIC16F877与PC接口原理图 源程序如下: 1)初始化设置部分 COUNTEQU 0X20 TEMPEQU0X21 J0EQU0X22

  30. ORG0 NOP STARTGOTOMAIN ORG0X05 MAIN BANKSEL TRISC MOVLWB’10000000’ MOVWF TRISC MOVLW0X30 ;将RAM单元初始化   MOVWF FSRBCF STATUS,RP0 MOVLW0X22 MOVWFCOUNT BCF PIR1,RCIF BSF PIR1,TXIF INTRAMMOVFCOUNT,0 MOVWF INDF INCFCOUNT,1 INCF FSR,1 BTFSS FSR,7 GOTO INTRAM 图8.10 数据交换程序流程框图

  31. BANKSEL TXSTA MOVLW0X19 MOVWF SPBRG ;波特率设置为9 600 bps MOVLW0X04 MOVWF TXSTA ;异步高速方式   BCF STATUS,RP0 MOVLW0X80 MOVWF RCSTA ;串行口使能   MOVLW0X30 MOVWF FSR BSF RCSTA,CREN ;接收允许   BSF STATUS,RP0 BSF TXSTA,TXEN ;发送允许   BCF STATUS,RP0 2)接收并返回数据部分 WAITBTFSSPIR1,RCIF GOTO WAIT ;接收PC机命令 MOVF RCREG,0 MOVWF TEMP

  32. MOVWF INDF INCF FSR DECFSZTEMP ;接收到的数据为1,则接收 GOTO TXW ;否则发送数据 MOVLW0X06 MOVWF TEMP WAIT1BTFSS PIR1,RCIF GOTO WAIT1 ;接收一个数据 MOVF RCREG,0 MOVWFCOUNT MOVWF TXREG LOOPTXBTFSSPIR1,TXIF ;将接收到的数据送回PC机 GOTOLOOPTX MOVFCOUNT,0 MOVWF INDF INCF FSR DECFSZTEMP GOTO WAIT1 GOTOOVER ;处理完毕

  33. TXWMOVLW0X09 ;向PC机发送9个数据 MOVWF TEMP MOVLWD’00’ MOVWFJ0 3) 发送数据部分 TXW0MOVF J0,0 MOVWF TXREG INCFJ0 ;单片机发送的数据为0~8和一位存储数据 TXW1BTFSS PIR1,TXIF GOTO TXW1 DECFSZTEMP GOTO TXW0 OVERBCF RCSTA,CREN ;通信任务完成,关接收和发送允许 要实现PIC单片机与PC机间的数据通讯,不仅是要连接硬件电路和对单片机进行 编程,同时还需要在PC上编写数据收发的程序。通常,对于单片机与PC机间的数据通 讯交换调试时,可以串口通讯调试工具,同时也可以自编调试程序。程序编写好后, 再与上述 PIC16F877一起进行操作,即可实现简易通讯数据交换。

  34. 这里特别需要注意的是:当 PC机与单片机系统通信时,单片机数据存储 区( RAM )内的数据是十六进制,在信号线上传输的是十六进制数的ASCII 码的二进制形式;而Windows系统下使用的是ANSI码,ANSI码仅在前126个 与ASCII码相同,即在 Windows下接收到的是十六进制数的ASCII码的字符串, 可先转换为ANSI码后再在Windows下还原为十六进制数。

  35. 8.3 USB接口设计 USB的全称是通用串行总线(Universal Serial Bus),最多可连接127台外 设,USB其最大的特点是支持热插拔和即插即用。当设备插入时,主机枚举此设备并加载所需的驱动程序,因此使用远比PCI和ISA总线方便。USB速度比平行并联总线(Parellel Bus,例如EPP、LPT)与串联总线(Serial Port,例如RS-232)等传统电脑用标准总线快上许多。原标准中USB 1.1 的最大传输带宽为 12Mbps,USB 2.0 的最大传输带宽为 480Mbps USB的设计为非对称式的,它由一个主机(host)控制器和若干通过hub设备以树形连接的设备组成。一个控制器下最多可以有5级hub,包括Hub在内,最多可以连接127个设备,而一台计算机可以同时有多个控制器。 和SPI-SCSI等标准不同,USB hub不需要终结器 USB可以连接的外设有鼠标、键盘、gamepad、游戏杆、扫描仪、数码相机、打印机、硬盘和网络部件。对数码相机这样的多媒体外设USB已经是缺省接口;由于大大简化了与计算机的连接,USB也逐步取代并口成为打印机的主流连接方式。2004年已经有超过1亿台USB设备;到2005年显示器和高清晰度数字视频外设是仅有的USB未能染指的外设类别,,因为他们需要更高的传输速率。

  36. 由于USB支持热插拔,即插即用的优点,所以USB接口已经成为计算机的标准接口。由于USB支持热插拔,即插即用的优点,所以USB接口已经成为计算机的标准接口。 USB目前有两个版本,USB1.1的最高数据传输率为12Mbps,USB2.0则提高到 480Mbps。二者的物理接口完全一致,数据传输率上的差别完全由PC的USB host 控制器以及USB设备决定。USB还可以通过连接线为设备提供最高5V,500mA的电力。 现标准中将UBS统一为USB2.0,分为: (1) High-speed,传输速率25Mbps~400Mbps(最大480Mbps) (2) Full-speed ,传输速率500Kbps~10Mbps(最大12Mbps) (3) Low-speed,传输速率10Kbps~100Kbps(最大1.5Mbps) USB 的优点: ● USB 具有真正的“即插即用”特性,用户可以很容易地对外设进行安装和拆卸, 主机可按外设的增删情况自动配置系统资源,同时用户可以在不关机的情况下 进行外设的更换,外设装置的驱动程序的安装删除将实现自动化。 ● USB 具有很强的连接能力。 ● 低成本。 ● 空间的节省。 ● USB与ETDM特性可以支持诸如 ISDN 等高速数字电话信息通路接口。 ● 连接电缆轻巧,电源体积缩小。 ● USB 一种开放性的不具专利版权的理想工业标准。 8.3.1 USB接口规范 目前USB支持3种数据信号速率,USB设备应该在其外壳或者有时是自身上正确 标明其使用的速率。USB-IF进行设备认证并为通过兼容测试并支付许可费用的设备

  37. 提供基本速率(低速和全速)和高速的特殊商标许可。提供基本速率(低速和全速)和高速的特殊商标许可。 1.5 Mbit/s (183 KByte/s)的低速速率,主要用于人机接口设备(Human Interface Devices ,HID)例如键盘、鼠标、游戏杆。 12 Mbit/s (1.4 MByte/s)的全速速率,在USB 2.0之前是曾经是最高速率, 后起的更高速率的高速接口应该兼容全速速率。多个全速设备间可以按照先到先得法 则划分带宽;使用多个等时设备时会超过带宽上限也并不罕见。所有的USB Hub支持 全速速率。 480 Mbit/s (57 MByte/s)的高速速率,并非所有的USB 2.0设备都是高速的。 高速设备插入全速hub时应该与全速兼容。而高速hub具有所谓Transaction Translator (事务翻译器)功能,能够隔离全速、低速设备与高速之间数据流,但是不会影响供电 和串联深度。 1.机械和电气标准 图8.11 标准USB接口

  38. 表8.6 标准USB电气特性表 标准USB接口如图8.11所示,其电气特性见表8.6。 USB信号使用分别标记为D+和D-的双绞线传输,各自使用半双工差分信号并协 同工作,以抵消长导线的电磁干扰。 USB的电缆有四根线,两根传送的是5V的电源,有一些直接和电源HUB相连的 设备可以直接利用它来供电。另外的两根是数据线,数据线是单工的,在整个的一个 系统中的数据速率是一定的,要么是高速,要么是低速,没有一个可以中间变速的设 备来实现数据码流的变速.在这一点上,USB和1394有明显的差别。 USB的总线可以在不使用的时候被挂起,这样一来就可以节约能源。 在有些时候的总线还有可能挡机(stall),比如说象数据传送的时候突然被打断, 这个时候通过host的重新配置可以实现总线的重新工作。

  39. 2.编码方式 • USB标准采用NRZI方式(翻转不归零制)对数据进行编码。翻转不归零制(non- • return to zero,inverted),电平保持时传送逻辑1,电平翻转时传送逻辑0。 • 软件架构 • 一个USB主机通过hub链可以连接多个设备。由于理论上一个物理设备可以承担多 • 种功能,例如路由器同时也可以是一个SD卡读卡器,USB的术语中设备(device)指 • 的是功能(functions)。集线器(hub)由于作用特殊,按照正式的观点并不认为是 • function。直接连接到主机的hub是根(root)hub。 • 4. 端点 • 设备/功能(和集线器)与管道(pipe)(即逻辑通道)联系在一起,管道把主机控 • 制器和被称为端点的逻辑实体连接起来。管道和比特流(例如UNIX的pipeline)有着 • 相同的含义,而在USB词汇中术语端点经常和管道混用,甚至在正式文档中。 • 端点(和各自的管道)在每个方向上按照0-15编号,因此一个设备/功能最多有32 • 个活动管道,16个进,16个出。两个方向的端点0总是留给总线管理,占用了32个端 • 点中的2个。在管道中,数据使用不同长度的包传递,端点可以传递的包长度上限一般 • 是长度的2^n字节,所以USB包经常包含的数据量依次有8、16、32、64、128、 • 256、512或者1024字节。 • 一个端点只能单向(进/出)传输数据,自然管道也是单向的。每个USB设备至少有 • 两个端点/管道:它们分别是进出方向的,编号为0,用于控制总线上的设备。按照各自 • 的传输类型,管道被分为4类:

  40. 控制传输一般用于短的、简单的对设备的命令和状态反馈,例如用于总线控制的0 号管道。 ● 等时传输——按照有保障的速度(可能但不必然是尽快地)传输,可能有数据丢失, 例如实时的音频、视频。 ● 中断传输——用于必须保证尽快反应的设备(有限延迟),例如鼠标、键盘。 ● 批量传输——使用余下的带宽大量地(但是没有对于延迟、连续性、带宽和速度的 保证)传输数据,例如普通的文件传输。 一旦设备(功能)通过总线的hub附加到主机控制器,主机控制器就给它分配一个 主机上唯一的7位地址。主机控制器通过投票分配流量,一般是通过轮询模式,因此没 有明确向主机控制器请求之前,设备不能传输数据。 为了访问端点,必须获得一个分层的配置。连接到主机的设备有且仅有一个设备描 述符(device descriptor),而设备描述符有若干配置描述符(configuration descriptors)。这些配置一般与状态相对应,例如活跃和节能模式。每个配置描述符 有若干接口描述符(interface setting),用于描述设备的一定方面,所以可以被用于 不同的用途:如一个相机可能拥有视频和音频两个接口。接口描述符有一个缺省接口设 置(default interface setting)和可能多个替代接口设置(alternate interface settings),它们都拥有如上所述的端点描述符。一个端点能够在多个接口和替代接口 设置之间复用。 5. USB接头 接头是由USB协会所指定,接头的设计一方面为了支持众多USB的基本需求,另一 方面也避免以往许多类似串行接头所出现的问题。接头设计的相当耐用。许多以往使用 的接头较脆弱,即使受力不大,有时针脚或零件也会折弯甚至断裂。而USB接头的金属

  41. 导电部份周围有塑料作为保护,而且整个连接部份被金属的保护套围住,因此USB接头导电部份周围有塑料作为保护,而且整个连接部份被金属的保护套围住,因此USB接头 不论插拔,都不容易受损。不可能把USB接口插错。这是防呆设计,方向相反的插头不 可能插到插座里,方向正反很容易感觉出来。接头能相对便宜地大量生产。 在USB网络中,接头被强制使用定向拓扑。USB不支持环形网络,因此不兼容的 USB设备之间接口也不兼容。不像其他通讯系统(如RJ-45电缆)不能使用转换插头, 防止环形USB网络产生。 适度的插拔力。USB电缆和小型USB设备能被插口卡住(不需要夹子、螺丝或者 其他接口那样的锁扣)。允许通过适当力量插拔,连接器要方便困难环境和残障人士 使用。 由于接头的构造,在将USB插头插入USB座时,插头外面的金属保护套会先接触 到USB座内对应的金属部份,之后插头内部的四个触点才会接触到USB座。金属保护 套会连接到系统的地点,提供路径使静电可以放电,避免因静电通过电子零件而造成 损坏。 8.3.2 USB数据传输模式 1.HCD 包含主机控制器和根HUB的硬件为程序员提供了由硬件实现定义的接口主机控制 器设备(HCD)。而实际上它在计算机是就是端口和内存映射。 1.0和1.1的标准有两个竞争的HCD实现。康柏的开放主机控制器接口 (OHCI) 和Intel的通用主机控制器接口(UHCI)。VIA威盛采纳了UHCI;其他主要的芯片 组多使用OHCI。主要区别是UHCI更加依赖软件驱动,因此对CPU要求更高,但是 自身的硬件会更廉价。它们的并存导致操作系统开发和硬件厂商都必须在两个方案上 开发和测试,从而导致费用上升。

  42. 因此 USB-IF在USB 2.0的设计阶段坚持只能有一个实现规范,这就是扩展主机控制器 • 接口 (EHCI)。因为EHCI只支持全速传输,所以EHCI控制器包括四个虚拟的全速或 • 者慢速控制器。这里同样是 Intel和Via使用虚拟UHCI,其他一般使用OHCI控制器。 • USB 封包格式 • USB 的封包格式和早期的internet封包格式非常相似,要了解USB连接原理就一定 • 要先了解封包格式。 • USB packet format OFFSET TYPE SIZE VALUE • 0 HeaderChksum 1 Checksum of the header by adding the header • bytes, excluding the header checksum. • 1 HeaderSize 1 Size of the header, including strings if applicable. • 2 Signature 2 Signature: 0x1234 • 4 VendorID 2 USB Vendor ID • 6 ProductID 2 USB Product ID • 8 ProductVersion 1 Product version • 9 FirmwareVersion 1 Firmware version • 10 UsbAttributes 1 USB attributes: • Bit 0: If set to 1, the header includes all three strings: language, • manufacture, and product strings; if set to 0, the header does not include • any strings. • Bit 2: If set to 1, the device can be self powered; if set to 0, it cannot • be self powered. • Bit 3: If set to 1, the device can be bus powered; if set to 0, it cannot • be bus powered.

  43. Bits 1 and 4 ... 7: Not used. 11 MaxPower 1 Maximum power the device needs in units of 2 mA. 12 Attribute 1 Device attributes: Bit 0: If set to 1, the CPU speed runs at 24 MHz; if set to 0, the CPU speed runs at 12 MHz. Bit 3: If set to 1, the device's EEPROM can support 400 MHz; if set to 0, it can not support 400 MHz. Bits 1, 2 and 4 ... 7: Not used. 13 WPageSize 1 Maximum I2C write page size 14 DataType 1 This value defines if the device is application EEPROM or device EEPROM. 0x01: Application EEPROM 0x02: Device EEPROM Other values are invalid. 15 RpageSize 1 Maximum I2C read page size. If the value is zero, the whole PayLoadSize is read in one I2C read setup. 16 PayLoadSize 2 Size of the application, if using EEPROM as an application EEPROM; otherwise the value is 0. 0xxx Language string 4 Language string in standard USB string format if applicable. 0xxx Manufacture string ... Manufacture string in standard USB string format if applicable.

  44. 0xxx Product string ... Product string in standard USB string format if • applicable. • 0xxx Application Code ... Application code if applicable. • 传输方式 • 在USB的数据传送的方式下,有四种的传输方式:控制(Control)、 • 同步(isochronous)、中断(interrupt)、大量(bulk)。如果、从硬件开始来设 • 计整个的系统,必须正确选择传送的方式,如果只是一个驱动程序的编写者,只需要 • 弄清楚USB是采用什么工作方式就行了。 • 通常所有的传送方式下的主动权都在PC端,也就是host端。 • 控制方式传送:控制传送是双向传送,数据量通常较小。USB系统软件用来主要 • 进行查询、配置和给USB设备发送通用的命令。控制传送方式可以包括8、16、32和 • 64字节的数据,这依赖于设备和传输速度。控制传输典型地用在主计算机和USB外设 • 之间的端点(Endpoint)0之间的传输,但是指定供应商的控制传输可能用到其它的 • 端点。 • 同步方式传送:同步传输提供了确定的带宽和间隔时间(latency)。它被用于时 • 间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传送率的即时应用中。 • 例如执行即时通话的网络电话应用时,使用同步传输模式是很好的选择。同步数据要求 • 确定的带宽值和确定的最大传送次数。对于同步传送来说,即时的数据传递比完美的精 • 度和数据的完整性更重要一些。 • 中断方式传送:中断方式传输主要用于定时查询设备是否有中断数据要传送。设备 • 的端点模式器的结构决定了它的查询频率,从1到255ms之间。这种传输方式典型的应

  45. 用在少量的分散的、不可预测数据的传输。键盘、操纵杆和鼠标就属于这一类型。中断用在少量的分散的、不可预测数据的传输。键盘、操纵杆和鼠标就属于这一类型。中断 • 方式传送是单向的并且对于host来说只有输入的方式。 • 大量传送:主要应用在数据大量传送传送和接受数据上,同时又没有带宽和间隔时 • 间要求的情况下,要求保证传输。打印机和扫描仪属于这种类型。这种类型的设备适合 • 于传输非常慢和大量被延迟的传输,可以等到所有其它类型的数据的传送完成之后再传 • 送和接收数据。USB将其有效的带宽分成各个不同的帧(frame),每帧通常是1ms时 • 间长。每个设备每桢只能传送一个同步的传送包。在完成了系统的配置信息和连接之后, • USB的host就会对不同的传送点和传送方式做一个统筹安排,用来适应整个的USB的 • 带宽。通常情况下,同步方式和中断方式的传送会占据整个带宽的90%,剩下的就安排 • 给控制方式传送数据。 • 8.3.3 USB接口电气特性 • 设备 • 依附在总线上的设备可以是需要特定的驱动程序的完全定制的设备,也可能属于 • 某个设备类别。这些类别定义了某种设备的行为和接口描述符,这样一个驱动程序可 • 能用于所有此种类别的设备。一般操作系统都为支持这些设备类别,为其提供通用驱 • 动程序。 • 设备分类由USB设计论坛设备工作组决定,并分配ID。 • 如果一个设备类型属于整个设备,该设备的描述府bDeviceClass的域保存类别ID; • 如果它这是设备的一个界面,其ID保存在界面描述府的;bInterfaceClass域。他们都 • 占用一个字节,所以最多有253种设备类别。(0x00和0xFF保留)。当bDeviceClass • 设为0x00,操作系统会检查每个接口的bInterfaceClass以确定其类别。

  46. 每种类别可选支持子类别(SubClass)和协议子定义(Protocol subdefinition) 这样可以用于主设备类型的不断修订。 常用设备类别和ID有: 0x00 保留值 0x01 USB音频设备, 像声卡这样的设备。 0x03 人机接口设备, 键盘鼠标等 0x06 静止图像捕捉设备,用在USB上的Picture Transfer Protocol。 0x07 USB打印设备, 打印机。 0x08 USB大容量存储设备 keydrive, 可移动硬盘, MMC卡、SD卡、CF卡读卡器, 数码相机, 数字音频播放器等。 这一类设备显示成一个文件系统。 0x09 USB hubs。 0x0A USB通信设备 (“CDC”) used for 调制解调器(包括软件调制解调器), 网卡 (交叉电缆),ISDN, 传真。

  47. 0x0E • USB视频设备,类似摄像头,电视卡的动态图像捕捉设备。 • 0xE0 • 无线控制器,如蓝牙dongles。 • 0xFF • 定制设备。 • 电源 • USB 接头提供一组5伏特的电压,可作为相连接USB设备的电源。实际上,设备 • 接收到的电源可能会低于5V,只略高于4V。USB规范要求在任何情形下,电压均不能 • 超过5.25V;在最坏情形下(经由USB供电HUB所连接的LOW POWER设备)电压均 • 不能低于4.375V,一般情形电压会接近5V。一个 USB 的根集线器最多只能提供 • 500 mA 的电流。如此的电流已足以驱动许多电子设备,不过连接在总线供电HUB的 • 所有设备,需要共享500mA 的电流额度。一个由总线供电的设备可以使用到它所连接 • 埠上允许输出的所有电源。总线供电的HUB可以将电源供给连接在 HUB 上的所有设备, • 不过 USB 的规范只允许总线供电的 HUB 下游串接一层总线供电的设备,因此,总线 • 供电的 HUB 下游不允许再串接另一个由总线供电的 HUB。许多 HUB 有外加电源, • 因此可以提供电源给下游的设备,不会消耗总线上的电源。若设备需要的电压超过5V, • 或是需要电流超过500mA,都需要使用外加电源。相对于之前其他沟通介面仅能传递 • 讯息资料,高电压USB插槽本身还能提供5V(伏特)的主动电压,及0.5A(安培)的 • 电流,因此对于一些小型设备而言,可以不必再外接电源供应装置,就能利用来自USB • 插槽的电力顺利运作。利用这特点,也有厂商开发出适当的排线,将USB拿来当作供电 • 插座般使用,例如作为移动电话的充电器,或是提供小型电灯的电力需要,反而与原本 • 用来连接电脑用的主要用途无关。

  48. USB的低层结构 • ● USB设备 • USB的设备可以接在PC上的任意的USB接口上。而使用HUB还可以扩展使更多 • 的USB设备连接到系统中,USB的HUB有一个上行的端口(到host),有多个的下 • 行端口(连接其它的设备),从而可以使整个的系统可以扩展的连接127个外设,其 • 中HUB也酸外设。对于USB系统来说,USB的host永远是PC边,所有的其他连接到 • host都称为设备,在设备与设备之间是无法实现直线通信的,只有通过host的管理与 • 调节才能够实现数据的互相传送。在系统中,通常会有一个根HUB,这个HUB一般有 • 两个下行的端口。 • 一个PC可以拥有一个或多个的USB host控制器。一般有两种类型的控制器: • UHCI(USB host控制器接口),OHCI(开放的host控制器接口)。Windows的 • USB类驱动程序对于每一种的控制器类型都有一种miniclass驱动程序来支持。 • ● 低层协议 • USB的物理协议规定了大多数的在总线上的数据格式,通常一个全速的数据桢可 • 以最多有的1500bytes,而对于低速的桢最多有187bytes。 • 帧通常是用来分配带宽给不同的数据传送方式。同时由于帧结构的规律性,帧的 • 这种特性也可以用来做同步信号来使用。一个最小的USB的数据块叫做包(packet), • 包包括同步信号,包标识(packet ID),CRC和传送的数据。Packet ID共有以下十种: • token OUT IN SOF SETUP • data DATA0 DATA1 • handshake ACK NAK STALL • special PRE

  49. ● Transactions(数据交换) 一个transaction是在host和设备(device)之间的不连续相互数据交换,通常 由host开始交换,交换的开始是由Token的包开始的,接下来是双方向上的数据包, 在数据包传送完之后,就会由设备(device)返回一个握手(handshake)包。USB 系统通过IN,OUT,和SETUP的包来指定USB地址和endpoint(最多是128个,0通 常被用来用做缺省的传送配置信息的),并且这些被指定的设备必须通过上面形式的包 来回应这种形式的指定。每个SETUP的包包含8个byte的数据,数据用来指示传送的数 据类型。对于DATA数据包来说,设置两种类型的数据包是为了能够在传送数据的时候 做到更加的精确。ACK handshake的包用来指示数据传送的正确性,而 STALL handshake则表示数据包在传送的过程中出了故障,并且请示host重新发数据 或者清除这次传送。PRE格式的包主要是用在在一个USB的系统中如果存在不同速率的 设备的时候,将不同于总线速度的设备中就会回应一个PRE的包从而会忽略该设备。 8.3.4 USB接口专用集成芯片及应用设计实例 1.USB应用开发概述 USB的应用主要是数据采集工作,随着USB应用的日益广泛,Intel、SGS-Tomson、 Cypress、Philips 等芯片厂商都推出了具备 USB通信接口的单片机。这些单片机处理 能力强,有的本身就具备多路A/D,构成系统的电路简单,调试方便,电磁兼容性好, 因此采用具备USB接口的单片机是构成USB数据采集系统较好的方案。USB接口开发 中有相当大的工作量是关于USB软件的开发,USB软件包括三方面的工作:固件 (firmware)设计,驱动程序设计和主机端应用程序的设计。

  50. 固件设计固件是运行在USB芯片上的程序,可采用汇编语言或C语言设计,其主要固件设计固件是运行在USB芯片上的程序,可采用汇编语言或C语言设计,其主要 功能是控制 USB芯片接收并处理 USB驱动程序的请求(如请求设备描述符、请求或设 置设备状态,请求或设置设备接口等USB2.0标准请求)、控制USB芯片接收应用程序 的控制指令、通过USB芯片存放数据并实时上传至PC等。 驱动程序设计在Windows平台下,USB驱动程序由3部分组成:USB设备驱动程序, USB总线驱动程序和USB主控制器驱动程序,它们必须遵循win32驱动程序模型(WDM) 其中,windows操作系统已经提供了处于驱动程序栈底的 USB总线驱动程序和USB主控 制器驱动程序。而USB设备驱动程序由设备开发者编写,通过向USB总线驱动程序发送包 含 URB(USBRequestBlock)的IRP(I/ 0 RequestPack-et),来实现USB外设之间 的信息交换。当主机应用程序要对USB设备进行I/ 0操作时,调用WindowsAPI 函数对 win32子系统进行win32 调用,由I/O管理器将此请求构造成一个合适的IRP,并把它传 递给USB设备驱动程序。USB设备驱动程序接受到这个IRP后,根据IRP中的包含的具体 操作代码,构造响应的URB并把它放到一个新IRP中,然后把此IRP传递到USB总线驱动 程序,USB总线驱动程序根据IRP中所包含的URB执行响应的操作, 并把操作结果通过 IRP返还给USB设备驱动程序。USB设备驱动程序接受到此IRP后,将操作结果通过IRP 返还I/ O管理器。最后,I/O管理器将此 IRP 中的操作结果返还给应用程序, 至此应用 程序对USB设备的一次I/O操作完成。 应用程序设计应用:程序工作于用户模式,用户模式可以访问文件,处理数据,人机 交互,不过必须借助设备驱动程序来访问硬件。在VC环境下开发的主机端的应用程序, 容易实现了设备的打开、关闭、固件下载、端口配置和文件传输等功能。

More Related