59
8 8 PIC PIC 第第第第第第第第 第第第第第第第第 本本本本本 本本本本本 PIC PIC 本本本本 本本本本本本 本本本本本本本本本本本本本本本本本本本本本本本本 统传 本本本本 本本本本本本 本本本本本本本本本本本本本本本本本本本本本本本本 统传 本本本 本本 本本本 本本 PIC PIC 本本本本本本本本本本本本本本本本本本本本本 本本本本本本本本本本本 本本本本本本本本本本本本本本本本本本本本本 本本本本本本本本本本本 PIC PIC 本本本 本本本 本本本本本本本本本本本本本本本 本本本本本本本本本本本本本本本本本本 本本本本本本本本本本本本本本本本本本本PIC PIC 本本本本本本本本本本本本本本本本本本PIC PIC USART USART 本本本 本本本 PIC PIC US US B B 本本本本本本本本本本PIC PIC 本本本 本本本本本本 本本本本本本本本本本本本本本本本本本本本本本 本本本本本本本本 (), 本本本 本本本本本本 本本本本本本本本本本本本本本本本本本本本本本 本本本本本本本本 (), 本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本 本本本本本本 本本本本本 本本本 本本本本 本本本本本本 本本本本本本 本本本本本 本本本 本本本本 8 8 16 16 本本本本本 本本本本本 本本本 本本本本本 本本本本本 本本本本本本本本本本本本本本 本本本本本本本本本本本 本 本本本本 )。;,, 本本本 本本本本本 本本本本本 本本本本本本本本本本本本本本 本本本本本本本本本本本 本 本本本本 )。;,, 本本本本本本 本本本本本本本本 本本本本本本本本本本本本本本本 。,。 本本本本本本 本本本本本本本本 本本本本本本本本本本本本本本本 。,。 40 40 本本本 本本本 PIC16F87X PIC16F87X 本本 本本 本本本本本本 本本本本本本 PSP PSP 本本本本本 本本本本本 RD RD RE RE 本本本 本本本 11 11 本本本本本本8 8 本本本本本本本本3 3 本本本本 ), 本本本本 ), 本本本本本本本本 本本本本本 本本本本本本本本 ()。 本本本本本本本本 本本本本本 本本本本本本本本 ()。 本本本本本本本 本本本本本本本本本本本本本本 本本本本 本本本本本本 本本本本本本 本本本本 一。, 本本本本本本本 本本本本本本本本本本本本本本 本本本本 本本本本本本 本本本本本本 本本本本 一。, n n 本本本本本本本本本本 本本本本本本本本本本 T T 本本本本本 本本本本本本本本本本 本本本本本 本本本本本本本本本本 nT nT 本本本本本本本本本本本 本本本本本本本本本本本 nT nT 本本 本本

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 第 8 章  PIC 与计算机接口设计

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

Page 2: 第 8 章  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总线等,都是用来实现与串行通信功能相关的技术和规范。

Page 3: 第 8 章  PIC 与计算机接口设计

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

Page 4: 第 8 章  PIC 与计算机接口设计

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

Page 5: 第 8 章  PIC 与计算机接口设计

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 。

Page 6: 第 8 章  PIC 与计算机接口设计

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 串口引脚定义表。

Page 7: 第 8 章  PIC 与计算机接口设计

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

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

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 实物及芯片引脚排列

Page 9: 第 8 章  PIC 与计算机接口设计

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 机与单片机串行通信接口电路

Page 10: 第 8 章  PIC 与计算机接口设计

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

图 8. 4 采用分立元件的简易 RS-232C 通信接口电路

Page 11: 第 8 章  PIC 与计算机接口设计

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 上出现低电平,这会误认为通信帧起始位到来而引起工作不正常。

Page 12: 第 8 章  PIC 与计算机接口设计

为了避免这种情况发生,可以人工的让 A 端电位高于 B 端电位,使 R 引脚在 RS485 总线不发送期间呈现唯一的高电平,单片机不会被误中断而接收到乱字符。通过在 A 、 B 接上拉、下拉电阻 R3 、 R2 可解决这个问题。

