《Cortex-M3开发技术及实践》课件第12章 串行总线USB_第1页
《Cortex-M3开发技术及实践》课件第12章 串行总线USB_第2页
《Cortex-M3开发技术及实践》课件第12章 串行总线USB_第3页
《Cortex-M3开发技术及实践》课件第12章 串行总线USB_第4页
《Cortex-M3开发技术及实践》课件第12章 串行总线USB_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第12章通用串行总线USB-2-本章目标了解USB版本熟悉USB总线结构了解OTG概念熟悉STM32F107的OTG全速控制器了解USB各种状态熟悉HID类设备特点熟悉USB库的移植和使用-3-USB简介

通用串行总线(UniversalSerialBUS,简称USB)是在1994年由英特尔、康柏、IBM和微软等多家公司联合提出,是目前PC机中的标准扩展接口。常用于鼠标、键盘和U盘等PC机的外设,也可用于高速的数据链路。USB版本经历了多年的发展,到现在已经发展为3.0版本。-4-USB简介--USB版本

USB2.0为目前主流的USB版本,有高速、全速和低速三种工作速度。高速是480Mbit/s,全速是12Mbit/s,低速是1.5Mbit/s。其中全速和低速是为兼容USB1.1和USB1.0而设计的。为了统一名称,USB协会取消了USB1.0和1.1的命名,统一采用命名为USB2.0,并用不同的版本加以区别。另外,为解决USB设备互通信问题,有关厂商又开发了USBOTG标准,允许嵌入式系统通过USB接口互相通信。版本速度名称最大电流推出时间USB2.0(原USB1.0)1.5Mbps(192KB/s)低速(Low-Speed)500mA1996年1月USB2.0(原USB1.1)12Mbps(1.5MB/s)全速(Full-Speed)500mA1998年9月USB2.0480Mbps(60MB/s)高速(High-Speed)500mA2000年4月USB3.05Gbps(640MB/s)超速(Super-Speed)900mA2008年11月-5-USB简介--USB版本

USB设备之所以会被大量应用,主要因为具有以下优点:可以热插拔:直接在电脑工作时,就可以将USB电缆插上使用。携带方便:USB接口较小,并且可提供电源,省去了外接电源的麻烦。标准统一:USB是一个统一标准的接口,这样提高了产品的通用性。扩展性好:最高可连接至127个设备。-6-USB简介--USB版本

USB接口

USB采用四线电缆,其中两根是用来传送数据的串行通道,另两根为下游设备提供电源。USB总线会根据外设情况在两种外设模式中自动的动态转换。在USB接口中,信号使用分别标记为D+和D-的双绞线传输标准触点OTG接口触点功能(主机)功能(设备)11VBUS

(4.75-5.25V)VBUS

(4.4-5.25V)22D-(DM)数据信号-33D+(DP)数据信号+4ID协商主机/从机45GND(接地)GND(接地)-7-USB简介--USB版本

虽然USB是一种统一传输规范的总线,但是接口有许多种最常见的就是电脑上用的扁平的,叫做A型口,里面有4根连线,根据谁插接谁分为公母接口,一般线上带的是公口,机器上带的是母口。其它的还有B型和mini型接口,各种USB接口-8-USB简介--总线结构

USB系统采用级联星形拓扑结构,该拓扑由三个基本部分组成:主机(Host)、集线器(Hub)和设备(Device)。主机:也称为根、根结或根hub。每个USB系统只能有一个根集线器,它连接在主控制器上。集线器:它提供“Port”(端口),集线器可为总线提供能源,亦可为自身提供能源。设备:通过端口与总线连接。USB设备同时可做Hub使用。-9-USB简介--总线结构

USB拓扑结构图-10-USB简介--总线结构

USB是基于令牌的总线,主机广播令牌,总线上设备检测令牌中的地址是否与自身相符USB的传输全部由主机发起,共支持四种基本的数据传输模式:控制传输,等时传输,中断传输及数据块传输。这四种传输模式特点如下:控制(Control)传输类型:支持外设与主机之间的控制、状态、配置等信息的传输,为外设与主机之间提供一个控制通道。等时(Lsochronous)传输类型:支持有周期性,有限的时延和带宽且数据传输速率不变的外设与主机间的数据传输。中断(Interrupt)传输类型:与主机间数据传输量小,无周期性,但对响应时间敏感,要求马上响应。数据块(Bulk)传输类型:外设与主机间传输的数据量大,USB在满足带宽的情况下才进行该类型的数据传输。-11-USB简介--USBHID类设备

