完整版AT89C51单片机USB接口驱动和应用程序的开发毕业设计.docx
《完整版AT89C51单片机USB接口驱动和应用程序的开发毕业设计.docx》由会员分享,可在线阅读,更多相关《完整版AT89C51单片机USB接口驱动和应用程序的开发毕业设计.docx(50页珍藏版)》请在冰豆网上搜索。
![完整版AT89C51单片机USB接口驱动和应用程序的开发毕业设计.docx](https://file1.bdocx.com/fileroot1/2023-5/26/19161343-b47d-46d2-9c00-acb41720b4a6/19161343-b47d-46d2-9c00-acb41720b4a61.gif)
完整版AT89C51单片机USB接口驱动和应用程序的开发毕业设计
北方民族大学
学士学位论文
论文题目:
AT89C51单片机USB接口驱动和应用程序的开发
院(部)名称:
电信学院
学生姓名:
杨闯
指导教师周春艳
论文提交时间:
2010年5月24日
论文答辩时间:
2010年5月29日
学位授予时间:
北方民族大学教务摘要
通用串行总线USB是一种新兴的并逐渐取代其他接口标准的数据通信标准。
USB,由于速度快,使用方便灵活,易于扩展,支持即插即用,成本低廉等一系列优点,得到了广泛的应用。
本论文以基于USB总线的数据采集系统的研制过程为主要内容,阐述了利用CH372与ATMEL的AT89C51等组成的一套数据采集系统的设计方案、开发方法和开发过程,并给出了具体实现方案。
论文首先简要介绍了USB总线的相关内容,然后介绍了数据采集系统的设计。
数据采集系统的设计包括硬件设计、固件程序开发、驱动程序开发和应用程序开发四部分。
在硬件设计部分,首先介绍了设计中所用的CH372的性能和特点,然后给出了具体硬件设计方案,并对设计中应该注意的问题进行了说明。
驱动和应用程序主要完成USB设备的读写和即插即用功能,并提供一个友好的人机界面,对数据采集系统进行控制并显示采集后的数据。
本论文已完成了基于USB总线的数据采集系统的设计,用其实现了基本的数据采集功能。
使用USB总线传输数据,为数据采集系统与计算机之间的通讯开辟了新的道路。
关键词:
USB、驱动程序、应用程序、AT89C51、CH372
Abstract
UniversalserialbusUSBisonekindofemergingandreplaceotherinterfacestandardsofdatacommunicationstandards.USB,duetofast,convenientandflexibleeasytoexpand,tosupportplugandplay,lowcostadvantages,suchaswidelyapplication.
ThepaperismainlyconcernedwithdesignprocessofdataacquisitionsystemthatisbasedonUSBbus.Thedesignscheme,developingmethodanddevelopingprocessofasuitofdataacquisitionsystemusedwithCH372andATMEL’sAT89C51areexpatiate.Inaddition,thepaperalsogivesthematerialrealizationscheme.
Atfist,thepaperintroducestheprotocolofUSBbusinbrief,andthendiscussesthedesignofdataacquisitionsystem,whichincludesfourparts,,firmwaredesign,devicedriverandapplicationprogram.Intheindetail;thequestionswhichshouldbepaidattentiontoindesignisexplained.DriversandapplicationsofthemainequipmentandUSBplugandplayfunction,andprovideafriendly-machineinterface,controlofdataacquisitionsystemanddisplaythedatacollection.
ThepaperofdataacquisitionsystembasedonUSBbusandrealizedthebasaldataacquisitionfoundation.UsingUSBbustotransferdatablazedawayincommunicationbetweendataacquisitionsystemandcomputer.
Keywords:
USB、Drive、Applications、AT89C51、CH372
第1章绪论1
第1章绪论
1.1引言
现代工业生产和科学研究对数据采集系统的要求日益提高,目前比较通用的方法已逐渐不能适应其要求。
例如在PC机及工控机内安装数据采集板卡,如AD卡、422卡或485卡等。
这些数据采集系统存在以下缺陷:
安装麻烦;价格昂贵;受计算机插槽数量、地址、终端资源的限制,可扩展性差;在一些电磁干扰性强的测试现场,无法专门对其做电磁屏蔽,导致采集的数据失真等。
USB是UniversalSerialBus的简称,译为通用串行总线。
USB是一种外设总线,所不同的是,它是由In、Compaq、Digital、IBM、Microsoft、NEC及Northernecom等几家计算机和通信公司联合制订的,并成为了行业标准。
目前USB1.1标准得到了广泛支持。
2000年初,USB2.0标准问世,USB2.0以480Mbs的传输速率得到了广泛关注,在一定基础上代表了计算机接口的发展趋势。
1.2USB的特点
USB作为新一代的计算机接口,具备如下特点:
(1)低成本。
为了把外围设备连接到计算机上去,USB提供了一种低成本的解决方案,所有系统的智能机制都驻留在主机并嵌入芯片组中,方便了外设的制造。
(2)热插拔。
USB实现了真正的“即插即用”功能。
设备连接后由USB自检测,并且由软件自动配置,完成后立刻就能使用,不需要用户进行干涉。
在操作系统方面,由主机负责扫描总线上的所有接口,自动识别USB设备的插拔,并相应的加载或卸载设备驱动程序,实现了即插即用功能。
(3)单一的连接器类型。
USB定义了一种简单的连接器,仅使用一个四芯电缆,即可用来连接任何一个USB设备。
多个连接器可以通过USB集线器连接。
(4)最多可通过网络连接127个设备,每个USB总线支持127个设备的连
图1.1树形拓扑结构示意图
接,其树形拓扑结构如图1.1所示。
在图1.1中,每个Hub集线器可向上连接到另一个Hub,深度可达5层。
由于协议中规定使用8位数据寻址,因此每一个主机最多可连接127个设备。
(其中0x00地址用于缺省地址,在设备刚入网或复位时使用)
(5)如图1.1所示,无论多少个设备连接在系统中,主机只给USB主控制器分配固定的IO地址和中断向量,不会额外占用系统资源。
(6)USB有两种设备传输率:
1.5Mbs和12Mbs,并且两种速率能够自适应转换。
USB2.0的传输速率可达480Mbs。
(7)独立供电。
USB设备提供总线供电和自供电两种方式,通过集线器向设备提供电源。
当外设的电源要求电压为5伏且电源小于500mA时,可以直接从USB总线获取电源,这样USB设备就无需专用电源线,从而降低了设备的成本。
(8)错误检测和恢复。
USB事物处理包括错误检测机制,它们用于确保数据无错误发送。
在发生错误时,事物处理可以重新进行。
(9)电源保护。
如果连续3ms没有总线活动,则USB会自动进入挂起状态,处于挂起状态的设备消耗的电流不超过500uA。
(10)支持四种类型的传输方式。
USB定义了四种不同的传输类型来满足不同设备的需求,这些传输类型包括等待传输、块传输、中断传输和控制传输。
基于USB总线的数据采集系统,充分利用了USB总线的优点,有效解决了传统数据采集系统的缺陷,是数据采集系统设计的一种较好选择。
1.3USB实时数据采集系统的实现方案
USB数据采集系统的硬件模块包括多路模拟开关、AD转换器、微控制器和USB接口芯片等。
硬件总体结构如图1.2所示。
多
路
信
号
图1.2USB实时数据采集系统的硬件模块
系统的模拟开关、AD转换器均采用传统的设计方法,根据系统功能、采集的精度、速率、通道数等诸元素选择合适的芯片。
微控制器采用了Atmel公司的AT89C51,USB接口芯片采用CH372。
USB数据采集系统的软件包括USB设备驱动程序、设备固件、主机端应用程序三部分。
我主要负责使用Delphi语言进行USB设备驱动程序和应用的开发。
其中设备固件对数据采集系统进行控制,还要控制USB接口芯片实现USB协议。
这要求设计者不仅熟悉Delphi程序设计,还要熟悉USB协议Windows核心态。
第2章USB体系简介
2.1体系概述
USB体系包括“主机”、“设备”以及“物理连接”三个部分。
其中主机是一个提供USB接口及接口管理能力的硬件、软件及固件的复合体,可以是PC,也可以是OTG设备。
从图2.1中可以看出USB采用分层的星型拓扑来连接所有的USB设备。
(图中的Func代表USB设备):
图2.1USB体系图
在任何USB系统中都只有一个主机,它是USB通信的中心。
主机管理总线,就必须知道总线上有哪些设备,以及每个设备的功能。
总线上的各个设备有不同的要求,这些设备都在企图同时性的传输数据。
主机必须让每一个设备都可以正确地发送和接收数据。
主机所完成的USB相关工作:
1、为外围设备提供电源;2、检测设备的连接和移除;3、检查数据的错误;4、管理数据通信、5、与外围设备交换数据。
USB集线器最基本的作用是作为与设备融合为一体的分离器和中继器。
集线器在USB设备和主机之间提供了电接口。
集线器直接负责支持能使USB用户友好并让用户方便易用的各种属性。
集线器提供了超越主机实施所能提供的额外结合点,并重播了在面对上行端口及面对下行端口上查看的所有通信量。
集线器可以检测其下行端口上的连接与断开情况,并将此信息报告给主机。
此外,集线器必须能够支持与下行端口相连的USB外设的所有速度或类型,集线器必须能够从所有因连接目标错误条件引发的总线故障中检测和恢复。
此外,集线器负责为其下行端口管理电源,并将所有的电源问题报告给主机从而通知用户。
USB协议规范为集线器定义了两种不同的电源类型:
总线供电和自加电。
USB设备是带有USB接口并可以完成特定功能的外设,它通过USB总线发送和接收数据控制信息。
每个USB设备都包含设置信息,来描述该设备的性能和所需资源。
在功能部件使用前,主机要对其进行设置。
设置信息包括USB带宽分配,选择设备的设置信息等。
目前USB设备是USB总线中发展最快的部分,常见USB外设有:
鼠标或光笔、键盘等。
2.2USB的传输类型
USB通过通道在主机缓冲区与设备端点间传送数据。
在消息通道中传递的数据具有USB定义的格式,它在数据净荷区中包含的数据允许具有设备指定的格式。
USB要求任何在通道上传送的数据均被打包,数据的解释工作由客户层软件和应用层软件负责。
USB协议中规定了四种不同的数据传送类型,每种传送类型在以下的几个传送特征上会有不同:
●USB规定的数据格式;
●信息流的方向;
●数据净荷区的长度限制;
●总线访问的限制;
●延时的限制;
●出错处理。
USB设备的设计者可以决定设备上每个端点的能力。
一旦为这个端点建立了一个通道,这个通道的绝大多数传送特征也就固定下来了,一直到这个通道被取消为止。
USB定义了4种传送类型:
(1)控制传送控制传输属于突发式、非周期性的,由主机软件发起的请求或响应的通信,它用于支持在客户软件和功能设备之间的关于设置信息、命令信息、状态信息的传送。
控制传送一般由三个阶段组成:
首先是设置阶段,通过(SetupStage)包建立联系,把请求信息从主机传到它的应用设备;接下来是数据阶段(DataStage),零个或多个数据传送事物按照Setup包中指明的方向传送数据;最后是状态信息的回传,应用设备将状态信息传到主机。
控制传送使用的是消息通道上双向信息流。
所以,一旦一个控制通道被确认之后,这个通道就使用了具有某个端点号的两个端点,一个输入,一个输出。
(2)同步传送USB要求等时传送能提供以下几点:
固定的延迟下,确保对USB带宽的访问;只要数据能提供得上,就能保证通道上的恒定数据传送速度;由于错误而造成的传送失败时,并不重传数据。
只有高速设备可以使用等时传送。
USB设备要求一个帧内不能有超过90%的时间用于等时传送或中断传送(因为吗,每帧都得保留10%的时间用于控制传送)。
等时传送不支持因总线错误而进行的重传。
接收器可以判断是否发生了一个错误。
一般情况下,可以由握手信号来通知发送者包是否被成功的接收。
对于等时传送来说,定时比正确性和重传更重要。
考虑到总线的错误率较低,协议认为传送一般均能成功。
同步接受者可以判断自己是否在一个帧内错过了一些数据,而且知道丢失了多少数据。
(3)中断传送中断传送是低频率、固定延迟的通信。
中断传送适用于那些请求传输的频率不高,但是必须在指定时间内完成传输的数据。
一般的应用包括USB的键盘、鼠标、游戏杆和集线器的状态报告。
中断传输需要快速地向主机报告当前的状态,这是由设备的属性和使用的场合所决定的。
要在USB上进行中断传送,必须在每个周期对端口进行访问。
主机无法知道一个端口何时准备好一个中断传送,除非它访问这个端点,并同时请求一个中断传送,等待回答。
如果端口无数据需要中断传送,就请求其回送一个NAK信号。
如果端口传送数据时会有中断情况发生,一定要用中断传送,以防中断产生时,客户软件误以为IRP结束。
长度为0的数据净荷区的传送是合法的,而且对某些实现是很有用的。
低速、全速和高速设备都支持中断传送。
中断传送支持像游戏手柄,鼠标和键盘等输入设备,这些设备与主机间数据传输量小,无周期性,但对响应时间敏感,要求马上响应。
(4)批量传送批量传送支持在不确定时间进行的相当大量的数据通信,它可以利用任何可获得的带宽,批量传送有以下特点:
●可以获得带宽访问总线;
●如果总线出现错误,传送失败,可进行重发;
●可以保证数据必能被发送,但不能保证带宽和延迟;
只有当可获得带宽时,批量传送才会发生。
如果USB有较多的空闲带宽
0则批量传送发生地相对频繁,如果空闲带宽较少,则可能有很长时间没有批量传送发生。
通常打印机、扫描仪和数字相机以这种方式与主机联接。
2.3USB的设备状态
USB设备状态共有6个,分别是连接(Attached)、加电(Powered)、缺省(Default)、地址(Address)、配置(Configured)和挂起(Suspended),下面将分别对各个状态的具体含义进行介绍:
(1)连接状态
连接状态又称接入状态,表示设备刚接入集线器的某下游接口上,如果此集线器是配置好的,集线器会通过中断传输通知给运行于主机端的集线器驱动程序,设备进入加电状态;否则设备将停留在接入状态。
(2)加电状态
设备接入总线后带电时的状态称为加电状态。
通过总线的端口获得电源的模式称为总线供电模式(Bus-powered)。
设备对电源支持能力是通过配置描述符(ConfigurationDescriptor)反映的。
一个设备可以既支持自供电模式,又支持总线供电模式。
自供电的接口功能和总线供电的接口功能是有区别的。
当设备处于加电状态后,集线器发出一个复位命令,激活连接端口,使连接的设备可以与主机进行通信,这时设备进入缺省状态。
(3)缺省状态
缺省状态表示设备使用总线的缺省地址与USB主机进行通信时的状态。
设备在加电以后,端口在收到复位信号之前不应响应总线的任何传输,因为它还没有地址。
等到复位完成后,此设备获得了肚子使用总线缺省地址0的权力,所以此状态为缺省状态。
总线的缺省地址0是被总线上所有设备共享的,每一个时刻只能有一个设备处于缺省状态,这种按次序占用总线缺省地址的功能一般由集线器驱动程序实现。
通过缺省地址,主机可以识别这个新接入的设备,并通过设备的默认控制端点0获得它的设备描述符(通过Get_Descriptor命令),并为设备设置一个唯一的设备地址(通过Set_Address命令)
当设备的唯一地址被成功设置后,设备将进入地址状态。
(4)地址状态
地址状态表示设备获得一个唯一的设备地址。
从此之后,主机将通过此地址识别这个设备。
当USB设备处于挂起状态时,它仍然保持这个地址不变。
进入地址状态时,为了使设备正常工作,USB主机会对此设备进行进一步的配置,包括获得设备的描述符、各种配置符以及每种配置描述符下的接口描述符和端点描述符等。
这些工作完成后设备将进入配置完成状态(简称配置状态)。
(5)配置状态
配置状态表示主机激活了设备的某个配置,从此设备将在此配置下工作。
在USB设备正常工作以前,设备必须被正确配置。
从设备的角度来看,它必须保存主机为它配置的当前活动的配置信息。
需要注意的是,即使是在IO设备已经处于设置的状态,主机仍然可以发送控制请求。
实际上如果设备有多个配置,主机可以发送一个Set_Configuration请求来指配置使IO设备返回到它的地址状态,暂停设备传输活动。
(6)挂起状态
如果一个IO设备检测到总线没有活动的时间达到3ms,它就要转移到低功耗的挂起状态,在这个状态下它从总线取得的电流不大于0.5mA。
这时,USB设备保持当前的内部状态,包括它的设备地址及配置值信息等。
总线没有活动的时间达到3ms,表明主机已经停止发送SOF包。
这时因为主机关机或进入睡眠状态。
如果主机关机,则没有必要使大多数IO设备保持加电状态。
在挂起状态下,总线上的任何活动将导致IO设备从挂起状态返回,进入活动状态。
IO设备也可以使PC主机走出睡眠状态,这种能力称为REMOTE_WAKEUP。
只有在这种情况下,才可以由IO设备启动一个信号。
例如,若IO设备是一部电话,电话铃响,它就要唤醒主机。
这种能力必须在设备配置描述符中预先做出说明,使主机对这样的事件有所准备。
IO设备要先驱动一个远程唤醒信号向它的本地集线器报警,集线器再把这个信号传到根集线器,唤醒主机。
总线活动挂起可能是因为主机本身进入了挂起状态。
另外,USB设备必须在所连接的集线器端口失效时进入挂起状态,这就是所谓的选择性挂起(SelectiveSuspend)。
当USB设备接上或USB设备移开的时候,主机启动一个被称作总线枚举(busenumeration)的进程,来标识并管理设备状态的改变,当USB设备接上一个加电端口时,系统将采取以下操作:
1.USB设备所连的集线器通过其通向主机的状态改变通道向主机汇报本USB设备已连接上。
此时,USB设备处于加电状态,它所连接的端口是无效的。
2.主机通过寻问集线器决定此次状态改变的确切含义。
3.主机一旦得知新设备已连上以后,它至少等待100ms以使得插入操作的完成以及设备电源稳定工作。
然后主机发出端口使能及复位命令给那个端口。
4.集线器将发向端口的复位信号持续10ms。
当复位信号撤消后,端口已经有效了。
这时USB设备处于缺省状态,并且可从VBUS汲取小于100mA的电流,所有设备寄存器及状态己经被复位,设备可对缺省地址产生响应。
5.主机给设备分配一个唯一的地址,设备转向地址状态(AddressState)。
6.在USB设备接受设备地址之前,它的缺省控制通道(DefaultControlPipe)在缺省地址处自然是可寻址的,主机通过读取设备描述表,判决设备缺省通
道的地址。
7、设备驱动程序开始收集关于设备的信息,包括接口和端点。
如果设备有多个配置,驱动程序通常也要全部读出。
8、当设备已被配置好并且可以运行时,它将进入配置状态。
第3章USB数据采集系统的硬件设计
系统的模拟开关、AD转换器均采用传统的设计方法。
本章主要介绍USB接口的设计。
3.1USB接口方案
USB接口设计中有三种芯片选择方案:
第一种方案是选用设计成标准USB控制器的低层芯片,例如Cypress公司的CY7C63XXX系列,这类芯片是完全按照USB协议设计的,但由于其结构不同于其它常用控制芯片,开发者需要较长的学习时间,不利于快速开始一个项目;另一种方案是采用具备USB通信功能的单片机,例如Intypress的8X931、Cypress的EZ-USB,这些单片机采用开发者熟悉的结构和指令集,处理能力强,构成系统的电路简单,调试方便,是目前常用的一种方案。
但由于具备了USB接口,与过去的开发系统通常不兼容,需要购买新的开发系统,投资较高;第三种方案是采用连接到一般微控制器的接口芯片,例如philps的PDIUSBD1112、National半导体公司的USBN960X、南京沁恒电子有限公司的CH372等,它可用一般的单片机开发系统进行开发,不需购买新系统,而且USB芯片本身价格较便宜,所以这种接口方案成本很低。
另外由于采用一般单片机,熟悉单片机的开发人员可以很快的开始一个项目。
其缺点是需要两个芯片,电路设计和调试比较复杂,接口性能由于开发者的因素差异较大。
根据本系统的设计要求和实际情况,在设计中选择了第三种方案。
3.2USB接口的硬件设计
3.2.1CH372简介
CH372是一个USB总线的通用设备接口芯片。
在本地端,CH372具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机DSPMCUMPU等控制器的系统总线上;在计算机系统中,CH372的配套软件提供了简洁易用的操作接口,与本地端的单片机通讯就如同读写文件。
CH372的主要特点包括以下方面:
(1)全速USB设备接口,兼容USBV2.0,即插即用,外围元器件只需要晶体和电容。
(2)提供一对主端点和一对辅助端点,支持控制传输、批量传输、中断传输。
(3)具有省事的内置固件模式和灵活的外部固件模式。
(4)内置固件模式下屏蔽了相关的USB协议,自动完成标准的USB枚举配置过程,完全不需要本地端控制器作任何处理,简化了单片机的固件编程。
(5)通用Windows驱动程序提供设备级接口,通过DLL提供API应用层接口。
(6)产品制造商可以自定义厂商标识(VendorID)和产品标识(ProductID)。
(7)通用的本地8位数据总线,4线控制:
读选通、写选通、片选输入、中断输出。
(8)主端点上传下传缓冲区各64字节,辅助端点上传下传缓冲区各8字节。
(9)支持5V电源电压和3.3V电源电压,支持低功耗模式。
表3-1CH372引脚
CH372用到的命令如下表3-2所示:
表3-2CH372的命令
如果命令的输出数据是操作状态,参考表3-3。
表3-3操作状态
命令GET_IC_VER:
该命令获取芯片及固件版本。
返回的一个字节数据是版本号,其位7为1,位6为0,位5~位0为版本号。
如果返回值为0B7H,去掉位7的1,实际版本号为37H。
命令ENTER_SLEEP:
该命令使CH372芯片进入低功耗睡眠挂起状态(部分型号的芯片不支持该功能)。
进入低功耗状态后,CH372芯片的时钟停振,从而节约电能,直到检测到以下两种情况之一才退出低功耗状态:
一是检测到USB总线有信号;二是单片机向CH372芯片写入新的命令(没有输入数据的命令,例如GET_IC_VER命令)。
通常情况下,CH372芯片从低功耗状态退出并恢复到正常工作状态需要几毫秒的唤醒时间,当完全恢复到正常工