图 8. 5   PIC16C711 与 PC 机之间的接口电路2 .单片机通信程序框图 PIC 单片机与 PC 机之间的通信方式为半双工方式。一帧数据包括一位起始位、 8 位数据位、一位停止位和无奇偶校验位。设发送和接收数据的波特率为 9600 b/s ,则每一位占用的时间 td 为 19600s ,约为 104μs 。单片机晶振频率为 4MHz,单片机执行一条指令耗费时间 1μs 。 ● 单片机接收数据程序框图 PIC16C711 单片机的 RB0 引脚具备外部引脚跳变沿中断功能,向 RB0 引脚送一个上跳沿或下跳沿信号,则 INTCON寄存器的外部引脚跳变沿中断标志位 INTF 被置 1 。如果总中断和外部引脚跳变沿中断都使能,并且此时单片机没有执行其他中断服务子程序,程序进入 INT 中断服务子程序。根据异步串行通信的特点,通信线路空闲时单片机接收的是

Page 13: 第 8 章  PIC 与计算机接口设计

高电平,起始位到来时单片机接收到低电平,因此空闲位和起始位之间是一个下跳沿。单片机接收到下跳沿即起始位后,马上进入中断服务子程序,准备接收一帧数据。因此在主程序中设置由下跳沿引起外部引脚跳变沿中断。下面将主要分析接收子程序即中断服务子程序。单片机接收数据程序框图如图 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 中。

Page 14: 第 8 章  PIC 与计算机接口设计

● 单片机发送数据程序框图 用 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 ,则说明未发送完毕,继续发送 ; 否则,发送停止位。最后,退出发送子程序。

Page 15: 第 8 章  PIC 与计算机接口设计

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

Page 16: 第 8 章  PIC 与计算机接口设计

8.2 PIC8.2 PIC 的的 USARTUSART 应用应用 8.2.1 PIC16F8778.2.1 PIC16F877 非同步通信功能(非同步通信功能( USARTUSART 接口)接口) 通用同步通用同步 // 异步接收发送模块(异步接收发送模块( USARTUSART )是两个串行通信接口之一,)是两个串行通信接口之一,USARTUSART 又称为又称为 SCISCI (( Serial Communication InterfaceSerial Communication Interface )。)。 USARTUSART 可以可以设置为全双工异步串行通信系统,这种方式可以与个人计算机设置为全双工异步串行通信系统,这种方式可以与个人计算机 PCPC 或串行或串行接口接口 CRTCRT 等外围设备进行串行通信。也可以设置为半双工异步串行通信系等外围设备进行串行通信。也可以设置为半双工异步串行通信系统,与串行接口的统,与串行接口的 A/DA/D 或或 D/AD/A 集成电路、串行集成电路、串行 EEPROMEEPROM 等器件连接。等器件连接。 USARTUSART 是二线制串行通信接口,它可以被定义如下三种工作方式:全双是二线制串行通信接口,它可以被定义如下三种工作方式:全双工异步方式、半双工同步主控方式、半双工同步从动方式。为了把工异步方式、半双工同步主控方式、半双工同步从动方式。为了把 RC6RC6 和和RC7RC7 分别设置成串行通信接口的发送分别设置成串行通信接口的发送 // 时钟(时钟( TX/CKTX/CK )线和接收)线和接收 // 数据数据(( TX/DTTX/DT )线,必须首先把)线,必须首先把 SPENSPEN 位(位( TCSTATTCSTAT 的的 RD7RD7 )和方向寄存器)和方向寄存器TRISCTRISC 的的 D7D7 :: D6D6 置置 11 。。 USARTUSART 功能模块含有两个功能模块含有两个 88 位可读位可读 // 写的状态写的状态 // 控制寄存器,它们是发控制寄存器,它们是发送状态送状态 // 控制寄存器控制寄存器 TXSTATXSTA 和接收状态和接收状态 // 控制寄存器。控制寄存器。