HID是HumanInterfaceDevice的缩写,HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备,有以下特点。交换的数据存储在称为报表(report)的结构内,设备的内部程序必须支持HID报表。每一笔事务可以携带小量或中量的数据。低速设备每一笔事务最大是8个字节,全速设备每一笔事务最大是64个字节,高速设备每一笔事务最大是1024个字节。设备可以在不确定的时间传送信息给主机,主机会定时轮询设备,来取得最新的数据。-12-USB简介--USBHID类设备

使用HID设备的一个好处,就是操作系统自带了HID类的驱动程序,而用户无需去开发很麻烦的驱动程序,只要直接使用API调用即可完成通信。不过,HID设备也有其固有的缺点,那就是数据只能使用中断或控制传输。由于对中断传输查询的时间间隔最小为一个帧,因而HID设备速度受到了限制。对于一些数据量较少的场合(例如按键输入、LED显示等),使用用户自定义的HID设备是很合适的。-13-USB简介--USBOTG

USBOTG是USBOn-The-Go的缩写,主要应用于各种不同的设备或移动设备间的连接,进行数据交换。On-The-Go,即OTG技术,可以实现在没有主机的情况下,“从设备”间的数据传送。新的标准适用于设计小巧的连接器和电缆。在传统的周边设备上,增加了Host能力,适应点到点的连接。这种能力可以在两个设备间动态地切换。低的功耗,保证USB可以在电池供电情况下工作。

-14-USB协议基础

--USB逻辑组织在USB设备的逻辑组织中,包括设备、配置、接口和端点四个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点。设备

设备代表一个USB设备,它由一个或多个配置组成。设备描述符用于说明设备的总体信息,并指明其所含的配置的个数。一个USB设备只能有一个设备描述符。-15-USB协议基础

--USB逻辑组织配置

一个USB设备可以包含一个或多个配置在使用USB设备前,必须为其选择一个合适的配置配置描述符用于说明USB设备中各个配置的特性,如配置所含接口的个数等USB设备的每一个配置都必须有一个配置描述符-16-USB协议基础

--USB逻辑组织接口

一个配置可以包含一个或多个接口接口是端点的集合,可以包含一个或多个设置,用户能够在USB处于配置状态时,改变当前接口所含的个数和特性。接口描述符用于说明USB设备中各个接口的特性,如接口所属的设备类及其子类等。USB设备的每个接口都必须有一个接口描述符。-17-USB协议基础

--USB逻辑组织端点

端点(endpoint)是USB设备中的实际物理单元,USB数据传输就是在主机和USB设备各个端点之间进行的。端点一般由USB接口芯片提供。USB设备中的每一个端点都有唯一的端点号,每个端点所支持的数据传输方向一般是确定的:输入(IN)或输出(OUT),也有些芯片提供的端点的数据方向是可以配置的。利用设备地址、端点号和传输方向就可以指定一个端点,并和它进行通信。但是,0号端点比较特殊,它有数据输入IN和数据输出OUT两个物理单元,且只能支持控制传输。

-18-USB协议基础

--USB逻辑组织管道

在USB系统结构中,可以认为数据传输是在主机软件和USB设备的各个端点之间直接进行的,它们之间的连接称为管道。管道是在USB设备的配置过程中建立的。管道是对主机和USB设备间通信流的抽象,它表示主机的数据缓冲区和USB设备的端点之间存在着逻辑数据传输,而实际的数据传输是由USB总线接口层来完成的。管道和USB设备中的端点一一对应。如中断端点对应中断管道,且该管道只能进行中断传输。不论存在着多少条管道,在各个管道中进行的数据传输都是相互独立的。-19-USB协议基础

--包包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP)同步字段(SYNC)PID字段数据字段CRC字段包结尾字段(EOP)SYNC字段

由8位组成,作为每个数据封包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为00000001。-20-USB协议基础

