精华内容
下载资源
问答
  • 0 引言  USB 通用串行总线(英文:Universal Serial Bus,简称...USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的,自1996年推出后,已成功替代串口和并口,并成为当今个人电脑和大量智能设备的
  • 该器件采用SPI接口方式,相对于传统的并行接口方式,大大减少了芯片引脚,且其工作速率仍可达到26 MHz。本文介绍了使用MAX3420作为USB控制器,并通过SPI接口进行数据换。  1 MAX3420简介  MAX3420是Maxim公司推出...
  • 使用NET USE将USB端口模拟为LPT1

    千次阅读 2011-11-07 12:28:00
    USB端口模拟为LPT1(这样以便可以发命令给打印机) NET USE LPT1: \\servername\共享打印机名 /Persistent:YES

    将USB端口模拟为LPT1(这样以便可以发命令给打印机)

    NET USE LPT1: \\servername\共享打印机名 /Persistent:YES

    展开全文
  • USB接口转LPT接口命令

    2015-11-24 10:08:50
    USB接口转LPT接口命令,必须把要转换的打印机设置为共享,并且局域网能使用该打印机,该命令主要用于当软件只支持LPT接口的打印机时,我们买的打印机刚好是USB接口的。
  • 该器件采用SPI接口方式,相对于传统的并行接口方式,大大减少了芯片引脚,且其工作速率仍可达到26 MHz。本文介绍了使用MAX3420作为USB控制器,并通过SPI接口进行数据换。  1 MAX3420简介  MAX3420是Maxim公司推出...
  • USB端口的打印机映射成LPT并口

    千次阅读 2015-05-23 16:07:35
  • 基于PC机并行口得仿真机一般是采用PC机并行口外加一些锁存器来实现的,并通过PC机模拟JTAG时序。PC的并口一般只有一个,加上并口带电插拔容易损坏,当存在多个基于并口的JTAGT调试器系统时,实现使用过程中会很不...
  • 基于PC机并行口得仿真机一般是采用PC机并行口外加一些锁存器来实现的,并通过PC机模拟JTAG时序。PC的并口一般只有一个,加上并口带电插拔容易损坏,当存在多个基于并口的JTAGT调试器系统时,实现使用过程中会很不...
  • 数字摄像头可以直接捕捉影像,然后通过串、并口或者USB接口传到计算机里。现在电脑市场上的摄像头基本以数字摄像头为主,而数字摄像头中又以使用新型数据传输接口USB数字摄像头为主,目前市场上可见的大部分都是...
  • 今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇。今天带来第二篇,中篇,USB通信原理、USB 系统开发以及设计实例。话不多说,上货。 之前有关于 Veriliog HDL 实现的USB 接口控制器...

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇。今天带来第二篇,中篇,USB通信原理、USB 系统开发以及设计实例。话不多说,上货。

    之前有关于 Veriliog HDL 实现的 USB 接口控制器设计,这里放上超链接,仅供各位大侠参考。

    源码系列:基于 FPGA 的 USB2.0 设计

    导读 

     

     

    2019年9月4日,USB-IF终于正式公布USB 4规范。它引入了Intel此前捐献给USB推广组织的Thunderbolt雷电协议规范,双链路运行(Two-lane),传输带宽因此提升,与雷电3持平,都是40Gbps。需要注意的是,你想要体验最高传输速度,就必须使用经过认证的全新数据线。USB4保留了良好的兼容性,可向下兼容USB 3.2/3.1/3.0、雷电3。除此之外,USB4将只有USB Type-C一种接口,并支持多种数据、显示协议,包括DisplayPort,可以一起充分利用高速带宽,也支持USB PD供电。

    比较遗憾的是,USB4的发布时间至今暂未公布。值得注意的是,此次发布的USB4是规范,而并非USB4.0。在此之前,USB Implementers Forum(USB-IF)计划取消USB 3.0/3.1命名,统一划归为USB 3.2。其中USB 3.0更名USB 3.2 Gen 1(5Gbps),USB 3.1更名USB 3.2 Gen 2(10Gbps),USB 3.2更名为USB 3.2 Gen 2x2(20Gbps)。以上就是关于USB标准以及命名的讯息。

    现在大部分USB设备(比如USB接口的鼠标、键盘、闪存、U盘等等)都是采用了USB通用驱动,而你的系统有USB通用驱动的话(比如XP就内建了USB通用驱动)就能用。而有些USB设备是需要特殊驱动的,比如某些手机,连接到电脑的USB口,是需要安装驱动才能使用的。下面我们一起动手做一做USB接口控制器设计,了解一下如何设计。

    第二篇内容摘要:本篇会介绍USB通信原理,包括USB 传输模型、USB 设备检测过程;USB 系统开发,包括USB 硬件系统,USB 接口芯片 PDIUSBD12;USB 设计实例,包括设计需求分析以及设计方案等相关内容。

     

    三、USB通信原理

     

    USB 通信可以分为两大类:一类是用来设置 USB 设备的配置;另一类是用来设置应用程序的通信。其中,设置 USB 设备的配置指的是主机了解设备的功能并且准备与其进行数据交换的过程。此时大部分的通信,是发生在开机或者是连接设备时用来检测的过程中。而第二种通信,即应用程序的通信,则是发生在主机与应用程序之间的数据交换,也就是执行设备原始设计的功能。例如键盘设备的应用程序,就是传送按键码给主机,然后告诉应用程序显示该按键的字符。

     

     

    3.1 USB 传输模型

    在介绍 USB 体系结构的时候已经介绍了 USB 总线有两条数据线,并且两条数据线是由所有设备共享的。USB 主机负责管理总线上的数据传输,它会将传输依据时间来分割成若干帧(Frame)或者微帧(Microframe)。每一个帧的开头是一个开端信息包(Start Of Frame),然后是数据传输的事务(Transaction)。

    每一次 USB 传输是由一次或者几次事务组成,而每一个事务又是由信息包(Packet)所组成,信息包是 USB 传输的载体。要了解事务、包以及其具体内容,首先需要了解的概念是端点(Endpoint)和管道(Pipe),这些被称为 USB 传输要件。

     

    1)USB 传输要件

    (1)端点

    端点是 USB 设备的一个部分,所有的传输都是将端点作为发出点或者接收点。通常情况下,设备端点是一个内存区域,或者是控制芯片的一个缓存器,端点的作用是数据缓存。每个 USB设备有一个惟一的地址,这个地址是在设备连上主机时由主机分配的,而设备中的每个端点在设备内部有惟一的端点号,这个端点号是在设备设计时被给定的。端点号可以是 0~15,方向可以是 IN(设备发送数据给主机)或者 OUT(主机发送数据给设备)。每个设备必须将端点 0设置为控制端点,控制端点是双向数据传输的,而其他类型的端点都是单向数据传输。

    (2)管道

    管道是设备端点和主机控制器之间的连接,在一个传输发生之前,必须首先建立一个管道。管道随着主机和设备的连接的建立而建立,当移除设备时,管道也跟着被移除。每一个设备都会和主机之间建立一个默认的控制管道(Default Control Pipe),此管道使用端口 0。不同的传输类型使用不同的管道(这将在下面的内容介绍),此外管道还可以被分为消息管道(Message Pipe)和流管道(Stream Pipe)。消息管道是指具有某种 USB 定义格式的数据流,是双向的管道;而流管道则是不具有 USB 定义格式的数据流,不具有双向性。控制传输是惟一使用双向消息管道的传输,其他的传输都是使用单方向的流管道。

    (3)传输类型

    USB 具有 4 种传输类型,定义多种传输类型的目的是为了适应众多 USB 设备对传输速率、响应时间等方面的不同需求。

    • 控制传输(Control Transfer) 控制传输用于在设备初次连接时对器件进行配置,以及对设备的状态进行实时检测,还有在设备配置完成后用于特殊传输目的。端点 0 只可以采用控制传送的方式。

    • 中断传输(Interrupt Transfer) 中断传输适用于那些小批量的、点式、非连续的数据传输应用的场合,如用于人机交互的鼠标、键盘、游戏杆。

    • 块传输(Bulk Transfer) 块传输用于进行批量的、非实时的数据传输。如一台 USB扫描仪即可采用块传输的模式,以保证高速传输并且实时纠错。采用块传输方式的信道所占用的 USB 带宽在实时带宽分配中具有最高的优先级。

    • 同步传输(Isochronous Transfer) 为保证数据传输的实时性,同步传输不进行数据错误的重试,也不在硬件层次上回应一个握手数据包,这种传输模式具有产生错误的隐患。为保证在同步传输数据流中致命错误的机率小到可以容忍的程度,而数据传输的延迟又不会对设备的性能造成很大影响,制造商必须为使用同步传输的信道选择一个合适的带宽(即必须在速度和品质之间做出权衡)。

     

    2)事务、信息包和联络信号

    每一个 USB 传输包含一个或者多个事务,而每一个事务又包括了一个、两个或者 3 个信息包。图 6 所示就是 USB 传输的模型。

    图 6 USB 传输模型示意图

     

    事务根据其数据流方向以及目的,可以分为 3 类:输入、输出与设置。每一个传输类型的传输包括一个或者多个阶段(Stage),一个阶段即一种类型的事务。每个阶段又可以分为一个或者几个相位(Phase),相位包含几个或者两个事务信息包。不同的传输类型的阶段、相位关系如表 2 所示。

    表 2 传输类型、阶段、相位关系表

     

    信息包是一个区块的固定格式信息,每个信息包由一个信息包标示符(Packet ID,即 PID)开头,作为信息包的识别。根据事务种类的不同,PID 后面可能有端点地址、数据、状态信息,或者是一个帧号码、错误校验位。

    在控制传输、批量传输和中断传输中都有一个相位是联络数据包,它包含的是联络信息。但是联络信号不是仅仅在联络数据包中,有些数据信息包中也包含联络信号。USB 定义的联络信号如下:

    (1)ACK(Acknowledge) 表示主机或者设备已经成功接收数据。

    (2)NAK(Negative Acknowledge) 表示设备在忙中。

    (3)STALL 可以表示 3 种意义,即不支持的控制要求、控制要求失败或者是端点失败。

    (4)NYET(Not Yet) 表示设备是否已准备好接收数据,只有高速设备才会使用。

    (5)ERR(Error) 表示在集线器和主机的事务中,设备没有传回预期的联络信号。ERR只有在高速集线器完成事务分割时才会使用。表 3 所示为在不同的传输事务中所传输的状态码。

    表 3 事务类型与状态码

     

    3)USB 传输的结构

    USB 传输结构描述的是各个类型 USB 传输的时序、数据包和特征。下面分别介绍一下 4 种USB 传输类型的传输结构。

    (1)控制传输

    每一个控制传输都必须有设置与状态阶段,数据阶段则是选择性的。控制传输的设置事务传输结构如图 7 所示。

     

    图 7 控制传输设置事务传输结构示意图

     

    控制传送的数据阶段,由一个以上的输入或输出事务构成,遵守和批处理传送相同的协议规则。所有的数据阶段里的事务都必须有相同的方向(即全部输入或者全部输出)。在数据项中要发送的数据的数量和其方向在建立阶段被指定。如果数据的数量超过了先前确定的数据包大小,数据在支持最大的包大小的多个事务中被发送(输入或者输出)。任何剩下的数据都作为剩余在最后的事务中被发送。图 8 所示描述了控制传输的读/写操作事务顺序。

    图 8 控制传输读/写操作事务顺序图

     

    (2)批量传输

    批量传输包含一个或者多个传输事务,其传输是单方向的,即所有的事务都必须是输入或者输出事务。如果需要双向传数据,需要另建立一个管道。批量传输的传输结构如图 9 所示。

    图 9 批量传输结构示意图

     

    (3)中断传输

    中断传输必须在指定的时间内完成,它一般应用于鼠标、键盘、游戏杆等 HID(HumanInterface Device)类设备以及集线器的状态报表中。中断传输的传输结构如图 10 所示。

     

    图 10 中断传输结构示意图

     

    (4)实时传输

    实时传输的意义在于每一个帧或者微帧内必须传输固定数目的字节数据,它适用于固定速率或者特定时间的传输。实时传输没有联络阶段,所以不能保证传输的完全可靠性。实时传输的传输结构如图 11 所示。

     

    图 11 实时传输结构示意图

     

    对实时传输有两点需要注意:

    • 设备或主机控制器都应该能接收 DATA0 和 DATA1,设备或主机控制器应该只发送 DATA0;

    • 实时传输事务不支持切换时序。

     

     

    3.2 USB 设备检测过程

    1)USB 总线枚举

    USB 规范定义的设备状态总共有 6 个,分别是连接(Attached)、上电(Powered)、默认(Default)、地址(Address)、配置(Configured)和挂起(Suspend)。USB 总线枚举过程中,USB 设备需要经历后 4 个状态,如图 12 所示。

     

    图 12 USB 设备状态转换图

     

    USB 集线器负责监测设备的连接情况,而 USB 主机会通过集线器轮询地查询设备。当主机发现有一个新的设备时,会要求集线器建立与设备的通信通道,即设备的端点 0,控制传输端点。之后,主机会通过此通道向设备发送一系列的标准 USB 请求以获取所需的信息,设备必须响应这些请求并且采取适当的动作。这个过程称为 USB 的总线枚举。设备描述符包含的是设备信息,而 USB 请求是指 USB 主机和设备之间获取特定信息的格式,标准的 USB 请求有 11 个。

    设备枚举的步骤如下:

    • 在主机的 USB 集线器口连接上 USB 设备,主机会首先发出一个获取设备描述符的请求Get_Descriptor(wValue = 0x01)。设备接收到这个主机请求,发送设备描述符,这时由于主机对设备的描述符将有多长实际上都不知道,所以这个步骤只是试探性的。实际上,这时候即使只发送部分设备描述符,主机也会进行下面的步骤。

    • 主机发送设置地址的请求 Set_Address,这时候,设备的地址就是 Set_Address 请求数据包内对应的地址,一般为 02 或 03。

    • 完成地址设置后,主机会再次发送 Get_Descriptor(wValue = 0x01)的请求,读取完整的设备描述符,一般为 18 个字节,如果没有收到正确的设备描述符,主机会再次尝试,总共尝试 3 次。

    • 主机发送获取配置描述符的请求 Get_Descriptor(wValue = 0x02),此时请求的仅仅是配置描述符,总长度为 9 个字节。

    • 主机再次发送获取配置描述符的请求 Get_Descriptor(wValue = 0x02),这次请求的数据长度可能会是 0xFF,这表示主机要求获取所有的配置信息,包括配置描述符、接口描述符和端点描述符,设备应该将以上所有的描述符都发送给主机。

    • 在正确获取到所有配置描述符之后,主机就会开始查找驱动,如果未能搜索到驱动的话,主机系统会提示找到设备但是未找到驱动。

    • 当正确找到驱动后,主机会给设备发送 Set_Configuration 的请求,这样才算是一个设备被正确枚举了。

     

    2)USB 设备的描述符

    标准的 USB 描述符包括设备(Device)描述符、配置(Configuration)描述符、接口(Interface)描述符、端点(Endpoint)描述符以及字符串(String)描述符等。不同的描述符从不同的层级来表示设备的属性。设备描述符包含了整个设备的信息以及设备支持的配置号码,每一个设备只能有一个设备描述符。但每一个设备可以有几个配置描述符,它包含了电源管理信息以及所支持的接口号码。接口描述符包含了与端点通信所需要的信息,它可以有零个或者多个端点描述符。标准 USB 描述符如表 4 所示。

    表 4 标准 USB 描述符表

     

    下面详细介绍一下几个基本描述符的具体格式。

    (1)设备描述符

    设备描述符描述了一个 USB 设备的总体信息,它是枚举过程中主机从设备读取的第一个描述符。设备描述符总共有 18 个字节,分为 14 个字段,如表 5 所示。

    表 5 设备描述符

     

    (2)配置描述符

    配置、接口以及端点描述符都是在主机得到设备描述符之后发送给主机的。配置描述符描述了一个特定的设备配置信息,主机使用 Set_Configuration 请求来选择一个配置,用Get_Configuration 请求来返回一个配置。当主机请求获取一个配置描述符的时候,与配置描述符相关的所有接口、端点描述符都会一并返回。配置描述符由 9 个字节组成,分为 8 个字段,如表 6 所示。

    表 6 配置描述符

     

    (3)接口描述符

    接口描述符描述了一个配置中的特定接口。接口描述符总是作为配置描述符的一部分被返回,主机不能通过 Get_Descriptor 请求直接获取接口描述符。接口描述符由 9 个字节组成,分为 9 个字段,如表 7 所示。

    表 7 接口描述符

     

    (4)端点描述符

    端点描述符包含了主机用来确定一个端点带宽要求的信息。除了端点 0 外,一个接口所使用的每一个端点都有它自己的描述符。端点 0 不需要描述符,它也不能直接由 Get_Descriptor请求来获得。端点描述由 7 个字节组成,分为 6 个字段,如表 8 所示。

    表 8 端点描述符

     

    3)USB 请求

    前文已经介绍了控制传输的结构包括令牌包、数据包和状态包,其中数据阶段的格式如图13 所示。

    图 13 控制传输数据阶段格式

     

    从上图可以看出数据阶段的格式包括一个 PID、一个包含了零个或者多个字节数据的数据字段和一个 CRC 字段。在设置阶段,数据包的数据字段永远是 8 个字节,这时候的数据包传输的就是 USB 请求。8 个字节的 USB 请求分为 5 个字段,如表 9 所示。

    表 9 USB 请求

     

    USB 规范定义了 3 种请求,分别是标准请求(Standard Request)、类请求(Class Request)和厂商请求(Vendor Request)。

    某些设备的功能类似或者提供类似的服务,USB 协议中将它们归为一类,并且定义了特定的请求,称为类请求。例如,集线器设备就已经被 USB 规范定义为一个设备类,它的bDeviceClass 规定为 0x09,它们也用于特定的请求,比如用于获得集线器端口状态信息的Get_Port_Status 请求。

    但是光有类请求是不能满足众多 USB 厂商的需求的,所以,USB 协议允许一个供应商为它的设备自定义特殊的请求,此类请求称为厂商请求。

    USB 规范定了 11 种标准请求,所有设备都必须对这 11 种请求作出响应,即使当主机没有给设备分配一个地址或者没有配置设备。下面详细介绍这 11 种标准请求。

    (1)Clear_Feature

    代码:0x01。

    功能:主机要求禁用设备、接口或者端点上的特征。

    数据:无数据。

    格式:

     

    表 10 标准特征选择表

    说明:wValue 字段根据标准特征选择表定义禁用对象;如果是设备特征,wIndex 字段为0,如果是接口或者端点特征,它表示各自的号码。

     

    (2)Get_Configuration

    代码:0x08。

    功能:主机要求获取目前配置的数值。

    数据:设备到主机,长度 1 字节,为目前的配置的索引。

    格式:

    说明:当前的配置数值作为数据被传送回主机。

     

    (3)Get_Descriptor

    代码:0x06。

    功能:主机要求获取一个描述符。

    数据:设备到主机,所请求获取的描述符的长度。

    格式:

    说明:一个 USB 设备只有一个设备描述符,至少一个配置描述符合接口描述符,如果主机请求获得配置描述符,该配置的所有接口描述符和接口描述符的端点描述符都需要被传送过去。

     

    (4)Get_Interface

    代码:0x0A。

    功能:主机要求获取接口的数值。

    数据:设备到主机,长度 1 字节,当前配置可替换的接口数值。

    格式:

    说明:wIndex 字段是配置描述符中的 bInterface 字段,而数据字段的内容就是当前的配置的 bAlternateInterface。

     

    (5)Get_Status

    代码:0x00。

    功能:主机要求获得一个设备、接口或者端点的状态。

    数据:设备到主机,2 个字节,根据不同的对象表示不同的意义,如表 11、12 和 13所示。

    表 11 设备状态返回数据

     

    表 12 接口状态返回数据

     

    表 13 端点状态返回数据

     

    格式:

    说明:wValue 字段为 0;如果是设备特征,wIndex 字段为 0,如果是接口或者端点特征,它表示各自的号码。

     

    (6)Set_Address

    代码:0x05。

    功能:主机给设备指定一个地址。

    数据:无数据。

    格式:

    说明:设备刚和主机连接时,主机使用地址 0 和设备通信,当正确获取一定信息后,主机会通过 Set_Address 请求给设备分配一个地址,地址的数据就是 wValue 字段。

     

    (7)Set_Configuration

    代码:0x09。

    功能:主机给设备指定一个地址。

    数据:无数据。

    格式:

    说明:设备刚和主机连接时,主机使用地址 0 和设备通信,当正确获取一定信息后,主机会通过 Set_Address 请求给设备分配一个地址,地址的数据就是 wValue 字段。

     

    (8)Set_Descriptor

    代码:0x07。

    功能:主机要求添加一个描述符或者修改一个现有的描述符。

    数据:主机到设备,数据为添加或者修改的描述符。

    格式:

    说明:wIndex 字段高字节是描述符类型(见描述符类型表),低字节是描述符的数值;wIndex 字段在字符串描述符时是语言 ID,其他情况下是 0。

     

    (9)Set_Feature

    代码:0x03。

    功能:主机要求启用一个在设备、接口或者端点上的特征。

    数据:无数据。

    格式:

    说明:wValue 字段根据标准特征选择表定义禁用对象;如果是设备特征,wIndex 字段为0,如果是接口或者端点特征,它表示各自的号码。

     

    (10)Set_Interface

    代码:0x0B。

    功能:主机要求设备使用一个指定的配置。

    数据:无数据格式:

    说明:wIndex 字段是要选择的替代配置描述符中 bInterface 字段的内容,wIndex 字段是接口的号码。

     

    (11)Synch_Frame

    代码:0x0C。

    功能:主机要求设备设置与报告一个端点的同步帧。

    数据:主机到设备,数据为帧的数目。

    格式:

    说明:wIndex 字段是需设置的端点号码,此请求使得主机与端点从某一个帧开始传送重复序列。

     

    四、USB 系统开发

     

    4.1 USB 硬件系统

    按照 USB 体系的定义,USB 硬件系统也可以分为两个部分,即 USB 主机和 USB 设备。其中USB 主机主要包括 CPU 模块(主机 CPU)、USB 主机控制器模块、USB 根集线器模块以及 USB 电源模块组成;而 USB 设备主要由 CPU 模块(设备 CPU)、USB SIE 模块、USB 收发器模块组成,如图 14 所示。

     

    图 14 USB 硬件系统框图

     

    按照功能可以将 USB 接口器件分为 6 类:主机控制器、集线器、USB 接口器件、USB 控制器、USB 电源管理器件以及 USB 特殊功能器件。

    (1)主机控制器

    USB 主机控制器的功能是实现标准的 USB 主机串口引擎(SIE)和根集线器功能,它们一般通过 PCI 或其他总线和主机 CPU 通信。常见的 USB 主机控制器包括 Motorola 的 MPC850,CMD的 USB0670、USB0673,Cypress 公司的 CY7C670xx 等。

    (2)集线器

    USB 集线器实现了 USB 协议所规定的集线器的基本功能,常见的 USB 集线器有 Atmel 的AT43301、AT43311,Intel 的 8x930Hx、8x931Hx,Motorola 的 MC141555、MC141556 等。

    (3)USB 接口器件

    USB 接口器件是开发 USB 设备所需要的扩展 USB 接口的器件,一般包括了 USB SIE 的基本功能以及 USB 数据收发功能。USB 接口器件通过数据地址线、串行总线或者 I/O 口和设备的 CPU相连接。目前比较流行的 USB 接口器件有 Philips 的 PDIUSBD11、PDIUSBD12,National 的USBN9602 以及 ScanLogic 的 SL11、SL16 等。

    (4)USB 控制器

    USB 控制器指的就是带有 USB 接口器件的处理器。原来的 USB 设备都至少需要一个核心处理器和一个 USB 接口器件,但是现在出现的 USB 控制器将两者合二为一,这大大简化了硬件电路的设计,同时也利于降低开发成本。常见的 USB 控制器有 Cypress 的 CY7C63xxx、CY7C64xxx、CY7C65xxx,AMD 的 AM186CC、AM186CU,Intel 的 8x930A,Motorola 的 MC68HC05JB3、MC68HC05JB4等。

    (5)USB 电源管理器件

    每个 USB 集线器需要向下游端口提供+5V/500 mA 的电源,而 USB 电源管理器件就是有效地实现总线电源管理的功能,常见的有 TI 的 TPS2014、TPS2015,Micrel 的 MIC2525、MIC2527 等。

    (6)USB 特殊功能器件

    市场上除了有上面介绍的基本 USB 功能器件外,还有很多芯片厂商提供具有特定功能的USB 器件,例如常见的 USB 鼠标内部就是一个 USB 鼠标控制芯片,其功能就是获取鼠标移动信息并且将数据通过 USB 接口传送到计算机。USB 特殊功能器件种类繁多,在此就不一一介绍了。

     

     

    4.2 USB 接口芯片 PDIUSBD12

    1)PDIUSBD12 简介

    PDIUSBD12 是一款带并行总线、支持本地的 DMA 传输的 USB 接口器件,它通常用在微控制器系统中实现与微控制器进行通信的高速通用并行接口,是一款性价比很高的 USB 器件。PDIUSBD12 完全符合 USB1.1 版的规范,它还符合大多数器件的分类规格:成像类、海量存储器件、通信器件、打印设备以及人机接口设备。同样地,PDIUSBD12 还可以应用于许多设备中,例如打印机、扫描仪、外部的存储设备(Zip 驱动器)和数码相机等。

    PDIUSBD12 芯片的特性如下:

    • 符合通用串行总线 USB 1.1 版规范;

    • 高性能 USB 接口器件,集成了 SIE、FIFO 存储器、收发器以及电压调整器;

    • 符合大多数器件的分类规格;

    • 可与任何外部微控制器/微处理实现高速并行接口,速度达到 2Mbit/s;

    • 完全自治的直接内存存取(DMA)操作;

    • 集成 320 字节多结构 FIFO 存储器;

    • 主端点的双缓冲配置增加了数据吞吐量并轻松实现实时数据传输;

    • 在批量模式和同步模式下均可实现 1Mbit/s 的数据传输速率;

    • 具有良好 EMI 特性的总线供电能力;

    • 在挂起时可控制 LazyClock 输出;

    • 可通过软件控制与 USB 的连接;

    • 采用 GoodLink 技术的连接指示器,在通信时使 LED 闪烁;

    • 可编程的时钟频率输出;

    • 符合 ACPI、OnNOW 和 USB 电源管理的要求;

    • 内部上电复位和低电压复位电路;

    • 有 SO28 和 TSSOP28 封装;

    • 工业级操作温度-40~+85;

    • 高于 8kV 的在片静电防护电路,减少了额外元件的费用;

    • 具有高错误恢复率(>99%)的全扫描设计确保了高品质;

    • 双电源操作,3.3V 或扩展的 5V 电源,范围为 3.6~5.5V;

    • 多中断模式实现批量和同步传输。

     

    PDIUSBD12 的功能框图如图 15 所示。

     

    图 15 PDIUSBD12 的功能框图

     

    PDIUSBD12 功能框图中主要模块的功能如下。

    (1)VOLTAGE REGULATOR

    电压调整器。片内集成了一个 3.3V 的调整器,用于模拟收发器的供电,该电压还作为输出连接到外部 1.5kΩ 的上拉电阻。可选择 PDIUSBD12 提供的带 1.5kΩ 内部上拉电阻的软件连接(SoftConnect)技术。

    (2)SoftConnect

    与 USB 的连接是通过 1.5kΩ 上拉电阻将 D+(用于高速 USB 器件)置为高实现的。1.5kΩ上拉电阻集成在 PDIUSBD12 片内,默认状态下不与 VCC 相连。连接的建立通过外部/系统微控制器发送命令来实现。这就允许系统微控制器在决定与 USB 建立连接之前完成初始化时序。USB总线连接可以重新初始化而不需要拔出电缆。

    (3)ANALOG Tx/Rx

    模拟收发器,集成于芯片内,可通过终端电阻直接与 USB 电缆相连。

    (4)PHILIPS SIEPhilips 

    串行接口引擎,实现了全部的 USB 协议层,并且完全由硬件实现而不需要固件的参与。该模块的功能包括同步模式的识别、并行/串行转换、位填充/解除、填充 CRC 校验/产生、PID 校验/产生、地址识别和握手评估/产生。

    (5)PLL

    片内集成了 6M 到 48M 时钟乘法 PLL(锁相环),这样就可使用低成本的 6MHz 晶振,EMI也随之降低。PLL 的工作不需要外部元件。

    (6)BIT CLOCK RECOVERY

    位时钟恢复电路使用 4 倍过采样规则,从进入的 USB 数据流中恢复时钟。它能跟踪 USB 规定范围内的抖动和频漂。

    (7)GOODLINK

    GoodLink 技术可提供良好的 USB 连接指示,其对应的管脚一般外接一个 LED。在 USB 设备的枚举中,LED 指示根据通信的状况间歇闪烁;当 PDIUSBD12 成功地枚举和配置后,LED 指示将保持点亮一定的时间;之后,当主机与 PDIUSBD12 之间成功的传输(带应答)后,PDIUSBD12将关闭 LED;处于挂起状态时,LED 也会关闭。该特性为 USB 器件、集线器和 USB 通信状态提供了很方便的指示,作为一个诊断工具对设备的隔离故障是很有用的。

    (8)MEMORY MANAGERMENT UNIT(MMU)/INTEGRATED RAM

    在以 12Mbit/s 的速率传输并与微控制器并口相连时,内存管理单元(MMU)和集成 RAM(INTEGRATED RAM)作为 USB 之间速度差异的缓冲区,这就允许微控制器以它自己的速率对 USB信息包进行读写。

    (9)PARALLEL AND DMA INTERFACE

    对一个微控制器而言,PDIUSBD12 看起来就像一个带 8 位数据总线和一个地址位(占用 2 个位置)的存储器件。PDIUSBD12 支持多路复用和非复用的地址和数据总线,还支持主端点与本地共享 RAM 之间单周期模式和突发模式的 DMA 传输。关于 DMA 传输的详细资料,请参考PDIUSBD12 的官方手册。

    除了以上功能外,PDIUSBD12 为了适合多种类型的 USB 设备(例如图像、打印机、海量存储设备和通信设备等),还提供了若干种端点的工作模式,如表 14~18 所示。

    表 14 PDIUSBD12 端点工作模式表

     

    表 15 模式 0 配置情况表

     

    表 16 模式 1 配置情况表

     

    表 17 模式 2 配置情况表

     

    表 18 模式 3 配置情况表

     

    主端点(端点 2)是一个比较特殊的端点,它是进行大数据量传输的主要端点。设置端点工作模式的方法是通过 Set Mode 命令,这将在后面的内容中介绍。

     

    2) PDIUSBD12 硬件连接

    PDIUSBD12 提供了两种封装,即 28 脚塑料 SO 和 28 脚塑料 TSSOP,管脚配置如图 16 所示。

    图 16 PDIUSBD12 的管脚图

     

    以上各个管脚的说明如表 19 所示。

    表 19 PDIUSBD12 管脚说明表

    [注]

    O2:2mA 驱动输出

    OD4:4mA 驱动开漏输出

    OD8:8mA 驱动开漏输出

    IO2:4mA 输出

    O4:4mA 驱动输出

     

    下面以 PDIUSBD12 和 80C51 单片机的连接为例说明一下芯片的连接方法。

    图 17 所示是 PDIUSBD12 和 80C51 单片机的连接示意图,在该例中,ALE 接低电平,表示一个独立的地址和数据总线配置。A0 脚与 80C51 的任意一个 I/O 口相连,该端口控制PDIUSBD12 的命令和数据状态。80C51 的多位地址和数据总线可直接与 PDIUSBD12 的数据总线相连。80C51 的频率输入可由 PDIUSBD12 的 CLKOUT 提供。

     

    图 17 PDIUSBD12 与 80C51 单片机连接示意图

     

    3) PDIUSBD12 控制命令

    PDIUSBD12 能够处理大部分协议层解析的工作,例如 CRC 校验、数据位填充等。所以,开发人员需要做的仅仅是对 PDIUSBD12 进行控制并且按照其数据读写时序实现数据访问。而要对PDIUSBD12 进行控制和数据访问,就需要通过 PDIUSBD12 的控制命令。

    PDIUSBD12 的控制命令是一个 8 位数据,当需要发送一个命令的时候,只需向 A0 输入高电平(表示总线上的是命令),将命令的值输出到 8 位双向总线上,再控制 WR_N 信号产生一个下降沿即可。有些命令是从 PDIUSBD12 读写数据的,这些命令的操作方法一般都是首先读取命令,然后按照数据读写的时序依次读取所需的数据。读取数据的方法和读取命令的方法类似,只不过是向 A0 输入低电平(表示总线上的是数据),再控制 RD_N 信号产生一个下降沿,等待一定的时间之后总线上的数据就是所读取的数据了。PDIUSBD12 读写的时序如图 18 所示。

     

    图 18 PDIUSBD12 总线读写时序

     

    读写的时序还有一点时间上的约束,主要需要注意的是读和写的周期 TRC、TWC 不能小于500ns,详细的参数请读者参考官方的手册。

    PDIUSBD12 的命令大致可以分为下面 3 类:

    • 初始化命令:初始化命令在 USB 网络进行枚举处理的时候使用,用于使能端点的功能,还可以用来设置 USB 分配的地址,其命令如表 20 所示。

    表 20 PDIUSBD12 命令汇总表——初始化命令

     

    • 数据流命令:数据流命令用于管理 USB 端点和外部处理器之间的数据传输,通过外部处理器中断初始化大量的数据流,可以访问和设置端点的缓冲区是否有效,其命令如表 21 所示。

    表 21 PDIUSBD12 命令汇总表——数据流命令

     

    • 普通命令:普通命令用于实现一些基本的辅助功能,其命令如表 22 所示。

    表 22 PDIUSBD12 命令汇总表——普通命令

     

    以上是 PDIUSBD12 控制命令的汇总表,下面就各个命令的功能以及读写数据的格式做一下详细地介绍。

    (1)初始化命令

    • 命令:设置地址/使能。

    编码:D0。

    描述:该命令用于设置 USB 分配的地址和使能功能。

    位分配:如图 19 所示。

     

    图 19 设置地址/使能位分配示意图

     

    说明:如表 23 所示。

    表 23 设置地址/使能位分配说明表

     

    • 命令:设置端点使能。

    编码:D8。

    描述:调用该命令使能端点之前必须先设置地址/使能命令。

    位分配:如图 20 所示。

    图 20 设置端点使能位分配示意图

     

    说明:如表 24 所示。

    表 24 设置端点使能位分配说明表

     

    • 命令:设置模式。

    编码:F3。

    描述:设置模式命令需要在写入命令之后写入两个字节的数据,第一个字节包含配置字节信息,第二个字节是时钟分频因数字节。

    位分配:如图 6-21、6-22 所示。

    图 21 配置字节位分配示意图 

     

    图 22 时钟分频系数位分配示意图

     

    说明:如表 25、26 所示。

    表 25 配置字节位分配说明表

     

    表 26 时钟分频系数位分配说明表

     

    • 命令:设置 DMA。

    编码:FB。

    描述:读写 DMA 配置寄存器。在 DMA 操作中,两个字节的缓冲区头(状态和字节长度信息)不参与传送。这就保证了 DMA 数据的连续性,不用插入信息头。在 DMA 读操作时,信息头会被跳过,直接读取缓冲区命令。在 DMA 些操作时,信息头会自动被添加,这样就提供了一个简洁的 DMA 数据传输。

    位分配:如图 23 所示。

    图 23 设置 DMA 命令位分配示意图

     

    说明:如表 27 所示。

    表 27 设置 DMA 命令位分配说明表

     

    (2)数据流命令

    • 命令:读中断寄存器。

    编码:F4。

    描述:该命令用于读取中断寄存器 1 和中断寄存器 2 的内容。

    位分配:如图 24、25 所示。

     

    图 24 中断寄存器 1 位分配示意图 

     

    图 25 中断寄存器 2 位分配示意图

     

    说明:如表 28、29 所示。

    表 28 中断寄存器 1 位分配说明表

     

    表 29 中断寄存器 2 位分配说明表

     

    • 命令:选择端点。

    编码:00、01、02、03、04、05。

    描述:选择端点,将内部指针指向所选择端点缓冲区的起始位置。该命令返回一个字节(可选)。

    位分配:如图 26 所示。

    图 26 选择端点命令返回字节位分配示意图

     

    说明:如表 30 所示。

    表 30 选择端点命令返回字节位分配说明表

     

    • 命令:读取所选择的端点状态。

    编码:80、81、82、83、84、85。

    描述:读最后处理状态寄存器命令后跟一个数据返回端点最后处理的状态。该命令同时复位中断寄存器中的相应位并将状态清零表示已经读取。由于它保留了每次处理的记录,所以该命令在以调试为目的时很有用。在每次新的处理之后会将原来的状态信息覆盖。

    位分配:如图 27 所示。

    图 27 读取端点状态返回值位分配示意图

     

    说明:如表 31 所示。

    表 31 选择端点命令返回字节位分配说明表

     

    • 命令:设置所选择的端点状态。

    编码:40、41、42、43、44、45。描述:当一个停止控制的端点接收到 SETUP 标志时自动解除停止,而不管信息包的内容如何。如果端点应当停在停止状态,微控制器可以重新停止它。当一个停止的端点解除了停止(设置端点命令或接收到一个 SETUP 标志),它同时被重新初始化。将缓冲区刷新,如果是 OUT 缓冲区就等待一个 DATA 0 PID,如果是 IN 缓冲区就写入一个 DATA 0 PID。即使在解除停止时,将设置端点状态写为 0 也将初始化端点。

    位分配:如图 28 所示。

    图 28 设置端点状态参数位分配示意图

     

    说明:如表 32 所示。

    表 32 设置端点状态参数位分配位分配说明表

     

    • 命令:读取最后处理状态寄存器。

    编码:40、41、42、43、44、45。

    描述:读最后处理状态寄存器命令后跟一个数据返回端点最后处理的状态。该命令同时复位中断寄存器中的相应位并将状态清零表示已经读取。由于它保留了每次处理的记录,所以该命令在以调试为目的时很有用。在每次新的处理之后会将原来的状态信息覆盖。

    位分配:如图 29 所示。

    图 29 读最后处理状态寄存器返回值位分配示意图

     

    说明:如表 33 所示。

    表 33 读最后处理状态寄存器返回值位分配说明表

     

    表 34 读最后处理状态寄存器错误代码表

     

    • 命令:读取所选择端点的缓冲区。

    编码:F0。

    描述:读缓冲区命令返回一系列从选择的端点数据缓冲区读出的数据。每读一个字节,内部缓冲区指针自动加 1。读缓冲区命令不会将缓冲区指针复位到缓冲区起始端。这意味着可被其他的命令所中断(选择端点命令除外)。

    说明:缓冲区的第一个字节是保留的,无效;第二个字节是缓冲区内数据的长度;第三个字节开始才是有效的数据。缓冲区的结构示意图如图 30 所示。

    图 30 缓冲区结构示意图

     

    • 命令:向所选择端点的缓冲区写数据。

    编码:F0。

    描述:写缓冲区命令后跟一系列需要写入端点缓冲区的数据。需要注意的是越过缓冲区边界的写入/读出,写入 OUT 缓冲区或读出 IN 缓冲区都是不受保护的,其中的任何一个都会导致错误的操作。OUT 缓冲区的数据只在成功发送之后才有意义。例外的情况是在主端点的 DMA 操作时,指针在到达边界(双缓冲结构)后会自动指向第二个缓冲区。说明:缓冲区的结构同上。

     

    • 命令:清空所选择的端点的缓冲区。

    编码:F2。

    描述:当一个信息包完全接收之后,内部端点缓冲区满标志置位,所有后续的包将被返回的 NAK 拒绝。当微控制器已读取数据时,它应当通过清缓冲区命令来释放缓冲区。当缓冲区清空之后,新的信息包就可被接收了。

     

    • 命令:使所选择的端点的缓冲区有效。

    编码:FA。

    描述:当微控制器已将数据写入 IN 缓冲区时,它应当通过使缓冲区有效命令设置缓冲区满标志。这表示缓冲区内的数据有效并可在接收到下一个 IN 标志时将其送入主机。

    • 命令:应答所选择的端点。

    编码:F1。

    描述:一个 SETUP 信息包的到达将 IN 缓冲区刷新并禁止对 IN 和 OUT 端点的两条命令——使缓冲区有效和清零缓冲区。微控制器需要通过应答 SETUP 命令重新使能这些命令,这确保了最后的 SETUP 包留在缓冲区内并且在微控制器看到 SETUP 包并应答之前不会有任何包发回主机。微控制器必须将应答 SETUP 命令发送到 IN 和 OUT 端点。

     

    (3)普通命令

    • 命令:发送恢复。

    编码:F6。

    描述:发送一个上行数据流恢复信号 10ms,该命令通常用于器件处于挂起状态时。恢复命令后不跟读出或写入的数据。

     

    • 命令:读取当前帧数目。

    编码:F5。

    描述:该命令后跟 1~2 个读出的字节并返回最后成功接收的 SOF 帧数目。帧数目为返回的低位字节,如图 31 所示。

    图 31 读取当前帧数目命令返回值示意图

     

     

    五、USB 设计实例

     

    5.1 设计需求分析

    本设计的硬件平台是一块带有 PDIUSBD12 接口器件的 FPGA 实验板,操作系统平台是Microsoft Windows XP,开发工具是 ISE (FPGA 固件开发)、Microsoft Visual C++(软件和驱动开发)、Compuware DriverStudio(驱动开发)。

    设计的基本要求是通过 FPGA 芯片控制 USB 芯片,实现实验板和 PC 机之间的 USB 接口数据通信,来模拟一个硬件加密设备的功能。实际应用中硬件加密设备是为软件开发商提供的一种智能型的软件加密工具,包含一个安装在计算机并行口或 USB 口上的硬件,及一套适用于各种语言的接口软件和工具软件,其目的是通过对软件与数据的加密防止知识产权被非法使用。

    本例中系统框图如图 32 所示。要实现一个完整的硬件加密设备的功能非常复杂,而且很多的内容也不是本章节的重点,所以本例中只实现 USB 接口的通信,完成一定的数据传输,而不涉及加密算法等内容。简单地说,本次设计要实现的就是两部分内容——USB 设备的枚举和厂商请求的实现。

     

    图 32 硬件加密设备系统框图

     

     

    5.2 设计方案

    要模拟一个硬件加密系统的工作,至少需要 4 部分的工作,即硬件电路板设计制作、处理器的固件编写、USB 驱动的开发以及 USB 软件的制作,如图 33 所示。

    图 33 硬件加密系统设计方案

     

    设计方案:显然,首先需要完成的是硬件电路板的设计和制作,由于本例是基于已有的FPGA 实验板,所以这部分不在此作介绍。

     

     

    本篇到此结束,下一篇带来基于 FPGA 的 USB 接口控制器设计(VHDL)(下),会介绍FPGA 固件开发,包括固件模块划分、自定义包编写、分频器模块的实现、沿控制模块的实现、输入/输出切换模块的实现、请求处理模块的实现、设备收发器模块的实现、测试平台的编写;USB 驱动和软件开发,包括USB 驱动编写、USB 软件编写以及总结等相关内容。

     

     

    END

     

    后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

    大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

     

     

     

     

     

    精彩推荐

     

     

     

     

    毕设:基于FPGA的FIR数字滤波器设计

    叁芯智能科技 FPGA开发板,热销中!

    FPGA工程师用了都喜欢的编辑神器—Vs Code

    FPGA工程师高薪就业,9月份开课!

    展开全文
  •    USB(Universal Serial Bus)是一种新型的通用串行总线,它是快速的、双向的、同步的、可以热插拨的、动态连接且价格低廉的串行接口。正是基于这一特点,现在很多的计算机外设都有USB接口。本文正是利用这一...

    文末下载完整资料

                                  摘 要
       USB(Universal Serial Bus)是一种新型的通用串行总线,它是快速的、双向的、同步的、可以热插拨的、动态连接且价格低廉的串行接口。正是基于这一特点,现在很多的计算机外设都有USB接口。本文正是利用这一新型USB接口来设计上位机与下位机系统之间的通信。利用新型的一线式数字温度传感器测量温度,并通过USB接口和计算机端应用软件进行通信。
       本文首先介绍了本系统相关的背景知识以及USB的通信协议,进而介绍温度控制的基本意义,提出利用USB设备芯片CH372、一线式数字温度传感器DS18B20和单片机AT89C51来开发基于USB温度控制系统。采集的温度数据通过USB接口上传到上位PC机上,并利用应用软件对其进行处理。上位机应用软件用C ++ builder 编写,其运用CH372接口芯片的动态链接库建立起上位机和下位机之间的通信机制。上位机将采集到的温度数据在PC机上显示出来,并且显示实时温度采集图像。
    此外,应用软件可以对下位机进行温度极限设置等简单控制功能,当采集到的温度超过某一设定极限温度,则对系统进行报警。另外下位机还为今后的扩展保留一定的资源。

    关键词: AT89C51;USB协议; 温度采集 ;一线式温度传感器 ;CH372

    2 系统概述
       本章将对基于USB接口的温度控制系统在工业上的应用进行分析,并介绍系统的特点、功能以及使用到的开发工具。
    2.1 系统的特性
       由于该系统利用USB接口,所以具有USB的实时传送数据,与上位机进行信息交流,而上位机又可以连接在互联网上,所以远程的PC机也可以利用互联网对温度检测系统进行查看等各种操作。该系统利用先进的温度传感器,可以对温度快速的进行反应,把温度数据传到下位机进行初步处理数据,进而与上位机通信。总的来说,该系统有以下几点特点:
       ·工作人员可以远离生产环境通过计算机对其进行查看处理;
       ·多点温度测量;
       ·全天候检测温度,并可以在没有工作人员的参与下对生产环境进行简单处理;
       ·对生产环境的温度进行设计极限温度,一旦超过极限温度,系统将对起进行报警,并停止生产环境的工作;
       ·测量温度误差比较精确,在0.5℃内;
    2.2 系统的功能
       该系统主要有以下功能:
          (1)对温度进行检测。利用该系统可以远离恶劣生产环境的情况下,对其进行温度测量;
          (2)对现场温度进行实时采集;并在PC机上显示出来;
          (3)在PC机上实时做出温度图像;工作人员在电脑上便可以直观的得到系统温度图像;
          (4)简单的系统控制;通过计算机上的应用软件可以对温度设置,一旦超过极限温度,发出报警,进而通知工作人员快速的对生产现场进行各种相应操作,这样可以防止温度超出极限温度;
          (5)在上位机端的应用软件上提供系统使用帮助。用户可以利用该功能帮助对系统进行操作。
    2.3 系统开发平台
       本次系统需要用到的开发工具为:keil C、 C++ builder、Protel、计算机、烧写器。
    Keil C是目前世界上最好的MC-51单片机的汇编和C语言的开发工具。支持汇编、c语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真。C++ builder 是计算机高级语言C++比较好用的编程工具,它是属于一种可视化的计算机语言。 Protel是世界上最好的硬件电路图制作的工具。

    3 系统总体设计
    3.1 系统整体方框图
       根据前面的分析,知道系统要实现以上功能,必须由以下几部分组成:温度采集单元、下位机温度初步处理单元、USB设备接口、上位机应用程序。
    系统的结构原理图如图3.1:
    在这里插入图片描述
       温度传感器单元对生产温度环境进行测量,将测量温度传给下位机(单片机),单片机对采集到的温度进行初步处理后,将处理了的数据通过USB接口上传给PC机上位机,而上位机将实时的显示采集到的温度,如果要对现场环境进行处理,则上位机可以发送命令,经过USB接口传送到下位机,下位机根据接受到的数据并对其进行分析,进而做出处理,如报警等各种操作。
    3.2 系统方案比较
       对于本系统,方案的选择是根据温度传感器来选择。
       目前市场上有两种传感器:模拟传感器和数字集成传感器,对于选择不同的传感器将会有不同的方案。下面给出两种不同的方案,并对其进行分析,最终选择其中一种方案。
    3.2.1系统两种可行方案
       方案1:选择模拟传感器
       所谓模拟传感器,简单的说就是传感器对被测量的物质感应,并随着检测的不同做出不同的反应,但这一反应是有规律的,而且有规律的输出模拟信号。由于单片机是数字信号系统,只能识别数字信号,所以这种方案要想利用单片机对温度信号进行处理,必须将对模拟输出量数字化,也就是说要对其输出的模拟电压或电流转换成数字信号,这么一来就系统要加入模拟信号转换成数字信号的处理单元,通常,实现这一功能的是A/D转换器,市场对于这一A/D转换器有不少类型。所以选择这一方案也是可以有效而快速的设计出本系统。
    图3.2给出使用模拟传感器这一方案的设计原理图。
    在这里插入图片描述
       方案2:选择数字传感器
       今天随着计算机的飞速发展以及单片机的日益普及,世界进入了数字时代,人们在处理被测信号时首先想到的是信息处理器(单片机或计算机)。具有输出数字信号便于电脑处理的传感器就是所谓的数字传感器。
       数字传感器是近几年才出现的并得到广泛的应在在实践当中,所谓数字传感器,进一步的讲,就是将模拟传感器产生的信号经过放大、A/D转换、线性化及量纲处理后变成纯粹的数字信号,是在模拟传感器上加入数字处理单元,并将数字单元集成在一块芯片上,所以输出的是数字信号,便于数字处理机对其直接进行处理。图3.3给出利用数字传感器设计的方案图:
    在这里插入图片描述
    4 系统硬件设计
    4.1 中央处理器----AT89C51
       AT89C51由美国Atmel 公司生产的,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位单片机,该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。下文将对AT89C51单片机做简单介绍。
       (1) AT89C51的特点
          AT89C51具有以下几个特点:
             ①中央处理器CPU;
             ②AT89C51与MCS-51系列的单片机在指令系统和引脚上完全兼容;
             ③片内有4k字节在线可重复编程快擦写程序存储器;
             ④全静态工作,工作范围:0Hz~24MHz;
             ⑤三级程序存储器加密;
             ⑥128×8位内部RAM;
             ⑦32位双向输入输出线;
             ⑧两个十六位定时器/计数器
             ⑨五个中断源,两级中断优先级;
             ⑩一个全双工的异步串行口;
       (2)AT89C51的结构图如图4.1
    在这里插入图片描述
    4.2 温度传感器DS18B20
       温度传感器是该系统的测量器件,温度传感器的好坏直接影响到测量结果,所以本文将对温度传感器的选择详细介绍。根据本次设计论文的要求,包括精度要求等,经过分析,本文决定选择数字温度传感器DSB8B20。下面将给予介绍。
       (1) DS18B20的概述
          DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测环境的温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。
       (2)DS18B20的内部结构
          图4.3是DS18B20的内部结构图
    在这里插入图片描述
      由图可知,DS18B20主要由4部分组成:64位ROM、温度传感器、非挥发的温
    警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图4.4所示,
    在这里插入图片描述
    DS18B20的3个管脚说明如下:
      DQ为数字信号输入/输出端。是漏极开路一线接口。也在寄生电源接线方式时,给设备提供电源。
      GND为电源地。
      VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
      DS18B20的64位ROM保存了设备的唯一序列码,是DS18B20的地址序列码,每一个DS18B20的地址序列码是不同的,这样就可以实现一根总线上挂接多个DS18B20。高速闪存(scratchpad)包括2个字节的温度寄存器。保存了温度传感器的数字输出。该闪存还提供了对上限(TH)和下限(TL)的超标报警寄存器、配置寄存器(一个字节)的访问。TH、TL和配置寄存器是  EEPROM,所以系统掉电时可以保存数据。
      DS18B20利用DALLAS的单总线控制协议,实现了利用单线控制信号在总线上进行通信。由于所有的设备通过漏极开路端(DQ脚)连在总线上,控制线需要一个大约5K上拉电阻。在这一总线控制系统中,微控制器通过唯一的64位地址序列码识别和访问总线上的器件。由于地址序列码不同,所以连接在总线上的DS18B20可以说是无限的 。
    (3)DS18B20的寄存器
      DS18B20存储器组织结构如表4.2所示:
    4.3 温度采集模块电路设计
       以上已经介绍了AT89C51和数字温度传感器DS18B20基本知识,下面将利用它们来设计本系统的温度采集电路。DS18B20连接到单片机的方法很简单,它有两种方法连接到电路上,既外接电源方式和寄生电源方式,这里使用的是系统提供的外接电源方式,而不采用寄生电源,只要VCC、DQ、GND连接到单片机的电源正极、一个I/O端口、电源地就可以了。但是要注意的是在DQ数据线中要加一个4.7K的上拉电阻,这一个是必须要加的,无论它是接在P1口还是P0口,这点特别注意,特别提醒。之外在电源两端之间加个0.01U的电容,这样的作用主要是滤波。

    在这里插入图片描述
      由图4.7,知DS18B20工作在外部电源供电方式。单片机采用采用P1.1口与DS18B20通信。下面根据单片机的初始化时序和读写时序,写出DS18B20和单片机之间的读写操作,这里只给了温度的读取,下位机部分程序在附录中给出。
      这里特别提醒的是DS18B20对时序要求很高,精度要求很高,所以程序的延时对是否能读起数据起到非常关键的作用。
      DS18B20读写数据程序如下:

    void delaym(int time)  //延时为(time*2+2)us
    {  
    	int s;
    	for(s=0;s<time; s++)
    }
    void  write_bite(unit8  bite)  //写一位数据位
    {  
    	DQ=0;
    	if(bite==1)
    		DQ=1;   //如果写"1",DQ=1;
    	delaym(29);//延时60us提供DS18B20采样
    	DQ=1;    //释放DQ
    }
    unit8 read_bite(void)  //读一位数据位
    { 
    	DQ=0;     //将总线DQ拉低开始读时序
    	delaym(0); //延时2us
    	DQ=1;    //释放DQ;
    	delaym(1); //延时4us后再读数据
    	return(DQ);
    }
    void  write_byte(unit8 dat)  //写一字节数据
    {  
    	unit8 i;
    	unit8  temp;
    	for(i=0;i<8;i++)
    	{   
    		temp=dat>>1; //右移一位
    		temp&=0x01;
    		write_bite(temp);
    	}
    }
    unit8  read_byte(void)    
    {  
    	unit8 i,value=0;
    	for(i=0;i<8;i++)
    	{ 
    		if(read_bite())
    			value|=0x01<<i;//读一字节数据,一个读时序读一位,并做移位
    		delaym(29) ;  //延时60us有以完成读一位,之后再读下一位
    	}
    	return(value);  
    }  
    unit8 DS18B20_RESET(void)
    {  
    	unit8 data;
    	DQ=0;
    	delaym(239); //保持DQ低480us
    	DQ=1;
    	delaym(35);
    	da=DQ;
    	delaym(211);
    	return (data);//有芯片应答data=0,无则data=1
    }
    
    

    4.4 系统接口模块电路设计
      本系统的采集模块采集到数据后,必须要经过CH372传到上位机应用软件才能实现控制下位机的各种操作。而CH372是USB接口芯片,下位机和上位机通信的要通过CH372接口芯片来完成,其和计算机的连接很简单,所以这一部分主要的硬件实现是CH372和单片机AT89C51的连接问题。
    4.4.1 USB简介
      USB(Universal Serial Bus)是外围设备与计算机进行连接的新型接口,既一种新型的通用串型总线接口,USB具有即插即用、热插拨、接口体积小、节省系统资源、传输可靠、提供电源、良好的兼容性、共享试通信等优点。
      在USB产生之前,外部设备和计算机的通信主要是通过计算机主板所提供的各种接口,比如ISA接口、PCI接口、PS/2接口、串行接口,并行接口等,这些接口,存在这样那样的缺陷,比如接口规格不统一、不共享等为了克服上述外围设备的缺陷,P制造商和用户迫切需要一种新型的外设接口,  USB正是在这样的环境下产生的,它是一种快速、双向、同步、廉价、并支持热插拨功能的串行接口。
      USB是一种新型的接口,那么它必定有它的通信标准,也就是我们所说的协议,下面简单介绍USB的通信协议。
      一般的,对终端用户来看,USB系统是USB设备连接到主机的简单连接,但对开放人员来说,这中连接可分为三个层次:功能层、USB设备层、USB总线接口层,且每一层都由主机和USB设备的不同功能模块组成。可以用下面的图型来形容。下图4.8是这种分层通信机制的简化。
    在这里插入图片描述
      由图,一个USB设备由三个功能模块组成:USB总线接口、USB逻辑设备、功能单元。USB总线接口是USB设备中的串行引擎(SIE);USB逻辑单元被看作是一个端点的集合;功能单元客户软件被看作接口的集合。
      USB传输类型包括批量传输、同步传输、中断传输和控制传输,每种传输类型的传输速度、可靠性以及应用范围都不同。控制传输可靠性是最高的,但速度最慢;同步传输速度快,满足实时性,但可靠性低。在具体应用中,端点传输类型可根据传输速度和可靠性选择。
      在USB通信协议中,主机取得绝对主动权利,设备只能是“听命令行事”,通过一定的命令格式(设备请求)完成通信。USB设备请求包括标准请求、厂商请求和设备类请求。设备的枚举是标准请求命令完成的;厂商请求是用户定义的请求;设备类请求是特定的USB设备类发出的请求,例如海量储存类、打印机类和HID(人机接口)类。固件编程中设备请求必须遵循一定的格式,包括请求类型、设备请求、值、索引和长度。
    4.4.2 USB芯片选择
      USB的传输速度可分为低速(1.5Mbps)、全速(12Mbps)和高速(480Mb/s),按传输速度来分,供选择的USB芯片类型主要有:低速(1.5Mbps)和全速(12Mbps),可选择Philips公司的PDIUSBD12和Cypress公司的EZ-USB2100系列以及国产的CH372芯片; 高速(480Mbps)可选Philips公司的ISP1581和Cypress公司的USB接口芯片CY7C68013。
      本次系统要传输的速率比较少,可以所以选择全速的USB接口芯片,由于国产的芯片已经有所好转,再加上资料比较齐全,这次系统设计所选择的USB接口芯片是国产芯片CH372。
    芯片介绍:
      CH372是南京沁恒电子有限公司生产的新型USB接口芯片,具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU等控制器的系统总线上;它屏蔽了USB通信协议,用户如果没有涉及到底层开放,那么只要了解芯片的普通用法就可以快速的设计USB设备。利用CH372进行USB设备的通信设计可以如下的方框图4.9
    5 系统软件设计
      本系统进行软件设计包括下位机软件设计和上位机软件设计,下位机软件设计可以使用汇编语言和单片机C语言,上位机设计可以采用的很多计算机高级语言,比如VC++、Delphi、C++ builder等,在这里选择C++ builder来编写上位机程序。至于下位机程序,主要有汇编语言、PL/M语言和C语言。汇编语言有执行效率高、速度快、与硬件结合紧密等特点,尤其在I/O端口管理时,使用汇编语言有快捷、直观的优点。但是使用汇编语言相对于高级语言,比如单片机C语言来讲,难度要大很多,而且汇编语言的呈现可读性低、开放性差。所以下位机的程序设计选择单片机C语言。下面简单介绍本次软件设计的编程工具。


    全套资料免费下载:
    关注v-x-公-众-号:【嵌入式基地
    后-台-回-复:【毕业设计】 即可获资料
    回复【编程】即可获取
    包括有:C、C++、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料
    在这里插入图片描述

    展开全文
  • 模拟鼠标或者键盘,必须使用外部固件模式,内置固件只负责信息数据的传输,所以不得不选择并口控制或者SPI的方式,接下来就是了解基本的USB协议的尝试,懂得USB设备与PC机进行信息握手的过程,懂得什么是SETUP,什么...
  • 串口,USBUSB转串口,串口驱动,仿真器下载程序 在初学stm32,接触到的第一步便是下载程序, 方法一:利用仿真器下载程序 方法二:利用串口下载程序 本文简单介绍两种下载方法,浅入窥探下载原理,因为初学,错误...
  • 在以前老的主机上默认带25针的db25打印机接口的,但是随着主机的更新换代,这个“大而无用”的并口逐渐淡出了人们的视野。但如今仍然有很多并口设备在默默工作着,比如小票打印机,老式打印机等,我们知道在带串口的...
  • Windows下usb接口驱动技术(一)

    千次阅读 2013-01-18 17:56:25
    Windows下usb接口芯片的驱动技术 一、 USB概述   USB的英文全称为Universal Serial Bus,中文含义是通用串行总线,是由Conpaq、DEC、IBM、Inter、Microsoft、NEC和Northen Telecom等公司为简化PC与外设之间的...
  • STM32 之 USB 虚拟串口

    万次阅读 多人点赞 2018-08-11 22:03:23
     为了让USB被视为一个COM端口,USB设备必须根据通信设备类(CDC)规范来实现两个接口: 1.抽象控制模型通信,在端点中有1个中断:在我们的实现中,这个接口在描述符中声明,但是相关的端点(端点2)不被...
  • 用STM32+OV2560自己做一个USB摄像头

    千次阅读 2020-12-31 16:59:34
    手里有一块AT32的开发板和一个OV2640摄像头模块,因为做智能车模型需要一个摄像头,就想能不能废物利用一下,用这俩做一个即插即用的USB摄像头,能够直接用在树莓派的Linux系统上,而不需要在Linux上再另外开发...
  • 可以和FPGA搭配使用的USB3.0 PHY芯片通过之前的介绍<FPGA和USB3.0通信-USB3.0协议介绍USB3.0 PHY简介首先我们需要了解PHY具体完成哪些工作以及我利...
  • FPGA+CUYSB3014实现USB3.0功能

    千次阅读 2021-04-04 17:28:19
    ​本篇文章主要介绍使用FPGA+CYSUB3014架构实现USB3.0的功能,具体内容包括: CYUSB3014简单介绍 CYUSB3014内部逻辑框图 CYUSB3014硬件配置 FPGA+CYUSB3014硬件设计 1.CYUSB3014芯片介绍 CYUSB3014是赛普拉斯在近几...
  • 一、介绍   PC机与树莓派的常用通信方式SSH(Secure Shell)远程登录、VNC Viewer虚拟网络...  我们的笔记本通常没有串口,这时就需要一个USB转TTL的模块了,它的作用就是把电平转换到双方都能识别进行通信,USB
  • USB即通用串行总线,接口、引脚定义及电平在不同代有不同的要求。 现在常用USB 2.0和USB 3.x。USB 3.X向下兼容,比2.0多了一对高速差分接收和一对高速差分发送。 USB1和USB2可能用到接口类型有Type A、mini A, ...
  • 采集板可在多达8个探头和计算机之间提供便利的USB接口。 它具有8个数字输入通道以与外部设备同步采集,并具有8个±5V模拟输入通道,以记录辅助连续信号。 在网站上查看。 如果您有兴趣建立自己的收购委员会,我们...
  • 系统阐述了USB1.1 OHCI 主机控制器IP 的功能、结构、各功能模块的电路设计和实现方法,介绍了主机串行接口引擎模块及其时钟和数据恢复电路以及并行CRC 算法的设计。  为了验证OHCI 主机控制器功能正确性,在中科...
  • 本文介绍了JTAG接口标准用于Flash编程的方法,并实现USB接口到JTAG接口的转换模块的硬件设计和协议转换,从而以PC机USB接口模拟JTAG接口的编程时序,利用嵌入式处理器的JTAG接口对Flash进行在线编程。  1 引言  在...
  • Linux USB总线架构

    千次阅读 2017-08-07 12:21:49
    Linux USB总线架构
  • USB-HID技术报告(VR接口

    千次阅读 2017-07-04 11:12:13
    名 称 : USB-HID技术报告 姓 名 : 殷松 时 间 : 2017年7月3日 目 录一、 HID设备简介以及范畴 二、HID设备通信方式以及功能特征 ... HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类
  • 本文主要讲解USB3.0接口的PCB设计,通过理论分析以及案例的解剖,希望大家看了此文章能轻松的应对各种USB3.0方案的PCB设计。 简介 USB 3.0可提供高达5Gbps的数据速率,比高速USBUSB 2.0)快十倍,并具有优化的...
  • 看了好多网上的文章,于是决定做一个兼容win平台,linux平台,安卓电视手机都能用的usb手柄,于是选择了xbox360的手柄协议xinput。上成品图:
  • USB转串口与虚拟串口相关

    千次阅读 2019-10-29 16:18:34
    一、串口与并口 二、USB转串口、虚拟串口概念 三、串口占用问题 四、其他:多个程序共享一个串口数据 五、COM、COM+和DCOM与COM端口无关 一、串口与并口 (一)串行接口(即COM口): 简称串口,也称串行...
  • FMS 模拟飞行软件

    2012-09-23 10:18:26
    模拟飞行软件有很多种类。...还有人做了连接电脑话筒插口的连接接口器,目前正在开发连接USB口的接口器。对于我们这些喜欢自己动手的航模爱好者来说,只要有电路图就可以轻而易举地做出供自己使用的接口器了。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,133
精华内容 2,453
关键字:

usb模拟并口