Page 17: 第 8 章  PIC 与计算机接口设计

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 ;允许接收 初始化完成后,即可发送或接收数据。在发送或接收数据时,通过查询发送 / 接收中断标志位即可判断是否发送完一个数据 / 接收到一个数据。 送 / 接收中断标地不需要也不有用软件复位。

Page 18: 第 8 章  PIC 与计算机接口设计

在异步串行发送的过程中,只要 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 个数据引脚处于悬空状态。

WR RD

D

CS

Page 19: 第 8 章  PIC 与计算机接口设计

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

Page 20: 第 8 章  PIC 与计算机接口设计

● ( 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也可以用查询的方式判断 是否可以送数据。

DSR

RTS

CTS

Page 21: 第 8 章  PIC 与计算机接口设计

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

TxCTxC

TxC

RxCTxC TxC RxC

Page 22: 第 8 章  PIC 与计算机接口设计

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

Page 23: 第 8 章  PIC 与计算机接口设计

它是利用 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 不能工作在异步通讯方式。

Page 24: 第 8 章  PIC 与计算机接口设计

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 发送状态和控制寄存器

Page 25: 第 8 章  PIC 与计算机接口设计

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=禁止连续接收。

Page 26: 第 8 章  PIC 与计算机接口设计

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 发送中断。 其余位在异步通讯中未用。

Page 27: 第 8 章  PIC 与计算机接口设计

● 外围接口中断标志寄存器(表 8.5 )表 8.5 外围接口中断标志寄存器

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

Page 28: 第 8 章  PIC 与计算机接口设计

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 所示。

Page 29: 第 8 章  PIC 与计算机接口设计

图 8.9   PIC16F877 与 PC 接口原理图源程序如下:1 )初始化设置部分COUNT   EQU   0X20TEMP   EQU   0X21J0   EQU   0X22  

Page 30: 第 8 章  PIC 与计算机接口设计

ORG0  NOPSTART   GOTO  MAIN  ORG0X05MAIN  BANKSEL TRISC   MOVLWB’10000000’ MOVWF TRISC   MOVLW0X30 ;将 RAM 单元初始化  MOVWF FSR    BCF STATUS , RP0MOVLW0X22   MOVWFCOUNTBCF PIR1 , RCIF   BSF PIR1 , TXIFINTRAMMOVFCOUNT , 0   MOVWF INDF   INCFCOUNT , 1   INCF FSR , 1  BTFSS FSR , 7   GOTO INTRAM      图 8.10 数据交换程序流程框图

Page 31: 第 8 章  PIC 与计算机接口设计

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

Page 32: 第 8 章  PIC 与计算机接口设计

MOVWF INDFINCF FSRDECFSZTEMP ;接收到的数据为 1 ,则接收GOTO TXW ; 否则发送数据MOVLW0X06MOVWF TEMPWAIT1BTFSS PIR1 , RCIFGOTO WAIT1 ;接收一个数据MOVF RCREG, 0MOVWFCOUNTMOVWF TXREGLOOPTXBTFSSPIR1 , TXIF ;将接收到的数据送回 PC 机GOTO  LOOPTXMOVF   COUNT , 0MOVWF INDFINCF FSRDECFSZTEMPGOTO WAIT1GOTOOVER ;处理完毕

Page 33: 第 8 章  PIC 与计算机接口设计

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

Page 34: 第 8 章  PIC 与计算机接口设计

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

Page 35: 第 8 章  PIC 与计算机接口设计

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

Page 36: 第 8 章  PIC 与计算机接口设计

由于 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 进行设备认证并为通过兼容测试并支付许可费用的设备

Page 37: 第 8 章  PIC 与计算机接口设计

提供基本速率(低速和全速)和高速的特殊商标许可。 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 接口

Page 38: 第 8 章  PIC 与计算机接口设计

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

表 8.6 标准 USB 电气特性表

Page 39: 第 8 章  PIC 与计算机接口设计

