| | 网站首页 | 技术文章 | 专业论文 | PLC可编程 | 单片机 | 变频器 | 传感器 | 嵌入式系统 | 电源技术 | 运动与伺服 | | 校园招聘 | 留言板 | |
|
![]() |
|
| 您现在的位置: 自动化学习网 >> 技术文章 >> 单片机 >> 文章正文 |
|
|||||||||||||||||||
| 基于EZ-USB的数据采集与控制 | |||||||||||||||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-5-11 ![]() |
|||||||||||||||||||
|
摘要:主要介绍带USB控制核的51系列单片机EZ-USB的传输特性与控制机理,简述信息包的组成及几种枚举方式。文中给出的程序是一个利用端点2IN/OUT进行块传输的应用实例。由此可验证它的开发效率。 关键词:EZ-USB PID 枚举 BULK传输 1 概述 在目前PC的I/O模式中,外围设备通常被映射为CPU的I/O地址空间,并且被分配一个指定的IRQ(中断请求),在某些情况下也可以是一个DMA通道。这些系统资源被分配给指定的外围设备。这种地址分配的方法已经成为一种标准,软件开发者要根据这对指定的设备进行访问。这给编程者带来了不便,同时外设消耗了PC的许多系统资源,使许多系统资源不可使用,并且产生了很多冲突,由此造成了许多问题。 Cypress 推出的带智能USB接口的单片机EZ-USB,极大地降低了USB外设的开发难度,为PC外设的制造商提供了一性能的优良、价格较低的设计方案。基于EZ -USB的强大功能,让我们看到了应用USB的美好前景。使用该芯片后,我们在很短的时间内便实现了基于USB传输的采集系统。为便于理解,有必要介绍一下相关的USB知识。 1.1 USB信息包 USB传送的数据包由被称为Packet Ids(PIDs)的特定代码所定义,PID表示了正在被传送的包的类型。USB的包中一类有四种PID类型,如表1所列。
图1 举例说明了USB传输。包(1)是一个由OUT标志表示的输出信号,表示主机发出的数据将要通过总线进行传送。包(2)由数据组成,它由DATA1标志表示。包(3)是一个由外设发送的握手信息包。外设使用ACK(确认)标志向主机报告外设已正确地接收数据。接下来发出的OUT信号(4),开始进行第二次传输。紧跟其后的是数据包,这一次使用的是DATA0标志。最后,设备通过传送握手信息包中的ACK标志表示接收成功。 为什么要用到DATA0与DATA1两种数据标志呢?这是因为USB的设计者对待错误的检测非常严格。如前面提到的,ACK握手信号是一个向主机报告外设无差错接收数据的信号(包中的CRC位用于错误检测)。但是如果在传输过程中,握手信号本身出了错,那又该怎么办呢?为了检测这种错误,在主机和外设双方都保留了一个数据轮换位,它在数据信息包的传送过程中轮流改变其状态。内部轮换位的状态与随数据到达的PID相比较,要么是DATA0,要么是DATA1。当传送数据时,主机或设备发出交替的DATA0-DATA1标志。通过比较数据PID和内部轮换位,主机或设备能够检测到一个出错的握手信号包。 SOF信号每ms发生1次,代表1个USB帧的开始。 3个握手信号:ACK、NAK和STALL。 *ACK表示“成功”,即数据无误接收。 *NAK表示“忙,重发”。NAK看上去好像表示“出错”,但其实不是。USB设备不响应,才表示传输有错误。 *STALL表示有意外事件发生。设备发出STALL握手信号,表明它不能接受某个设备请求,或是外部终端出错,或是主机企图访问一个并不存在的资源。该状态有些像“停止”,但要好一些,因为USB提供了从STALL状态中恢复的方法。 PRE(Preamble)PID的传送优先于一个USB低速(1.5 Mbps)传输。EZ-USB系列仅支持USB高速(12 Mbps)传输,因此可以忽略PRE信息包及接下来的低速传输。 1.2 USB主控制器 在USB 系统中,主机是控制器。USB设备回应主机的请求,但USB设备之间不能互送信息。当主机向USB外设发送数据时,主机发出1个OUT信号。外设如果有时间接收数据,并接收无误,就返回1个ACK信号给主机;如果忙,就返回1个NAK信号;如果发现错误,就不返回信号,主机过一段时间地重发。USB设备从不主动给主机发送数据。然而,在EZ-USB芯片中,没有什么可以防止8051把要发送给主机的数据放到端点缓冲器以用于传输,但数据会一直留在缓冲器中,直到主机发出1个IN信号到那个端点。如果主机不发出IN信号,数据就一直留在那里。 1.3 USB的方向 如果知道了主机是控制器,就很容易记住USB的方向:OUT表示从主机到外设,IN表示从外设到主机。例如,送数据给主机的端点是IN端点,即EZ-USB送数据到IN端点缓冲器。也就是说,8051的OUT就是对主机的IN。 1.4 帧 USB 主机通过每1ms传送1个SOF(起始帧)包,向所有USB设备提供时间基准。SOF包包括一个递增的、11位的帧计数器。8051可以从两个EZ- USB寄存器中读该帧计数器。SOF时间对同步端点具有意义。EZ-USB内核为同步端点数据服务提供给8051一个中断请求。 1.5 USB设备的加载过程 当USB设备接入HUB(集线器)后,主机控制器和主机软件能自动侦测到设备的接入。然后,主机软件读取一系列的数据用于确认设备特征,如Vendor ID、Product ID、接口工作方式、功率消耗等参数。之后,主机分配给外设一个单独的地址。地址是动态分配的,各次可能不同。在分配完地址之后,对设备进行初始化,初始化完成以后,就可以对设备进行I/O操作了。 2 EZ-USB的端点和描述符 EZ-USB芯片具有软配置特性。通过USB接口从主机下载的8051代码和数据被存放在内部RAM。使用EZ-USB的外设,可以在无ROM、EPROM或FLASH存储器的情况下操作。为支持软配置的特性, 当USB设备没有固件时,EZ-USB芯片自动进行枚举,所以USB接口本身可用来下载8051代码和描述符。 一个叫“ReNum”的EZ-USB控制位决定是SIE内核还是8051处理端点0上的设备请求。开机时,RENUM位是0,表明EZ-USB内核自动处理设备请求。一旦8051运行,它就置RENUM=1,表明使用下载的8051代码处理接下来的设备请求。 以下是枚举模式。 当EZ-USB芯片脱离复位状态时,EZ-USB芯片根据I2C总线上的外部EEPROM的内容,对如何枚举做出描述。如表2所列,其中VID表示厂家识别码,PID表示产品识别码,DID表示设备识别码。
(1)如果没有EEPROM或EEPROM的第一字节,既不是0xB0也不是0xB2。EZ-USB芯片使用其内部存储的描述符数据枚举,它包含Cypress半导体的VID、PID、DID。这些ID字节使主机操作系统装载Cypress半导体设备驱动程序。 USB主机在枚举过程中询问设备,读取设备描述符并使用表2字节决定下载哪一个固件驱动程序到操作系统。 (2)如果串行EEPROM与I2C总线相连且每一个字节的0xB0,EZ-USB芯片使用内部存储的描述符数据枚举。但是,由外部的EEPROM提供6字节的PID/VID/DID数据,它使主机操作系统装载与之有关的设备驱动程序。 (3)如果EEPROM的第一字节是0xB2,EZ-USB内核将EEPROM的内容写到内部RAM。EZ-USB内核置RENUM位为1,表明8051(而不是EZ-USB内核)通过控制端点0对设备请求作出应答。当然,所有的描述符数据,包括VID/DID/PID的值,由8051固件提供。 3 EZ-USB的传输类型 EZ-USB支持四种传输类型,可满足不同的通信要求。 (1)块传输。块传输用于支持突发的大量的数据,以8、16、32或64字节的信息包传送。 (2)中断传。中断传输用于量少且不经常传送的周期性数据。中断数据的包长限制在64。字节内。 (3)同步传输。同步传输主要用于音频和视频数据流,不具USB定义的格式。 (4)控制传输。控制传输应用于控制命令和状态命令的传送。 4 EZ-USB内核在块(bulk)传输中的作用 在每一个USB设备中都有1个串行接口引擎(SIE)。SIE与USB数据线D+和D-相连,传输发向或来自USB设备的字节。在块传输中,SIE对PID 信息包解码,并通过CRC位对数据进行错误检测,然后发送有效数据。如果SIE发现1个出错的数据,它会自动地不进行响应,而不是提供1个PID握手信号,并告诉主机延时重发。 块传输是异步传输,采取了使用ACK和NAK握手PID的数据流控制机制。SIE通过发出1个NAK,向主机报告其“busy”状态。当外设传送数据成功,它就会要求SIE发送一个ACK信号,表示发送成功。 SIE 接收来自USB设备的数据和控制信号,将它们变为USB传输格式,并通过2根USB数据线传送。因为USB传输采用的编码方式是NRZI(反向归零制)编码方式,所以,SIE还必须在位数据流的适当位置上插入位,以确保数据发送的完整性。这种做法称为“位填充”,它由SIE完成。 EZ-USB芯片采用软配置,即包含内部程序/数据RAM。EZ-USB可作为USB设备进行连接,将程序下载到内部RAM,这一切都是由改进后的SIE完成。SIE能够用内部描述符表进行枚举操作。 5 EZ-USB块传输 为了简化设计,我们采用了块传输方式进行数据的采集。因此,在制定设计方案前,必须对块传输的特点有一个深入的了解。 块传输用于支持突发的大量的数据,对连续性不做要求,如打印数据。它可以利用任何可获得的带宽: (1)以可获得的带宽访问总线; (2)总线错误导致传送失败时,可以重发; (3)可以保证数据传送,但不能保证传送的带宽和延迟。 仅当有可获得的带宽地,块传输才会发生。当空闲带宽很多时,块传输进行得较快;空闲带宽少时,可能在很长时间内不发生块传输。 (1)块传输的包长限制及使用的端点 USB规格说明允许块传输数据的最大信息包长度为8、16、32或64字节。EZ-USB为0~7IN和0~OUT16个端点中的每一个提供了最多能容纳64字节的缓冲区。 (2)与块传输相关的控制位及寄存器 块端点中有6个端点:2-IN、4-IN、6-IN、2-OUT、4-OUT它6-OUT可与下一个连续编号的端点配对,以提供双缓冲器。这就允许8051为一个数据信息包服务,而另一个正确过USB进行传输。6个端点的成对位(USBPAIR寄存器)控制双缓冲器。 8051 在初始化时,设置了14个端点有效位(IN07VAL、OUT07VAL寄存器),以及1个2位的控制和状态(CS)寄存器。8051可读取CS寄存器中的位,以判定端点是否忙,并写入另一位强制进入端点STALL状态。当设置端点忙位时,8051绝对不能读写端点缓冲器或字节计数器。 当为8051服务的端点变忙时,EZ-USB内核设1个中断请求位。为了自动把控制权移交到为端点请求服务的ISR(中断服务程序),EZ-USB中断向量系统要对端点发出的中断请求继续划分。 (3)BULK IN传输 USB 的BULK IN数据从设备流向主机。主机通过向EZ-USB内核发出1个IN标志,请求1次IN传输,当EZ-USB准备好时响应数据。8051通过装载端点的字节计数器表明准备好。如果EZ-USB内核接收到1个未准备好的端点的IN信号,它将用NAK握手信号响应IN信号。 在BULK IN传输中,8031在端点缓冲器中已装入了1个数据信息包,然后在端点字节计数寄存器中装入信息包的字节数,以协助下一个IN传输的进行。这时设置了 BUSY位。主机发出1个IN信号。EZ-USB内核通过传送IN端点缓冲器中的数据响应IN信号。当BZ-USB发出一个表示数据接受正确的ACK信号时,EZ-USB内核清除端点的BUSY位,并设置它的中断请求位,告诉主机端点缓冲器为空。如果这是一个多信息包传输,那么主机将发出另一个IN信号,以得到下一个信息包。 如果第二个IN信号在8051有时间装满端点缓冲器之间到达,EZ-USB将发出1个NAK握手信号,表示忙。主机继续发出IN信号,直到数据准备好。最终,8051将端点缓冲器装满数据,并将信息包的字节数装入端点的字节计数寄存器(INnBC),为下一次的传输做准备。 (4)BULK OUT传输 USB BULK OUT数据从主机到达外设。主机通过向EZ-USB发出一个紧跟在数据信息包后的OUT信号,请求一次OUT传输。如果EZ-USB内核正确地接收数据,那么EZ-USB内核响应ACK信号。如果端点没有准备好接收数据,EZ-USB丢掉主机的OUT数据并返回一个NAK信号,表明没有准备好。相反地,主机将继续发出OUT信号和数据给端点,直到EZ-USB内核响应ACK信号。 每一个EZ-USB的BULK OUT端点都有一个字节计数寄存器,它有两个作用。8051读取字节寄存器,以确定来自主机的最后一次OUT传输期间,接收了多少字节。8051写字节计数器(用任何值),告诉EZ-USB内核已经完成了从缓冲器中读字节的动作,使缓冲器能够接收下一个OUT传输。 (5)错误恢复 EZ-USB内核自动检查错误,如果它用建立在USB上的错误检测器件(CRC检测和数据替换)时,发现错误,就请求主机再次传输数据。 6 程序设计 我们采用EZ-USB系列单片机的AN2131QC芯片实现块传输的应用。AN2131QC芯片采用80引脚的封装,除了具有24个I/O引脚外,还包含1 个16位地址总线和1个8位数据总线,以用作外部存储器的扩展。在该芯片内部有1个8KB的RAM,使得固件可以从主机下载。 BULK传输源程序清单: ;----------------------------------------------------------- $NOMOD51 ;取消默认的8051寄存器定义 $nolist $include(.inc) ;EZ-USB寄存器申明 $list NAME ezbulk ISEG AT 60H ;堆栈段 STACK:DS20 ;申明使用20个堆栈单元 CSEG AT 00h LJMP START ORG 200h START:MOV SP,#STACK-1 ;设置堆栈指针 LOOP:MOV DPTR,#OUT2CS;EP2IN控制和状 ;态寄存器 MOVX A,@DPTR JB ACC.1,LOOP;检查“忙”位,为 ;低时允许进行服务处理 MOV DPTR,#IN2CS;EP2OUT控制和 ;状态寄存器 MOVX A,@DPTR JB ACC.1,LOOP ;检查是否处于“忙” ;状态,为“1”时表示忙 service_IN2: MOV DPTR,#OUT2BC MOVX A,@DPTR MOV R2,A MOV DPTR,#OUT2BUF MOV R3,DPL MOV R4,DPH MOVX A,@DPTR MOV DPTR,#IN2BUF MOV R5,DPL MOV R6,DPH MOVX @DPTR,A DEC R2 LOOP1:MOV DPL,R3 MOV DPH,R4 INC DPTR MOVX A,@DPTR MOV R3,DPL MOV R4,DPH MOV DPL,DPH MOV DPL,R5 MOV DPH,R6 INC DPTR MOVX @DPTR,A MOV R5,DPL MOV R6,DPH DJNZ R2,LOOP1 MOV DPTR,#OUT2BC;装载任意值到 ;字节计数器,以清除输入缓冲区 MOVX A,@DPTR MOVX @DPTR,A MOV DPTR,@IN2BC;将收到的数据通过 ;EP2IN发送出去 MOVX @DPTR,A ;写发送字节计数器 SJMP LOOP END |
|||||||||||||||||||
| 文章录入:admin 责任编辑:admin | |||||||||||||||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||||||||||||||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 基于PIC的无线数据传输发射机… 基于PSD3XX与ADMC401接口设计… 基于ST72单片机的快速充电系… 基于单片机的MicroDrive接口… 基于单片机的喷墨打印机控制… 利用ASSP实现成本节约,加速… 如何仿真单片机的外围设备 非接触式e5551读写器的开发 基于80C166单片机PEC服务的P… 基于8位微控制器控制硬盘进行… |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 文章索引 | 网站地图 | |
| 声明:本网站资源均来源于网络,如涉及版权问题,请通知我们,我们将尽快删除! QQ:279619038 备案序号:吉ICP备06005743号 自动化学习网版权所有 站长:guxing |
|