--包PID字段用来表示数据封包的类型。包标识符中的校验字段是通过对类型字段的每个位求反码产生的,PID字段PID0PID1PID2PID3PID0PID1PID2PID3-21-USB协议基础

--包数据字段用来携带主机与设备之间要传递的信息,其内容和长度根据包标识符、传输类型的不同而各不相同。在USB包中,数据字段可以包含设备地址、端点号、帧序列号以及数据等内容。设备地址(ADDR)数据域:由7位组成,可用来寻址多达127个外围设备。端点(ENDP)数据域:由4位组成。通过这4个位最多可寻址出32个端点。帧序列号:当USB令牌包的PID为SOF时,其数据字段必须为11位的帧序列号。数据:仅存于DATA信息包内,根据不同的传输类型,拥有不同的字节大小,从0到1023字节(实时传输)。-22-USB协议基础

--包循环冗余码CRC字段根据不同的信息包类型,CRC数据域由不同数目的位所组成。其中重要的数据信息包采用CRC16的数据域(16个位),而其余的信息包类型则采用CRC5的数据域(5个位)。-23-USB协议基础

--包包结尾字段即发送方在包的结尾发出的包结尾信号。USB主机根据EOP结束符判断数据包的结束。包结尾信息包的类型,包括令牌、数据、握手和特殊四种信息包类型封包类型PID名称PID编码意义令牌OUT0001B从主机到设备的数据传输IN1001B从设备到主机的数据传输SOF0101B帧的起始标记与帧码SETUP1101B从主机到设备表示要进行控制传输数据DATA00011B偶数数据封包DATA11011B奇数数据封包握手ACK0010B接收器收到无错误的数据封包NAK1010B接收器无法接收数据或发射器无法送出数据STALL1110B端点产生停滞的状况特殊PRE1100B使能下游端口的USB总线的数据传输切换到低速的设备-24-USB协议基础

--包令牌(token)包

在USB系统中,只有主机才能发出令牌包。令牌包定义了数据传输的类型,它是事务处理的第一阶段。令牌包中较为重要的是SETUP、IN和OUT这三个令牌包。它们用来在根集线器和设备端点之间建立数据传输。一个IN包用来建立一个从设备到根集线器的数据传输一个OUT包用来建立从根集线器到设备的数据传输。8位8位7位4位5位SYNCPIDPIDADDRENDPCRC5-25-USB协议基础

--包数据(data)包数据包包含有4个域:SYNC、PID、DATA与CRC16。DATA数据域的位值是根据USB设备的传输速度及传输类型而定,且须以8字节为基本单位。8位8位0-1023位1位SYNCPIDPIDDATACRC16-26-USB协议基础

--事务在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)。事务处理的类型包括输入(IN)事务处理、输出(OUT)事务处理、设置(SETUP)事务处理和帧开始、帧结尾等类型。在输出(OUT)事务处理和设置(SETU)事务处理中,紧接着SETUP和OUT包后的是DATA包,DATA0和DATA1包是交替地发送的。在DATA包后面,设备将回应一个握手信号,如果设备可以接收数据,就回应ACK包;如果设备忙,就回应NAK包,如果设备出错,则回应STALL包。-27-USB协议基础

--事务在IN事务中,IN包后面是设备发来的DATA包或NAK包或STALL包,若设备忙或出错,就发NAK包或STALL包给主机;若设备数据准备好发送,则发DATA包,DATA0和DATA1包也是交替地发送的,紧接着DATA包后面是主机发给设备的握手包。ACK表示主机可以接收数据,NAK包代表主机忙,STALL包代表主机出错。

-28-USB协议基础

--描述符USB描述符详细地记录着外围设备相关的一切信息。为了描述不同的数据,就需以不同类型的USB描述符来加以描述它共有以下几种类型:设备描述符、配置描述符、接口描述符和端点描述符,这几个描述符是必须具有的。每种描述符都有自己独立的编号定义如下:#defineDEVICE_DESCRIPTOR 0x01//设备描述符#defineCONFIGURATION_DESCRIPTOR0x02//配置描述符#defineSTRING_DESCRIPTOR 0x03//字符串描述符#defineINTERFACE_DESCRIPTOR0x04//接口描述符#defineENDPOINT_DESCRIPTOR0x05//端点描述符-29-USB协议基础