2 .编码方式 USB 标准采用 NRZI 方式(翻转不归零制)对数据进行编码。翻转不归零制( non-return to zero , inverted ),电平保持时传送逻辑 1 ,电平翻转时传送逻辑 0 。3. 软件架构 一个 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 类:

Page 40: 第 8 章  PIC 与计算机接口设计

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

Page 41: 第 8 章  PIC 与计算机接口设计

导电部份周围有塑料作为保护,而且整个连接部份被金属的保护套围住,因此 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 要求更高,但是自身的硬件会更廉价。它们的并存导致操作系统开发和硬件厂商都必须在两个方案上开发和测试,从而导致费用上升。

Page 42: 第 8 章  PIC 与计算机接口设计

因此 USB-IF 在 USB 2.0 的设计阶段坚持只能有一个实现规范,这就是扩展主机控制器接口 ( EHCI )。因为 EHCI 只支持全速传输,所以 EHCI 控制器包括四个虚拟的全速或者慢速控制器。这里同样是 Intel 和 Via 使用虚拟 UHCI ,其他一般使用 OHCI 控制器。2. 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.

Page 43: 第 8 章  PIC 与计算机接口设计

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.

Page 44: 第 8 章  PIC 与计算机接口设计

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

Page 45: 第 8 章  PIC 与计算机接口设计

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

Page 46: 第 8 章  PIC 与计算机接口设计

每种类别可选支持子类别( 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 , 传真。

Page 47: 第 8 章  PIC 与计算机接口设计

0x0E USB视频设备,类似摄像头,电视卡的动态图像捕捉设备。 0xE0 无线控制器,如蓝牙 dongles 。 0xFF 定制设备。 2. 电源 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拿来当作供电插座般使用,例如作为移动电话的充电器,或是提供小型电灯的电力需要,反而与原本用来连接电脑用的主要用途无关。

Page 48: 第 8 章  PIC 与计算机接口设计

3. 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

Page 49: 第 8 章  PIC 与计算机接口设计

● 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 )设计,驱动程序设计和主机端应用程序的设计。

Page 50: 第 8 章  PIC 与计算机接口设计

固件设计固件是运行在 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环境下开发的主机端的应用程序, 容易实现了设备的打开、关闭、固件下载、端口配置和文件传输等功能。

Page 51: 第 8 章  PIC 与计算机接口设计

2 . USB 集成芯片 随着 USB 应用的日益广泛, Intel 、 Motorola 、 Cypress 、 Microchip 、 Philips 等芯片厂商相继推出了品种繁多的 USB 芯片,芯片种类繁多,功能各异。具有 USB 接口的微控制器有 Intel 的 8X930AX 系列、 CYPRESS 的 EZ-USB 系列、 Motorola 的 JB2/3/4系列、 Microchip 的 PIC16C745/746 、 ATMAL的 AT43USB321 、 SIEMENS 的 C541U系列等。 USB 接口芯片有 PHILIPS 的 PDIUSBD11 ( I2C 接口)、 PDIUSBP11 、PDIUSBD12 (并行接口)、 National Semiconductor 的 USBN9602/03/04 、NetChip 的 NET2888/90 、 OKI 的 MSM60851 等,国内有达泰电子的 USB 控制编程模块 USB20C 、 USB20D 、 USB118 ,南京沁恒的 CH372/375等。3 .设计方案 目前有 2 种方案:● 采用 USB 总线接口控制芯片,芯片内含有单片机核,通过对单片机核的执行程序进行设计,进行固件设计,主要初始化各硬件单元,重新配置设备及其他控制。如 Cypress 公司推出的 EZ-USB 系列 USB 总线接口控制芯片,降低了 USB 开发的技术门槛和开发成本,大大加快了产品的研发周期,使开发人员无须过多了解 USB 的技术细节,就可以迅速开发出高效的 USB 产品。● 采用普通单片机加上专用 USB 通信芯片,目前可以选择 51 系列以及 PIC 单片机。如 PDIUSBD12 是由 Philips 公司生产的一块具有集成 SIE 、 FIFO 存储器、收发器和电压调整器的高性能 USB 接口芯片。它遵循 USB1.1 规范,可与任何外部微控制器 / 微处理器实现高速并行接口。芯片中的集成 SIE 用于实现 USB 协议层的完整功能,包括:同步方式识别、并 / 串转换、比特填充 / 解填充、 CRC 检验 / 生成、 PID 确认 / 生成、地址识别和握手信号的鉴定 / 生成等。

