版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章USB总线模块
何宾2011.12本章内容本章主要是介绍PSoC3内的USB总线模块,其内容主要包括:USB总线模块概述、USB模块结构、USB模块工作条件、逻辑传输模式、PS/2和CMOSI/O模式、USB人体学输入设备的实现。USB总线模块是PSoC3所提供的一个重要功能单元,通过本章内容的学习,不仅能了解和掌握USB总线模块的工作原理,还能掌握使用PSoC3实现USB总线模块通信的方法。PSoC3/5数字子系统
--USB总线模块
PSoCUSB作为一个USB设备和一个主机进行通信。USB模块作为PSoC内的一个固定功能的设备。只支持全速通信(12Mbps),并且和USB2.0协议兼容。USB设备设计成即插即用,也支持热插拔。PSoC3/5数字子系统
--USB总线模块
USB总线模块的特点有:与USB2.0规范兼容;支持全速外设,最高速率到12Mbps;支持8个数据端点和1个控制端点;支持四种类型的传输-块(批量)数据传输,中断传输,同步传输和控制传输;支持热插拔;支持两种类型的逻辑传输模式:存储转发模式和直通模式;差分信号(D+和D-)输出;存储转发模式下支持最大的包为512个字节,直通模式的同步传输支持最大的包为1023个字节;支持P2/2和CMOS信号;操作电压范围为3.3V和5V;USB总线模块
--USB模块结构
下图给出了USB模块的结构图,该模块由串行接口引擎(SerialInterfaceEngine,SIE)和仲裁器构成。图USB模块的结构图USB总线模块
--USB模块结构(串行接口引擎SIE)
SIE用于处理译码,以及在发送和接收时,创建数据和控制包。在接收时,SIE将USB的位流解码成USB的包;在发送时,创建USB的位流。下面给出SIE的主要特性:兼容USB2.0规范;支持1个设备地址;支持8个数据端点和1个控制端点;每个端点支持中断;在48MHz时钟下全速运行;在控制端点集成一个8字节缓冲区;USB总线模块
--USB模块结构(串行接口引擎SIE)这个模块的寄存器主要用于配置数据端点操作和控制端点的数据缓冲,寄存器也控制每个端点可用的中断。
SIE在每次传输结束后产生中断。使用USB_SIE_INT_EN寄存器可以使能/禁止端点的中断。通过USB_SIE_INT_SR寄存器可以得到端点的中断状态。USB总线模块
--USB模块结构(串行接口引擎SIE)SIE寄存器CNT0和CNT1保持着每个端点的计数值,这个计数值表示USB传输的数据字节的个数。在输出(OUT)端点情况下,固件程序确定端点所能接收到的最大的字节。SIE用所接收到的字节数更新寄存器。在输入(IN)端点情况下,它保持将要发送数据的字节数。USB_SIE_EPx_CR0寄存器保持每个端点的模式值。模式值决定了USB模块对主机的响应。表5给出了USB_SIE_EPx_CR0寄存器MODE位域的值。USB总线模块
--USB模块结构(串行接口引擎SIE)模式编码SETUPINOUT描述Disable0000忽略忽略忽略忽略所有USB端点的流量NAKIN/OUT0001接受不响应不响应不接收IN和OUT令牌StatusOUTonly0010接受阻止检查设置该模式时,接受一个SETUP令牌。在IN令牌的情况下,阻止;在OUT令牌的情况下,用零长度的包响应。用于控制端点。STALLIN/OUT0011接受阻止阻止设置该模式时,接受一个SETUP令牌。在IN和OUT令牌的情况下,阻止。用于控制端点。Reserved0100忽略忽略忽略ISOOUT0101忽略忽略一直同步OUTStatusINonly0110接受TX0字节阻止设置该模式时,接受一个SETUP令牌,在OUT令牌的情况下,阻止;在IN令牌的情况下,用零长度的包响应。用于控制端点。ISOIN0111忽略TX计数忽略同步INNAKOUT1000忽略忽略不响应送NAK握手给OUT令牌ACKOUT(STALL=0)1001忽略忽略响应向一个OUT令牌发出ACK握手时,SIE修改这个模式到1000。ACKOUT(STALL=1)1001忽略忽略阻止阻止OUT传输Reserved1010忽略忽略忽略ACKOUT-STATUSIN1011接受TX0字节响应响应(ACK)OUT令牌,或者为IN令牌发送零个长度的数据包。NAKIN1101忽略不响应忽略为IN令牌送NAK握手信号ACKIN(STALL=0)1101忽略TX计数忽略当接收到一个IN数据的ACK握手时,SIE修改这个模式到1100。ACKIN(STALL=1)1101忽略阻止忽略阻止IN传输Reserved1110忽略忽略忽略ACKIN-StatusOUT1111接受TX计数检查对IN数据或者状态OUT进行反应。USB总线模块
--USB模块结构(串行接口引擎SIE)
SIE也报告发送错误,USB_SIE_EPx_CR0寄存器的比特为“err_in_txn“表示错误的发生。当设置该位时,当它接收到来自主机的其它IN令牌时,硬件自动重发相同的数据。这种重发只出现在存储转发模式下。在直通模式下,通过固件读取该位来确定重发数据。USB总线模块
--USB模块结构(仲裁器)模块仲裁器用于处理端点对SRAM存储器访问。CPU和SIE都可以访问SRAM存储器.仲裁器负责处理CPU和SIE访问SRAM的仲裁。仲裁器包含下面的模块:SIE接口模块;CPU接口模块;存储器接口;DMA引擎;仲裁逻辑;同步模块;USB总线模块
--USB模块结构(仲裁器)仲裁器寄存器用于处理端点的配置,读端点地址和写端点地址。它也用于配置每个端点所要求的逻辑传输类型。每个端点支持中断。仲裁器只有一个中断线用于中断控制器。仲裁器寄存器处理使能/禁止端点的中断和保持中断状态。仲裁器也负责存储器的管理(比如在数据端点共享512字节的SRAM)。USB总线模块
--USB模块结构(仲裁器)1.SIE接口模块该模块负责处理和SIE模块的所有交易。SIE从SRAM读数据,然后发送到主机。类似的,将来自主机的数据写到SRAM中。在SIE接口登记这些请求,模块来处理它。2.CPU接口模块这个模块处理和CPU的所有交易。CPU提出为每个端点读/写SRAM的请求。这些请求在CPU接口模块被登记,然后由模块来处理。USB总线模块
--USB模块结构(仲裁器)
3.存储器接口存储器接口用于控制USB块和SRAM存储单元之间的接口。最大支持512个字节(256x16位)的存储器容量。这是USB专用的存储器,在USB和存储器单元之间的所有的控制和数据线,包括:数据输入线、数据输出线和使能线,地址线和方向控制线,是由存储器接口来管理的。SIE和CPU都可以请求访问存储器。SIE接口模块和CPU接口模块用来处理这些请求。USB总线模块
--USB模块结构(仲裁器)4.DMA接口当配置DMA后,DMA接口负责在DMA和USB之间的数据来回传输。这个模块支持用于每个数据端点的DMA请求。DMA的行为取决于在配置寄存器中所配置的逻辑传输模式。USB总线模块
--USB模块结构(仲裁器)5.仲裁器逻辑这是仲裁器的主要模块。用于仲裁所有发生在仲裁器的交易。它仲裁CPU,DMA和SIE对存储器和寄存器的访问。这个模块也处理存储器管理。存储器管理可以“手工”或者“自动”。手工模式下,固件处理读写地址的操作。在自动模式下,该模块处理所有的存储器管理。这个模块处理缓冲区大小的分配(取决于USB_BUF_SIZE的设置)。它也处理公共存储区域。USB总线模块
--USB模块结构(仲裁器)这个模块也处理每个端点的中断请求,每个端点的中断来自:DMA授权(DMAGrant)、输入缓冲区满、缓冲区上溢、缓冲区下溢。6.同步化模块USB模块使用两个时钟:系统时钟和USB时钟。仲裁器使用系统时钟,SIE和OsClock模块使用USB时钟。由于这是两个不同的时钟,因此要求同步,这个模块负责处理同步。USB总线模块
--USB模块工作条件
USB模块的工作条件包括:工作频率;工作电压;收发器;下面进行详细的说明。USB总线模块
--USB模块工作条件
1.工作频率最小的时钟频率为24MHz,用于全速操作的USB时钟48MHz(0.25%的误差)。到USB的时钟称为clk_usb,这个时钟来自IMOCLK,IMOCLK*2,PLL或者DSI时钟。
USB的OsClock模块用来确定USB包的频率。USB总线模块
--USB模块工作条件
2.工作电压标准电压范围4.35V-5.25V;低电压范围3.15V-3.45V。USB使用3.3V工作电压。该模块使用数字电压Vccd。支持内部的管理器用于电压的管理。在标准电压围内,电压通过内部的管理器调整到3.3V。
USB_USB_CR1寄存器的reg_enable将用于控制电源管理器的使用。USB总线模块
--USB模块工作条件
3.收发器
USB模块包括收发器。主机和USB之间使用的是差分信号。接收器接收差分信号,然后转换为单端信号。给到
USB模块的单端信号电压范围为1.55V-1.95V。发送器将单端信号转换成差分信号,并且传送给主机。差分信号给到“上游设备”,电压范围0V-3.3V。收发器也支持PS/2信号,能在0V-5V范围内接收/发送PS/2信号。收发器有上拉电阻支持PS/2信号。除了PS/2信号外,收发器还支持CMOS信号。使用USB_USBIO_CR1和USB_USBIO_CR2寄存器来选择PS/2和CMOS模式。USB总线模块
--USB模块工作条件能通过手工方式强迫发送器发送信号。寄存器USB_USBIO_CR0用于手工发送信号。下面给出一个例子:
1)当使能手工发送时,寄存器配置成发送单端0信号(即,D+和D-都为低);
2)可配置发送USB信号,USB信号有两类:
D+低,D-高=J;D+高,D-低=K;
3)寄存器有一位用于读取信号的电平,该位能确认D+<D-还是D+>D-USB总线模块
--逻辑传输模式
PSoC的USB模块支持两种类型的逻辑传输模式,即存储转发和直通模式。逻辑传输使用每个端点的寄存器设置进行配置。任何一种逻辑传输模式都支持三种数据传输(中断、块、同步)。逻辑传输模式是存储器管理与DMA配置的结合。逻辑传输模式和USB模块内的数据传输有关(比如:为端点读/写SRAM存储单元)。它并不代表设备和主机之间的传输方法。USB支持两种基本的逻辑传输模式:存储转发和直通模式。表5.3给出了更详细的USB的传输模式。USB总线模块
--逻辑传输模式USB传输模式特点存储转发模式直通模式SRAM的使用要求更多的存储器要求较少的存储器SRAM的管理手工自动SRAM的共享在端点间共享512字节SRAM,通过固件共享模块自动的为每个端点分配较少的共享存储器。剩余的存储器用于“公共区域”。这个公共区域可以用于传输。IN命令在收到IN命令前,完整的包出现在SRAM中只有收到SRAMIN命令时,存储器才填充数据。当要有足够的可用数据时,数据送给主机(基于DMA传输),而不需要等待填充完整的数据USB总线模块
--逻辑传输模式特点存储转发模式直通模式OUT命令在OUT命令下,整个包写到SRAM中,当整个数据可用时,从SRAM存储器复制到USB设备中。等待足够的字节(取决于DMA配置)写到SRAM存储器。一旦有足够的字节时,立即从SRAM存储器复制到USB设备中数据传输当所有字节写到存储器里,则传输数据当足够字节可用时,传输数据。不需要等待填充整个数据包DMA类型无DMA模式和手工DMA模式只有自动DMA模式支持传输类型适合于中断和块传输适合于同步传输USB传输模式USB总线模块
--逻辑传输模式(存储转发模式)
1.非DMA访问如图(a)所示,给出了非DMA访问的IN(CPU写和SIE读)交易的流程图。如图(b)所示,给出了非DMA访问的OUT(CPU读和SIE写)交易的流程图。USB总线模块
--逻辑传输模式(存储转发模式)2.手工DMA访问这个模式要求配置DMA控制器。这个模式和非DMA访问类似,只不过是DMA执行包的写/读操作。通过设置ARB_EPx_CFG寄存器的DMA_CFG位来产生一个端点的DMA请求。当DMA服务被确认和执行(DMA_GNT),可以通过编程产生一个仲裁器中断。可以使用单或多DMA周期完成传输。当每个DMA周期完成后,产生仲裁器中断。类似的,当所有的数据字节都写到存储器时,产生仲裁器中断,同时设置IN_BUF_FULL位。USB总线模块
--逻辑传输模式(存储转发模式)如图(a)所示,给出了手工DMA访问的IN(CPU写和SIE读)交易的流程图。如图(b)所示,给出了手工DMA访问的OUT(CPU读和SIE写)交易的流程图。USB总线模块
--逻辑传输模式(直通模式)CPU编程初始化用于IN/OUT包所要求初始化缓冲区的大小,并且通知端点仲裁器模块详细的配置信息。块然后控制存储器的分配和处理所有存储器的指针。在存储器分配过程中,每个活动的IN端点(EP_ACTIVE和EP_TYPE寄存器设置)分配BUF_SIZE寄存器所指定的一小块存储空间。剩余的存储器留下作为“公共区域”,用于其它所有的端点。USB总线模块
--逻辑传输模式(直通模式)
在这种模式下,需要的存储器是较少的,适合于全速同步传输,最多1023个字节。当主机发送IN命令时,设备使用在专用存储器区域的数据进行响应。同时为该EP更多的数据产生一个DMA请求。这个数据填充公共区域。不需要等待填充整个数据包。只等到USB_DMA_THRES_MSB和USB_DMA_THRES寄存器指定的在SRAM内可用的数据数量,然后从公共区传输数据。USB总线模块
--逻辑传输模式(直通模式)类似的,当接收到一个OUT命令时,用于输出端点的数据写道了公共区。一旦公共区的数据数量大于USB_DMA_THRES_MSB和USB_DMA_THRES寄存器指定的在SRAM内可用的数据数量时,仲裁器初始化到PHUB的DMA请求,并且数据写道设备中。设备不需要等待填满公共区。USB总线模块
--逻辑传输模式(直通模式)这个模式要求配置USB_DMA_THRES_MSB和USB_DMA_THRES寄存器。类似的,必须配置PHUB寄存器用于BURSCNT的值。BURSCNT的值总是和DMA_THRES寄存器中设置的值相等。当传输数据包的最后一个字节时,向PHUB发送Termin信号。除了DMA寄存器外,该模式还需要配置用于IN和OUT的BUF_SIZE寄存器,EP_ACTIVE和EP_TYPE寄存器。USB总线模块
--逻辑传输模式(直通模式)如图(a)所示,给出了直通模式下的IN(CPU写和SIE读)交易的流程图。如图(b)所示,给出了直通模式下OUT(CPU读和SIE写)交易的流程图。USB总线模块
--逻辑传输模式(控制端点的逻辑传输)控制端点有一个特殊的传输模式。该传输模式不需要共享512个字节的存储器,而是有一个专用的8字节的寄存器缓冲区。如图(a)所示,给出了控制端点逻辑传输的IN(CPU写和SIE读)交易的流程图。如图(b)所示,给出了控制端点逻辑传输的OUT(CPU读和SIE写)交易的流程图。USB总线模块
--逻辑传输模式(PS/2和CMOSI/O模式)
USB收发器能发送其它信号电平。在发送器端点使用上拉电阻,能使用而外的信号电平。配置寄存器USB_USBIO_CR1和USB_USBIO_CR2得到不同的信号电平。在USBIO_CR2寄存器的”test_res”将发送器处于上拉模式。USBIO_CR1寄存器的I/O模式将使USB处理USB模式或者驱动模式。当处于驱动模式下,禁止USB信号,DMI和DPI位用于驱动D-,D+。这儿有两个不同的驱动模式。在CMOS驱动模式下,D+和DMI关联,D-和DPI关联。在开漏模式下,上拉电阻起作用。在这种状态下,当DPI和DMI位设置为高时,D+和D-处于高阻状态。USB总线模块
--逻辑传输模式(PS/2和CMOSI/O模式)独立于驱动模式,可以在Vdd和D+,D-之间接上拉电阻(使用p2puen位)。支持一个内部的1.5kΩ的上拉电阻,通过USBIO_CR1寄存器来使用这个上拉电阻。USBIO_CR1寄存器也用来轮询D+和D-的状态。USB人体学输入设备的实现
--人体接口设备的原理目前,计算机上的RS232和PS2端口绝大多数都被USB端口取代。而且,越来越多的USB设备出现在市场上。对USB设备的建立、配置和使用步骤,是USB设备设计者比较头疼的事情。但实际上USB设备是很容易配置和使用的。人体接口设备(HumanInterfaceDevice,HID)是一种和USB连接的简单接口,有很多令人感兴趣的应用。USB人体学输入设备的实现
--人体接口设备的原理(人体接口概述)
在日常生活中,经常见到HID的应用,典型的是和计算机连接的键盘和鼠标。正如HID这个名字所描述的那样,它是一个设备,用来在人和设备(计算机)之间创建一个接口。由接口描述符实现将一个设备定义成HID。USB人体学输入设备的实现
--人体接口设备的原理(人体接口概述)描述符以结构化的形式提供了,连接到主机设备的相关信息。当把一个USB设备插入计算机时,计算机(主机)通过USB描述符表要求设备的相关信息。通过接口描述符,计算机知道所连接的设备是HID。很多时候,主机要求一个设备所搜集数据的数据报告。为了理解这些信息,一个报告描述符用来定义HID报告内的数据格式,以及如何使用这些数据。USB人体学输入设备的实现
--人体接口设备的原理(人体接口概述)下面给出的一个鼠标的工程,在这个工程中,设备报告按键和X/Y移动的信息。这个信息以主机能理解和使用的格式传递给主机。在报告描述符中,声明了鼠标数据的结构和格式。主机周期性的轮询设备数据;如果设备没有准备好,它不响应(NAK)主机。如果设备准备好,则它响应(ACK)鼠标,并且通过一个中断类型的传输来传输信息。基于前面报告描述符所发送的信息,当主机从设备接收到数据,它理解数据的含义和如何使用数据。USB人体学输入设备的实现
--人体接口设备的原理(人体接口概述)这个过程类似于“老板”和“雇员”。“雇员”(设备)告诉他的“老板”(主机),他将以特定格式的报告,发布他所有的“发现”。这个报告也包含所有要求的信息,这些信息用于解数据,并处理它。所以,在一个指定的时间,比如每10ms,“老板”检查报告是否准备好。如果报告准备好,则“雇员”响应(ACK)“老板”,并且向“老板”发送一个报告,这个报告的格式是先前讨论的格式。由于双方前期讨论了格式,“老板”准确的知道如何处理数据。如果没有准备好报告,则“雇员”不响应“老板”,老板转向下一个“雇员”。由于在报告描述符中包含了很多的信息,下面将详细介绍这个报告描述符。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)HID报告描述符的一个重要的特性是,对于一个相同的设备有几百种方法建立和组织报告。它能包含设备所支持的各种特性的信息,指定了设备数据的组织结构,识别数据是否有一个指数(比如10-3,103),或者指定数据所跟的单位,比如:大小、时间、电流等。最后,报告描述符的目的是报告主机所希望接收和发送的设备和数据信息。报告描述符可以复杂也可以非常简单。在很多情况下,并不能区分出复杂描述符设备和简单描述符设备的区别。虽然表面上看上去非常令人“恐惧”,但是“本质”是很容易理解的。一旦理解了报告描述符,则很容易的创建描述符,并且开始设计自己的HID。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)理解HID报告最容易的方法是分开查看其中的内容。本章给出的例子是建立一个三按键的鼠标。图11.6给出了三按键鼠标的报告描述符。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)这个报告看上去很复杂,但是非常直观。下面将这个报告进行分解。当思考鼠标和它所读取得信息,你将思考按键和光标移动。光标是由X和Y值组成。按键是由按下/释放信息构成。这就是说描述符有一部分用于按键。另一部分用于光标。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)图11.7给出了描述符的详细说明。下面将看看描述符表内的每一行的目的。通过理解每一行,来看每一行属于按键还是光标移动,以及它对数据的影响。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)在HID报告描述符中,这里有多个输入条目(Input)。每个输入条目是一个数据位域,用于告诉逐句将要从鼠标发送的数据。图11.8,11.9和11.10给出了输入条目的配置和每个位域的设置。后面将详细讨论这些位域的设置。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)图11.8给出了输入条目的设置,该设置用于鼠标按键的3位数据。
图11.8用于鼠标按键的3位数据的输入条目的设置图11.8用于鼠标按键的3位数据的输入条目的设置USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)如图11.9所示,为了保留字节剩下的5位,在鼠标按键的高5位补零。由于不想改变数据,因此除了设置比特0位常数外,使用相同的输入条目设置作为按键的设置。图11.9用于鼠标按键的3位数据的输入条目的设置USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)如图11.10所示,最后的输入条目是X和Y轴信息。由于比特位2设置成相对的,主机接收到的信息包含X和Y数据的变化,然后主机根据这个信息相应的修改光标。图11.10用于鼠标X和Y信息的输入条目设置USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)下面将更深入的分析报告描述符,一个报告描述符有下面的三种条目类型:主条目类型全局条目类型本地条目类型区分这些条目类型和一个条目是非常重要的。在前面所给出的三种条目类型下,有很多不同的条目。因为条目描述符可能非常复杂,在这里只讨论通用的条目。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)1.主条目主条目用于定义数据所包含的东西或者将数据分组。主条目中有5种不同的条目,包括:Input、Output、Feature、Collection和EndCollection。Input、Output和Feature用于定义条目Collection和EndCollection用于分组目的。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)一个Input条目指设备发送到主机的数据(比如:点击鼠标按键);一个Ouput条目指主机发送设备的数据(比如:键盘上的CapsLockLED灯)。一个Feature条目是一个信息,这个信息是主机可以发送到设备,并且可以从设备读回。Feature条目包含设备配置信息,修改这个信息将改变设备的行为。PC接口应用程序经常使用Feature报告,在GUI上点击按键将修改设备的操作。
Collection用于将Input、Output和Feature条目分组。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)
在HID规范中,有三种不同类型预定义的集合(Collection),包括:物理(Physical);应用(Application);逻辑(Logic);
USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)一个物理集合是由一个几何点所搜集的数据组成。一个设备在一个时刻从多个传感器收集的数据可以在一个物理分组内分组数据。使用这个集合的一个设备例子是鼠标,它将按键和位置数据进行分组。一个应用集合将单设备内将服务不同或者公共目的的条目进行分组。一个例子是键盘,它将LED和键盘的按键进行分组。一个逻辑集合将不同条目的数据分组来构成一个结构化的数据集合。一个例子是一个数据缓冲区和缓冲数据占用的字节数之间的关系。逻辑集合建立两者之间的连接。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)每个输入、输出和特性条目都有一个PSoCCreator软件设置的8位前缀。一个输入条目有一个前缀’100000nn’,nn是跟随字节的个数。’10100nn’表示一个输出条目,’101100nn’表示一个特性条目。跟随前缀的是最多9个额外的比特位,这是固件开发人员必须设置的,用于描述条目数据。这还有23个额外的比特位,现在保留,用户不可以访问。在这个例子中,在输入条目中,前缀后只有一个字节(8位)。所以输入条目的前缀是0x81。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)注意:这里有9位数据,大于8位数据。如果用户在第8比特位选择“BufferedBytes”,则要求这个额外的位,这将使这位的值为‘1’。前缀变成了0x82,添加一个额外的字节提供额外的数据。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)下面将详细说明条目设置中,每位的设置含义:(1)Data/Constant:Data表示数据是读/写。Constant表示数据是只读的,不能被主机修改。(2)Array/Variable:Array表示只报告当前活动的控制,比如正在按下按键。Variable表示报告每个控制的当前状态,而不考虑按钮是否按下。(3)Absolute/Relative:Absolute表示值基于一个固定的区域。Relative表示值是对于最后一次所读取值的变化。鼠标是一个例子,提供相对的数据。而游戏杆提供的是绝对的数据。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)(4)NoWrap/Wrap:NoWrap表示值超出设定的范围时,报告超出限制的值。Wrap表示,当值一直增加,当到达设置的最大值时,值翻转到最小的值。反之,当值一直减小,当到达设置的最小值时,值翻转到最大的值。当使用Array时,不能使用Wrap。(5)Linear/Non-Linear:Linear表示测量数据,这些报告的数据之间有一个线性关系。当使用Array时,不能设置为Linear。当使用Non-Linear时,来自传感器的非线性曲线的数据就是这样一种情况。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)(6)NoNullPosition/NullState:NoNullPosition表示由控制所发送的任何数据都包含有意义的数据。NullState表示控制可以发送无意义的数据,这个数据由超出所设置的最小和最大范围的值表示。(7)Nonvolatile/Volatile:Nonvolatile表示只有和主机互动,设备才能修改值。Volatile表示设备不需要主机的验证就可以修改值。这位只应用到输出和特性条目。当使用Array时,不能使用Volatile。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)(8)BitField/BufferedBytes:BitField表示字节中的每一位能表示一片具体的数据。BufferedBytes表示数据用一个或多个字节表示。鼠标或键盘时一个使用BitField的例子,而条码器数据使用BufferedBytes。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)2.全局条目和本地条目在前面的报告描述符中,可以看到这些条目,比如:usage,usagepage,logicalminimum等。全局条目用于描述数据,比如它的限制、单位、位大小和数量。本地条目用来定义数据的各种参数,比如:主机使用什么数据,然后将字符串和条目进行关联。这里有两个关键字用来区分全局和本地条目:全局条目“describe”和本地条目“define”。下面简单的介绍本地和全局条目。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)(1)全局条目UsagePage:32位的值用于识别设备执行的一个功能,比如:控制设备或者游戏控制器。高16位是全局UsagePage条目,低16位是本地Usagepage条目。LogicalMaximumandMinimum:定义了在Array或者Variable内,用于报告值的限制。比如:一个鼠标报告位置的值从127到-127,有一个逻辑最大值127和逻辑最小值-127。另一个例子是单状态的按键,或者确认或者释放,有一个逻辑的最小值‘0’和一个逻辑最大值‘1’。ReportSize:确认在输入、输出或者特性条目内位域的大小。ReportCount:确认用于一个输入、输出或者特性条目的数据域的大小。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)(2)本地条目Usage:用于条目或者集合的一个索引,表示它的使用或者功能。一个Usage和一个UsagePage表示低16位。UsageMinimumandMaximum:用于链接UsageID和一个数组或者比特映射的数据UsageMinimum定义了开始点,UsageMaximum定义了结束点。在鼠标工程中,有三个按键,UsageMinimum和UsageMaximum分配ID到按键1(0x01),按键2(0x02)和按键3(0x03)。USB人体学输入设备的实现
--人体接口设备的原理(报告描述符)在一个最小值,报告必须包含下面的条目,其他条目提供了更详细的细节:Input,Output或者FeatureUsageUsagePageLogicalMinimumandMaximumReportSizeReportCountUSB人体学输入设备的实现
--创建和配置工程1.在计算机上的桌面上,选择开始->所有程序->Cypress->PSoCCreator2.0->PsoCCreator2.0。打开PSoCCreator软件;2.在PSoCCreator2.0软件的主界面下,选择File->New->Project...;3.在NewProject窗口,选择EmptyPSoC3Design模板,并将工程命命名为SquareMouse。选择工程保存路径,点击“OK”按钮;
创建和配置工程
--修改系统时钟配置在该设计中,对于USB操作,设备的USB块要求48MHz的时钟,ILO为100kHz。为了得到48MHz的时钟,设置IMO为24MHz,USB时钟为IMO*2。调整PLL,USB和IMO的设置。下面给出配置系统时钟的步骤:1.在WorkspaceExplorer窗口下的Source标签栏下,选择SquareMouse.cydwr,并打开该文件。创建和配置工程
--修改系统时钟配置2.选择Clock标签,出现系统时钟树界面。按照如图11.11所示的界面,配置系统时钟。图11.11时钟配置界面创建和配置工程
--添加并配置USB文件系统USBFS
下面给出添加并配置USBFS的步骤,主要步骤包括:1.拖动并且放置USBFS元件到原理图内(ComponentsCatalog->Communcation->USBFS)。2.双击器件原理图内的USBFS_1打开配置窗口。3.将器件命名为USBFS_1。4.如图11.12,选择HIDDescriptor标签。
创建和配置工程
--添加并配置USB文件系统USBFS图11.12HIDDescriptor配置界面创建和配置工程
--添加并配置USB文件系统USBFS5.下一步选择Co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论