--描述符设备描述符

设备标识符主要描述了设备的类型代码、协议和厂商等信息,通常用结构体来存储,定义如下。【结构体12-1】

struct_DEVICE_DCESCRIPTOR_STRUCT//定义标准的设备描述符结构typedefstruct_DEVICE_DCESCRIPTOR_STRUCT{ BYTEblength;//设备描述符的字节数大小

BYTEbDescriptorType;//设备描述符类型编号

WORDbcdUSB;//USB版本号

BYTEbDeviceClass;//USB分配的设备类代码

BYTEbDeviceSubClass;//USB分配的子类代码

BYTEbDeviceProtocol;//USB分配的设备协议代码

BYTEbMaxPacketSize0;//端点0的最大包大小

WORDidVendor;//厂商编号

WORDidProduct;//产品编号

WORDbcdDevice;//设备出厂编号

BYTEiManufacturer;//设备厂商字符串的索引

BYTEiProduct;//描述产品字符串的索引

BYTEiSerialNumber;//描述设备序列号字符串的索引

BYTEbNumConfigurations;//可能的配置数量}-30-USB协议基础

--描述符配置描述符配置标识符主要描述了设备配置情况和接口数量等信息,通常用结构体来存储,定义如下。【结构体12-2】

struct_CONFIGURATION_DESCRIPTOR_STRUCT//定义标准的配置描述符结构typedefstruct_CONFIGURATION_DESCRIPTOR_STRUCT{ BYTEbLength;//配置描述符的字节数大小

BYTEbDescriptorType;//配置描述符类型编号

WORDwTotalLength;//此配置返回的所有数据大小

BYTEbNumInterfaces;//此配置所支持的接口数量

BYTEbConfigurationValue;//Set_Configuration命令所需要的参数值

BYTEiConfiguration;//描述该配置的字符串的索引值

BYTEbmAttributes;//供电模式的选择

BYTEMaxPower;//设备从总线提取的最大电流}-31-USB协议基础

--描述符接口描述符接口标识符主要描述了接口的类型、编号和端点数量等信息,通常用结构体来存储,定义如下。【结构体12-3】

struct_INTERFACE_DESCRIPTOR_STRUCT//定义标准的接口描述符结构typedefstruct_INTERFACE_DESCRIPTOR_STRUCT{ BYTEbLength;//接口描述符的字节数大小

BYTEbDescriptorType;//接口描述符的类型编号

BYTEbInterfaceNumber;//该接口的编号

BYTEbAlternateSetting;//备用的接口描述符编号

BYTEbNumEndpoints;//该接口使用的端点数,不包括端点0 BYTEbInterfaceClass;//接口类型

BYTEbInterfaceSubClass;//接口子类型

BYTEbInterfaceProtocol;//接口遵循的协议

BYTEiInterface;//描述该接口的字符串索引值}-32-USB协议基础

--描述符端点描述符端点标识符主要描述了类型、属性和包长等信息,通常用结构体来存储,定义如下:【结构体12-4】

struct_ENDPOINT_DESCRIPTOR_STRUCT//定义标准的端点描述符结构typedefstruct_ENDPOINT_DESCRIPTOR_STRUCT{ BYTEbLegth;//端点描述符字节数大小

BYTEbDescriptorType;//端点描述符类型编号

BYTEbEndpointAddress;//端点地址及输入输出属性

BYTEbmAttributes;//端点的传输类型属性

WORDwMaxPacketSize;//端点收、发的最大包大小

BYTEbInterval;//主机查询端点的时间间隔}-33-USB协议基础

--枚举设备枚举可以简单地概括为这样的一个过程:主机通过USB设备请求来取得设备描述符并对该设备进行配置。该过程可以简化为如下5个步骤:使用预设的地址0取得设备描述符。设置设备的新地址。使用新地址取得设备描述符。取得配置描述符。设置配置描述符。设备枚举使用的是控制传输。-34-STM32F107的USBOTG