Page 52: 第 8 章  PIC 与计算机接口设计

4 . PDIUSBD12 的应用设计● PDIUSBD12 芯片的控制字 D12 的控制字分为初始化命令、数据流命令和通用命令三种基本类型。在 USB 设备列举过程中使用初始化命令,这些命令用来启动设备、设置地址、端点和工作模式。数据流命令用于管理 USB 和单片机之间的数据流。很多数据流是通过一个发给单片机的中断请求开始的。控制器使用数据流命令来存取数据,确认在 FIFO中的数据是否有效。通用命令主要在数据传输过程中使用,包括恢复和读取当前帧号。 ● PDIUSBD12 与单片机的连接 以 PDIUSBD12 和单片机之间的连接如图 8.12 所示, ALE 接到单片机的 ALE 上,使用地址总线复用方式。 A0 通过电阻接 VCC 。 VCC 接 +5V , VOUT3.3 通过电容接地,同时脚 20RESET_N 和脚 18DMACK_N接高电平, GND 接地。 8 根数据线接至数据总线。脚 11CS_N 端接至控制器或译码器的相应端, PDIUS-BD12 可以通过 CS_N 端,映射为控制器的任何地址。脚 14 中断接至控制器的中断线,并用电阻拉高。 XTAL1 和 XTAL2 接 6MHZ晶振, EOT_N拉高, D- 、 D+ 分别接到 USB 总线的 D- 、 D+上。在实际应用中,脚 21GL_N可接 LED显示设备状态。

图 8.12 单片机与 PDIUSBD12 的连接图

Page 53: 第 8 章  PIC 与计算机接口设计

● USB 设备固件的设计 固件的设计要求包括 USB 设备的具体通信步骤以及单片机的指令系统。 1 )固件介绍 PDIUSBD12是一种高速并行总线的 USB 接口设备,支持本地 DMA 传输。固件设计的目标是使 D12 在 USB 上能达到最快的传输率。外围设备如打印机等使用 D12 传送大量的数据。这些设备中的 CPU忙于处理许多任务象设备控制,数据和图象处理。 D12 的固件设计成完全的中断驱动模式。当 CPU 在处理前台任务时, USB 传输在后台被处理。这保证了最好的传输率和较好的软件结构,简化了编程和调试。在后台中断服务程序和前台主程序之间的数据交换是通过标志和数据缓冲区来实现的。例如, D12 主要的大量输出端点用一个圆形的数据缓冲区。当 D12 从 USB 接收到数据封包,就向 CPU 产生一个中断请求, CPU 会马上执行中断服务程序。在中断服务程序内部,固件把数据封包从 D12 的内部缓冲区送到圆形缓冲区,然后清除 PDIUSBD12 的内部缓冲区使它能接收下一个新的数据包。 CPU 能继续执行当前前台的任务直到完成。然后它返回到主循环,检查圆形缓冲区是否有新的数据,开始另外一个前台任务。使用这种结构, 主函数不关心数据源是来自 USB 设备,串行口还是并行口。主函数只检查圆形缓冲区是否有新数据需要处理。因此,主函数将目标定为数据处理,而中断服务程序做的工作是以可能的最快速度传送数据。类似地,控制端点在数据封包处理上使用了同样的概念。中断服务程序在数据缓冲区里接收和存储控制传输内容并设置相应的标志寄存器。主函数将发送请求到协议处理程序。一旦所有的标准设备,类,和用户请求在协议处理程序处理了,中断服务程序就能保持它的效率。