STM32F107内置一个OTG_FS双重角色设备控制器,支持主机和设备的功能,完全遵从On-The-GoSupplementtotheUSB2.0规范。同时,该控制器也可配置为仅支持主机或仅支持设备功能的控制器,遵从USB2.0规范。-35-STM32F107的USBOTG--通用功能STM32F107的OTG_FS控制器接口有一些通用功能如下:由USB-IF认证,符合UniversalSerialBusSpecification,Revision2.0标准。完全支持在(OTG_FS控制器的物理层(PHY))USBOn-The-GoSupplement,Revision1.3规范中定义为可选项目OTG协议。对插入的A/B类设备的辨认(ID线)。支持主机协商协议(HNP)和会话请求协议(SRP)。在OTG应用中,允许主机关闭VBUS以节省耗电。OTG控制器使用内部比较器监视VBUS电平。-36-STM32F107的USBOTG--OTG全速控制器STM32F107的OTG全速控制器原理框图-37-STM32F107的USBOTG--OTG全速控制器各部分功能如下:电源和时钟控制:USBOTG全速控制器从复位和时钟控制模块(RCC)获得由外部晶振产生的48MHz±0.25%的时钟Cortex-M3核心:微控制器内核(CPU)通过AHB外设总线来访问OTG全速控制器的寄存器USB2.0OTGFS:微控制器以向OTG_FS专用地址(PUSH寄存器)写32位数据的方式向USB控制器传输数据1.25K字节USB数据FIFO:微控制器通过读OTG_FS的专用地址(POP寄存器)获得来自USB总线的32位数据OTGFSPHY:USB协议层由串行接口控制器(SIE)驱动,并连接到由内置物理层(PHY)支持的USB全速/低速收发模块。-38-STM32F107的USBOTG--全速OTGPHY(物理接口)内置的全速OTGPHY由OTG全速控制器控制,为USB通信提供了物理层的支持。包括以下部分:在主机和设备模式下使用的全速/低速收发模块。内置了ID线的上拉电阻,用于区分A/B类设备。DP/DM线内置了上拉和下拉电阻,由OTG_FS控制器控制以满足当前设备类型的需求。上拉和下拉电阻可以在控制器通过主机协商协议(HNP)切换角色类型时动态的切换。上拉/下拉电阻的ECN电路。内置带迟滞功能的VBUS探测比较器,用于检测VBUS的有效电平、A-B会话有效电平和会话结束电平。VBUS脉冲电路用于在SRP期间通过电阻对VBUS进行充电/放电操作(弱驱动)。-39-STM32F107的USBOTG--ID信号检测主机和设备(默认)的角色由ID线的状态定义。ID线的状态在连入USB总线的一瞬间决定,并取决于插入micro-AB插座的USB电缆。如果插入的是USB电缆的B端,并且ID线浮空,内置的上拉电阻将检测到ID线的高电平,此时控制器处于默认的设备模式下。如果插入的是USB电缆的A端,并且ID线接地。此时,OTG_FS控制器将执行一个ID线状态改变中断,自动切换到主机模式,并需要软件初始化主机模式。-40-STM32F107的USBOTG--上电状态VBUS线上检测到B类设备有效的电平后,USB设备进入上电状态。OTG_FS控制器将自动使能DP线上的上拉电阻以告知主机接入了一个全速设备,并产生一个会话请求中断,标志进入上电状态。主机在整个USB通信阶段都需要提供有效的VBUS电平。如果检测到VBUS线上的电平低于B类有效电平,OTG_FS控制器将自动断开USB连接,并产生会话结束中断,标志控制器退出上电状态。上电状态时,OTG_FS控制器期望从主机接收复位信号,其它USB操作都是无效的。当接收到复位信号后,会产生复位中断。复位完成后,会产生枚举中断,标志OTG_FS控制器进入默认状态。-41-STM32F107的USBOTG--软件断开可以使用软件来配置退出上电状态。设置设备控制寄存器的软件断开位可以移除DP线上的上拉电阻,从而使主机即使在USB电缆依然连接时,也能识别到一个设备断开事件。-42-STM32F107的USBOTG--默认状态在默认状态下,OTG_FS控制器期望接收到SET_ADDRESS命令,此时其它操作都是无效的。当接收到一个有效的SET_ADDRESS命令后,应用程序需要将相关的地址写入设备配置寄存器的设备地址位中。OTG_FS控制器进入地址状态,并准备好响应主机发向这个地址的传输。-43-STM32F107的USBOTG--挂起状态OTG_FS控制器持续的检测USB线上的活动。在检测到3ms的USB空闲状态后,将产生早期挂起中断,在3ms后产生挂起中断确认挂起。设备状态寄存器的设备挂起位将自动置位,OTG_FS控制器进入挂起状态。设备可以自发的脱离挂起状态,可以通过置位设备控制寄存器的远程唤醒信号位,并在1到15ms之间清除该位来实现。当检测到主机发出恢复信号,会产生恢复中断,同时设备的挂起位被自动清除。-44-STM32F107的USBOTG--设备端点OTG_FS控制器支持三种USB端点,控制端点0、3个IN端点和3个OUT端点,其特点如下:

控制端点0双向端点仅用于处理控制信息。对于IN和OUT两个方向,各有一套独立的寄存器来控制。包括控制寄存器,传输配置寄存器,和状态中断寄存器。3个IN端点

每个端点都可以配置为同步、块传输或中断传输。每个端点都有控制寄存器,传输配置寄存器和状态中断寄存器。设备IN端点通用中断屏蔽寄存器用于使能/禁止所有IN端点(包括端点0)上任一类型的端点中断源支持未完成的同步IN传输中断,在当前帧有至少一个同步IN传输未完成时,会产生该中断。3个OUT端点

每个端点都可以配置为同步、块传输或中断传输。每个端点都有控制寄存器,传输配置寄存器和状态中断寄存器。设备OUT端点通用中断屏蔽寄存器用于使能/禁止所有OUT端点(包括端点0)上任一类型的端点中断源。支持未完成的同步OUT传输中断,在当前帧有至少一个同步OUT传输未完成时,会产生该中断。-45-STM32F107的USBOTG--端点配置通过设置端点IN/OUT控制寄存器可以实现以下对端点的配置:端点使能/禁止。在当前配置中激活端点。配置USB传输类型(同步,块传输,中断)。配置最大USB数据包长度。配置与IN端点相关的发送FIFO编号。配置期望收到的或将发送的PID包DATA0/DATA1(仅对块传输和中断传输有效)。配置需要发送或接收的传输帧的奇/偶帧(仅对同步传输有效)。可选的配置:设置NAK位,无论FIFO的状态如何都回应主机NAK。可选的配置:设置STALL位,对主机发送的任何命令都回应STALL。可选的配置:设置OUT端点SNOOP模式,对于接收到的数据不检验CRC。

-46-STM32F107的USBOTG--端点传输端点传输