Page 54: 第 8 章  PIC 与计算机接口设计

2 )固件结构和任务 固件结构主要由下面几部分组成: 主程序:发送 USB 设备请求,读测试键,控制发光二极管,处理 USB 总线事务,标准请求、用户请求、中断服务程序等。 硬件层:这是固件中最低的层,它完成向 PDIUSBD12 的硬件通道 .当固件转向其他的 CPU 平台,这部分需要修改或增加内容。 PDIUSBD12命令接口:为进一步简化用 PDIUSBD12 编程,固件定义了一系列命令接口,它们压缩了使用 PDIUSBD12 的所有功能。 中断服务程序:这部分代码处理由 PDIUSBD12 产生的中断。它接收从 PDIUSBD12 内部的 FIFO区到 CPU 存储器的数据,并且建立合适的标志以通知主程序处理。 固件任务:在编写固件程序的过程中, PDIUSBD12 作为接口芯片硬件做了大量的工作,其中包括: a. 检测新的进入事务 ; 翻译从 USB 总线上获得的信息; b. 检测事务的目的地址,以决定是否响应; c. 确定事务的类型; d. 从 USB 总线上接收数据到 FIFO ; e. 从 FIFO 中发送数据到 USB 总线上; f. 计算校验位,检测并报告结果。但还有相当一部分的工作由固件程序来完成。这部分任务包括: a.初始化 PDIUSBD12 并处理 PDIUSBD12 的中断; b.响应各种请求,至少要响应标准的 11 种请求; c. 选择适当的数据写入 PDIUSBD12 的 FIFO ; d. 从 PDIUSBD12 的 FIFO中读取数据。 3 ) PDIUSBD12 的初始化 与一般的接口芯片一样, PDIUSBD12 必须先初始化以后再使用,初始化的步骤

Page 55: 第 8 章  PIC 与计算机接口设计

如下: a. 用 SetAddress/Enable命令使能芯片功能,地址应设为 0 ; b. 用 Set Endpoint Enable 命令使能芯片上除端点 0 、 1 外的所有端点; c. 用 Set Mode 命令断开连接, 延时 1-2s ;用 Set Mode 命令连接; d. 用命令 Read Interrupt Register清空中断寄存器 ; 初始化完后, D12 就可以接收 USB 总线上的信息了。之后,主机通过端点 0 、 1来读取设备信息、配置设备、设置设备地址,完成设备列举。 4 ) USB 设备的列举 当有一个 USB 设备连接到主机上时,主机的 USB 总线驱动、根集线器驱动获得设备连接的通知,开始列举设备。在主机一端,列举设备的过程是向设备发出一系列的标准请求。在设备一端,则需要响应主机发出的请求。其顺序如下: a响应获取设备描述符的请求。务必保证设备描述符的正确发送; b.响应设置地址的请求,设备进入编址态;c. 连续三次响应获取设备描述符请求; d.响应获取配置描述符的的请求,务必保证配置描述符的正确发送; e. 发送全部的配置描述符,同时发送所有的接口描述符、端点描述符 ;如果以上步骤都正确, 则主机会提示找到新设备,安装驱动程序。否则,提示找到未知设备,设备不可用。5) USB 设备固件框架的实现 以上分析可以知道编写 USB 设备的固件实质上是处理各种主机提出的请求。其中,标准的 11 个请求是必须实现的,如果要求设备有其它的功能还必须加入自定义的请求。按照 USB2.0 中的定义,称这些固件程序为 USB 设备的框架。4. 主程序的结构 一旦加电,单片机就要初始化所有的端口、存储器、定时器和中断服务子程序。之后, MCU 需要重新连接 USB 。这个程序很重要因为它保证了在 MCU 未准备好服务

Page 56: 第 8 章  PIC 与计算机接口设计