设备端点传输配置寄存器用于配置传输长度和读取传输状态。需要配置的传输参数如下:以字节为单位的单次传输的长度。完成整个传输的USB数据包的数目。-47-STM32F107的USBOTG--端点状态/中断设备端点状态/中断寄存器指示了端点与USB和AHB相关的事件状态。设备控制器提供以下的状态位和中断事件:传输完成中断,指示了在AHB和USB方面的数据传输都完成了。SETUP阶段完成(仅对控制端点有效)。相关的传输FIFO已经半空或者全空(IN端点)。已发送NAK响应至主机(仅对同步IN传输有效)。当发送FIFO为空时,主机发出了IN请求(仅对块传输IN/中断IN传输有效)。在端点没有使能时,主机发出了OUT请求。检测到串扰错误。软件禁止了端点。软件将端点状态设为NAK(仅对同步IN传输有效)。收到超过3个连续的SETUP包(仅对控制OUT传输有效)。检测到超时错误(仅对控制IN传输有效)。同步OUT包丢失,没有产生中断。-48-STM32F107的USBOTG--设备SOF在设备模式下,每次在USB线上收到SOF(帧头标志符)时,都将产生帧头中断。可以从设备状态寄存器中读出当前帧号。此时,会产生一个宽度为12个系统时钟周期的SOF脉冲信号,通过使能全局控制和配置寄存器的SOF输出使能位可以在SOF引脚上输出这个脉冲信号。SOF脉冲信号同样在内部连接到定时器2(TIM2)的触发输入端,此时输入捕获,输出比较和定时器都可以被SOF脉冲触发。周期性帧结束中断用来告知应用程序,80%,85%,90%或95%的帧已经完成,此间隔取决于设备配置寄存器的帧间隔位。此功能用于判断一个帧内所有的同步传输是否都已经完成。-49-STM32F107的USBOTG--供电选项OTGPHY的耗电由“USB控制器的配置寄存器”的以下3位决定:PHY供电位:切换PHY全速收发器模块的开/关。必须预先设置才能允许USB通信。A类VBUS监控使能位:切换A类设备VBUS比较器的开/关。在A类设备模式时(USB主机),在HNP阶段必须使能该位。B类VBUS监控使能位:切换B类设备VBUS比较器的开/关。在B类设备模式时(USB设备),在HNP阶段必须使能该位。-50-STM32F107的USBOTG--USB数据FIFOUSB系统规划了1.25K字节的专用RAM用于FIFO的管理。OTG_FS控制器的FIFO控制器(PFC)模块将此RAM划分为发送FIFO区域和接收FIFO区域,应用程序将数据暂时缓存到发送FIFO中,等待发送,而从USB总线上收到的数据则暂时缓存在接收FIFO中,等待应用程序读取。实际的FIFO数量及如何在专用RAM中规划这些FIFO都由实际的应用决定。-51-STM32F107的USBOTG--OTG_FS中断无论OTG_FS控制器工作在设备模式还是主机模式,应用程序都不能访问另一个模式下的寄存器组。如果应用程序有非法的访问,会产生模式不匹配中断并影响“控制器的中断寄存器”的相应位。当控制器从一种模式切换到另一种模式时,新模式下的寄存器组都需要和上电复位时一样的重新初始化。-52-USBOTG固件库

在STM32的官方固件库中,并没有提供驱动USB的库函数,需要从ST官网下载单独的USB固件库。该固件库为一个压缩包,名为stm32_f105-07_f2_f4_usb-host-device_lib.zip-53-USBOTG固件库--STUSB固件库文档结构

-54-USBOTG固件库--STUSB固件库文档结构

该固件库共有四个文件夹,分别为_htmresc、Libraries、Project和UtilitiesLibraries该文件夹有七个子文件夹,分别是CMSIS、各系列外设库和各版本USB固件库。CMSIS文件夹中包含CM3相关的说明和代码,代码分为内核级和设备级。STM32F10x_StdPerph_Driver文件夹为STM32F1系列的外设固件库STM32F20x_StdPerph_Driver文件夹为STM32F2系列的外设固件库STM32F40x_StdPerph_Driver文件夹为STM32F4系列的外设固件库STM32_USB_Device_Library文件夹为USB设备类的库函数。STM32_USB_Host_Library文件夹为USB主机类的库函数。STM32_USB_OTG_Driver文件夹为USBOTG类的驱动和库函数。-55-USBOTG固件库--STUSB固件库文档结构

由于USB的特点,又分为各种类型,所以在USB固件库中也进行了分类其中,最主要的是STM32_USB_Device_Library、STM32_USB_Host_Library和STM32_USB_OTG_Driver三个文件夹,其各自含义文件夹AudioCdcDfuHidMscCoreSTM32_USB_Device_Library音频类通信设备类固件升级人机接口设备大容量存储核心STM32_USB_Host_Library人机接口设备大容量存储STM32_USB_OTG_Driver

OTG驱动-56-USBOTG固件库--USB开发模板

下述内容用于实现任务描述12.D.1,在USB固件库基础上,实现一个USB开发模板,具体步骤如下。1.添加新文件夹在已经建立的开发模板中的Library文件夹中,加入STM32_USB_Device_Library、STM32_USB_Host_Library和STM32_USB_OTG_Driver三个文件夹,结构如图12-7所示。-57-USBOTG固件库--USB开发模板

下述内容用于实现任务描述12.D.1,在USB固件库基础上,实现一个USB开发模板,具体步骤如下。2.编辑MDK工程目录打开MDK在工程目录中添加两个组,命名为usbd_lib和usbd_driver,添加后如图12-8所示。-58-USBOTG固件库--USB开发模板

下述内容用于实现任务描述12.D.1,在USB固件库基础上,实现一个USB开发模板,具体步骤如下。3.在usbd_lib组中添加文件在usbd_lib组中添加usbd_hid_core.c、usbd_core.c、usbd_ioreq.c和usbd_req.c四个文件,它们来自Libraries\STM32_USB_Device_Library\Core\src文件夹下。-59-USBOTG固件库--USB开发模板

下述内容用于实现任务描述12.D.1,在USB固件库基础上,实现一个USB开发模板,具体步骤如下。4.在usb_driver组中添加文件在usb_driver组中添加usb_dcd_int.c、usb_core.c和usb_dcd.c三个文件,它们来自Libraries\STM32_USB_OTG_Driver\src文件夹下。添加完成后的结构如图12-9所示:-60-USBOTG固件库--USB开发模板

下述内容用于实现任务描述12.D.1,在USB固件库基础上,实现一个USB开发模板,具体步骤如下。5.在user组中添加文件在user组中添加usb_conf.h、usbd_conf.两个文件,它们来自STM32_USB-Host-Device_Lib_V2.1.0\Project\USB_Device_Examples\HID\inc文件夹。再添加usbd_desc.c和usbd_usr.c两个文件,它们来自STM32_USB-Host-Device_Lib_V2.1.0\Project\USB_Device_Examples\HID\src文件夹,添加的结构如图12-10所示:-61-HID类设备开发模板--开发模板修改

本节内容将实现任务描述12.D.2,在USB开发模板的基础上,实现一个HID类开发模板。对USB开发模板进行调整,将stm32组中的stm32f10x_it.c文件内容替换为如下代码:

【描述12.D.2】stm32f10x_it.c/*头文件*/#include"stm32f10x_it.h"#include"usb_core.h"#include"usbd_core.h"#include"usbd_hid_core.h"#include"usb_conf.h"/*宏定义*/#defineCURSOR_STEP10/*变量声明*/__IOuint32_tremote_wakeup=0;externUSB_OTG_CORE_HANDLEUSB_OTG_dev;externuint32_tUSBD_OTG_ISR_Handler(USB_OTG_CORE_HANDLE*pdev);/*USB唤醒中断*/voidOTG_FS_WKUP_IRQHandler(void){ if(USB_OTG_dev.cfg.low_power) { /*复位SLEEPDEEP和SLEEPONEXIT位*/ SCB->SCR&=(uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk|SCB_SCR_SLEEPONEXIT_Msk)); SystemInit(); USB_OTG_UngateClock(&USB_OTG_dev); } EXTI_ClearITPendingBit(EXTI_Line18);}/*USB中断*/voidOTG_FS_IRQHandler(void){ USBD_OTG_ISR_Handler(&USB_OTG_dev);}-62-HID类设备开发模板--开发模板修改

本节内容将实现任务描述12.D.2,在USB开发模板的基础上,实现一个HID类开发模板。将main.c文件内容替换为如下代码:【描述12.D.2】main.c/*头文件*/#include "stm32f10x.h"#include "usbd_hid_core.h"#include "usbd_usr.h"#include "usbd_desc.h"/*根据编译器,字节对齐*/#ifdefUSB_OTG_HS_INTERNAL_DMA_ENABLED#ifdefined(__ICCARM__)/*!<IARCompiler*/#pragmadata_alignment=4

#endif#endif/*USB_OTG_HS_INTERNAL_DMA_ENABLED*/__ALIGN_BEGINUSB_OTG_CORE_HANDLEUSB_OTG_dev__ALIGN_END;voidUSB_Config(void);voidUSB_OTG_BSP_uDelay(constuint32_tusec);voidUSB_OTG_BSP_mDelay(constuint32_tmsec);intmain(void){ /*USB相关配置*/ USB_Config(); /*USB设备初始化*/ USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_HID_cb, &USR_cb); while(1) {}}-63-HID类设备开发模板--主要函数

本节内容将实现任务描述12.D.2,在USB开发模板的基础上,实现一个HID类开发模板。在main.c文件中的USB_Config()函数用来对USB的相关硬件和中断进行配置,源码如下。【描述12.D.2】

USB_Config()voidUSB_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论