D12 之前, D12 不会动作。在主循环程序里面, MCU 会询问键盘上的任何动作。如果任何一个具体的键被按下,处理键的命令就会执行处理程序,之后返回主程序。这个程序仅是用来调试用。 1ms 定时是用来启动检查被按下键的子程序。当询问到达检查 Setup 包时,它需要先确定 setup 标志是否建立。如果 setup 标志已经确立,它将发送设备请求到协议层进行处理。图 8.12 的流程图显示了主程序在前台执行的情况。5. 中断服务程序的实现 PDIUSBD12 固件是完全中断驱动的,因此中断服务程序是整个固件编写过程中非常重要的一环。在进入中断服务程序后首先要发用命令 Read Interrupt Register(控制字为 F4H)读取中断寄存器,根据中断寄存器的内容判断中断源,然后跳转到不同的服务程序中去处理中断。 中断服务程序( ISR )与主程序通信是通过事件标志“ EPPFLAG” 和数据缓冲区“CONTROL-XFER” 。 主程序和中断服务程序( ISR )之间任务分配是, ISR 从 D12 收集数据,主程序将处理这些数据。 ISR 只在它收集了足够的数据才通知主程序准备处理,这样会减少不必要的主程序服务时间,也简化了主程序。 总线重置和空闲在 ISR里面不需要特殊的处理。 ISR 要么设置总线重置标志,要么在 EPPFLAG里暂停这一位并退出。 控制型传输总是以 setup阶段开始的,接着是数据阶段。然后以状态阶段结束。

Page 57: 第 8 章  PIC 与计算机接口设计

下面以处理 Control OUT 和 Control IN这两个最复杂最重要的中断子程序为例,说明编写中断服务程序的一些问题。 ControlOUT 主要是主机用来传递控制请求的,也可用于传输数据,进入服务程序后首先要发送控制字 Read Last Transac-tion Status ( 40H)给 PDIUSBD12,读取管道状态,根据读取的状态判断是因为有数据包还是有 SETUP 包的到来而中断。当 SET-UP 包被 USB 设备的 D12 接收后,设备将会向MCU 产生中断。微控制器将通过读取 D12 中断寄存器的内容判断封包是送到 Control 端点还是 Genric 端点而进行处理。如果封包是送到 Control 端点,MCU 将会进一步通过读 D12 的“ Read Last Trans-action Status Register”判断数据是不是 SETUP 封包。对于获取描述符设备请求,第一个封包必须是 SETUP封包。 之后, MCU 需要读出 SETUP 封包的内容通过选择 ControlOut 端点来判断这个端点是满的还是空的。如果控制端点是满的, MCU 就从缓冲区中读出它的内容并将它存在存储器里。然后,它将从存储器里去验证主机设备请求是否合法。如果是合法请求, MCU 必须送 “ Acknowledge Setup command”到 ControlOut 端点使能接收下一个封包。下一步, MCU 需要确定控制传输是控制读还是控制写。这可以通过从 SETUP 封包里读 bm-RequestType 的 8 个字节来完成。控制传输是控制读,设备需要在下一个数据时相回送数据包给主机。 MCU 需要建立一个标志,表明 USB 设备现在正处于传送模式。应主机的要求准备送数据。 Control IN 主要是用来向主机传送数据的,进入服务子程序后,首先要通过读 Read Last Transaction Status ( 40H)来清除 Control-In interrupt Bit ,在确认 D12 是处于传送模式下后, MCU 将数据包送往主机。但是,由于 D12 只有 16 字节的 FI-FO ,所以 MCU 必须控制好传送的总量, 如果要求的长度大于 16 字节的话。MCU 必须检查当前和剩下的要送往主机的数据,如果剩下的字节大于 16 字节的话,

Page 58: 第 8 章  PIC 与计算机接口设计

MCU 将先送头 16 字节。在下一个 Control-IN令牌包到来的时候, MCU 将先判断剩下的字节是否为 0 ,如果是, MCU 将发一个空包给主机,通知它数据已经传送完毕。

图 8.12 主程序流程

Page 59: 第 8 章  PIC 与计算机接口设计

图 8.13 中断服务程序流程