打印
[应用相关]

STM32 USB驱动

[复制链接]
9095|66
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenqiang10|  楼主 | 2018-8-29 15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前,ST的USB驱动有两套,一套是早期的独立版USB驱动,官方培训文档中称为Legacy library,最新版为2.2.0;一套为针对其Cube系列的驱动,根据芯片不同可能有区别,具体见对应芯片的Cube驱动包,官方培训文档中称为Cube library。 本文使用的为Legacy libraryUSB驱动。
沙发
chenqiang10|  楼主 | 2018-8-29 15:25 | 只看该作者
USB(Universal Serial Bus) 是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据。在USB 1.0和 USB 1.1 版本中,只支持1.5Mb/s 的低速(low-speed)模式和 12Mb/s 的全速(full-speed)模式,在USB 2.0中,又加入了480Mb/s的高速模式,USB 3.0(super speed),传输速率最大5Gbps。USB 2.0 被设计成为向下兼容的模式,当有全速(USB 1.1)或者低速(USB 1.0)设备连接到高速(USB 2.0)主机时,主机可以通过分离传输来支持它们。一条USB 总线上,可达到的最高传输速度等级由该总线上最慢的“设备”决定。

使用特权

评论回复
板凳
chenqiang10|  楼主 | 2018-8-29 15:26 | 只看该作者
USB 体系包括USB host(主机)、USB device(设备)以及物理连接(USB interconnect)三个部分。其中,设备(USB device)又分为 USB function和USB Hub。

使用特权

评论回复
地板
chenqiang10|  楼主 | 2018-8-29 15:26 | 只看该作者
SB host: 任何USB系统中只有一个主机。 主机系统的USB接口被称为主机控制器。 主机控制器可以以硬件,固件或软件的组合来实现。 根集线器集成在主机系统内以提供一个或多个连接点。

使用特权

评论回复
5
chenqiang10|  楼主 | 2018-8-29 15:27 | 只看该作者
USB device: 可以分为

USB Hub: USB HUB提供了一种低成本、低复杂度的USB接口扩展方法。HUB的上行PORT面向HOST,下行PORT面向设备(HUB或功能设备)。在下行PORT上,HUB提供了设备连接检测和设备移除检测的能力,并给各下行PORT供电。HUB可以单独使能各下行PORT。不同PORT可以工作在不同的速度等级(高速/全速/低速)。

使用特权

评论回复
6
chenqiang10|  楼主 | 2018-8-29 15:28 | 只看该作者
USB function: 能够通过总线传输或接收数据或控制信息的设备,在USB2.0标准中,别成为Clas。
主要有以下三类:

A human interface device such as a mouse, keyboard, tablet, or game controller
An imaging device such as a scanner, printer, or camera
A mass storage device such as a CD-ROM drive, floppy drive, or DVD drive

使用特权

评论回复
7
chenqiang10|  楼主 | 2018-8-29 15:29 | 只看该作者
USB interconnect: USB设备连接到主机并与之通信的方式。主要由以下三部分:

Bus Topology: USB上的设备通过分层的星形拓扑物理连接到主机,如下图所示。 USB连接点由称为集线器的特殊类别的USB设备提供。 集线器提供的附加连接点称为端口。 主机包括称为根集线器的嵌入式集线器。 主机通过根集线器提供一个或多个连接点。 为主机提供附加功能的USB设备称为功能。 为了防止循环附件,USB层的星形拓扑结构上采用了分层排序。USB设备和主机之间的连接模型
Inter-layer Relationships: 就功能堆栈而言,是系统中每层执行的USB任务。

Data Flow Models: 数据在生产者和消费者之间通过USB在系统中移动的方式。

使用特权

评论回复
8
chenqiang10|  楼主 | 2018-8-29 15:31 | 只看该作者
USB电器特性

  该部分主要针对USB 2.0规范的第六章和第七章。在USB 2.0系统中要求USB传输线使用屏蔽双绞线。USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下,设备最多可以获得500mA 的电流。一条USB传输线分别由地线、电源线、D+和D-四条线构成,D+和D-是差分输入线。它使用的是3.3V的电压(与CMOS的5V电平不同),而电源线和地线可向设备提供 5V 电压,最大电流为500mA (可以在编程中设置)。

使用特权

评论回复
9
chenqiang10|  楼主 | 2018-8-29 15:31 | 只看该作者
在USB2.0规范中,定义了以下一些电平信号:

差分信号1:D+>2.8V,D-<0.3V;
差分信号0:D->2.8V,D+<0.3V。
J 状态和 K 状态
  低速下:D+ 为“0”,D- 为“1”是为“J”状态,“K”状态相反;
  全速下:D+ 为“1”,D- 为“0”是为“J”状态,“K”状态相反;
  高速同全速。
SE0 状态:D+为“0”,D- 为“0”
IDLE 状态
  低速下空闲状态为“K”状态;
  全速下空闲状态为“J”状态;
  高速下空闲状态为“SE0”状态。
针对低速 / 全速模式,有以下几个重要信号:

Reset 信号:主机在要和设备通信之前会发送Reset信号来把设备配置到默认的未配置状态。即 SE0 状态保持10ms。
Resume 信号:20ms的 K 状态 + 低速 EOP

使用特权

评论回复
10
chenqiang10|  楼主 | 2018-8-29 15:32 | 只看该作者
USB 通信协议

  以下部分主要根据 USB 2.0 规范的第八章。数据在USB线里传送是由低位到高位发送的。USB采用NRZI(非归零编码)对发送的数据包进行编码。即:输入数据0,编码成“电平翻转”;输入数据1,编码成“电平不变”。
  USB采用不归零取反来传输数据,当传输线上的差分数据输入0时就取反,输入1时就保持原值,为了确保信号发送的准确性,当在USB总线上发送一个包时,传输设备就要进行位插入操作(即在数据流中每连续6个1后就插入一个0),从而强迫NRZI码发生变化。接收方解码NRZI码流,然后识别出填充位,并丢弃它们。这些是由专门硬件处理的。

使用特权

评论回复
11
chenqiang10|  楼主 | 2018-8-29 15:32 | 只看该作者
USB 数据格式

  USB数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。下面介绍一下域、包和事务。
  USB协议规定了四种传输(transfer)类型:批量传输、同步传输、中断传输和控制传输。其中,批量传输、同步传输和中断传输每传输一次数据都是一个事务,控制传输包括三个过程,建立过程和状态过程分别是一个事务,数据过程则可能包含多个事务。

使用特权

评论回复
12
chenqiang10|  楼主 | 2018-8-29 15:32 | 只看该作者
域(Field)

  域一个包被分为不同域,域是USB数据最小的单位,由若干位组成(多少位由具体的域决定)。根据不同类型的包,所包含的域是不一样的。但都要以同步域SYNC开始,紧跟一个包标识符PID,最终以包结束符EOP 来结束这个包。

使用特权

评论回复
13
chenqiang10|  楼主 | 2018-8-29 15:33 | 只看该作者
包(Packet)

  包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。
  包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。
  由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包,前面三种是重要的包,不同包的域结构不同

使用特权

评论回复
14
chenqiang10|  楼主 | 2018-8-29 15:33 | 只看该作者
事务(Transaction)

   在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction),分别有IN、OUT和SETUP三大事务。一个事务由一系统packet组成,具体由哪些packet组成,它取决于具体的事务。可能由如下包组成:

一个token packet
可选的data pcket
可选的handshake packet
可选的special packet

使用特权

评论回复
15
chenqiang10|  楼主 | 2018-8-29 15:33 | 只看该作者
传输(Transfers)

  以下部分主要根据 USB 2.0 规范的第五章和第八章 。USB系统中的数据传输,宏观看是在HOST和USB功能设备之间进行。微观看是在应用软件的Buffer和USB功能设备的端点之间进行。一般来说端点都有Buffer,可以认为USB通讯就是应用软件Buffer和设备端点Buffer之间的数据交换,交换的通道称为管道。通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口,这就是端点、管道和接口的关系。

使用特权

评论回复
16
chenqiang10|  楼主 | 2018-8-29 15:34 | 只看该作者
控制传输(Control Transfers)

  控制传输是一种可靠的双向传输,是最重要也是最复杂的。一次控制传输分为三(或两个)个阶段:建立(Setup)、数据(DATA)(可能没有)以及状态(Status)。每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)。在USB设备初次接到主机后,主机通过控制传输来交换信息、设备地址和读取设备的描述符,使得主机识别设备,并安装相应的驱动程序,这是每一个USB开发者都要关心的问题。
  控制传输是双向的传输,必须有IN和OUT两个方向上的特定端点号的控制端点来完成两个方向上的控制传输

使用特权

评论回复
17
chenqiang10|  楼主 | 2018-8-29 15:35 | 只看该作者
中断传输(Interrupt Transfers)

  中断传输是一种轮询的传输方式,是一种单向的传输。HOST通过固定的间隔对中断端点进行查询,若有数据传输或可以接收数据则返回数据或发送数据。否则返回NAK,表示尚未准备好。中断传输的延迟有保证,但并非实时传输,它是一种延迟有限的可靠传输,支持错误重传。对于高速/全速/低速端点,最大包长度分别可以达到1024/64/8 Bytes。 高速中断传输不得占用超过 80%的微帧时间,全速和低速不得超过90%。 中断端点的轮询间隔由在端点描述符中定义,全速端点的轮询间隔可以是1 ~ 255mS。低速端点为10 ~ 255mS,高速端点为(2interval-1)*125uS,其中 interval 取 1到 16 之间的值。
  除高速高带宽中断端点外,一个微帧内仅允许一次中断事务传输。高速高带宽端点最多可以在一个微帧内进行三次中断事务传输,传输高达 3072 字节的数据。
  所谓单向传输,并不是说该传输只支持一个方向的传输。而是指在某个端点上该传输仅支持一个方向,或输出、或输入。如果需要在两个方向上进行某种单向传输,需要占用两个端点,分别配置成不同的方向。可以拥有相同的端点编号。
  中断传输由OUT事务和IN事务构成,用于键盘、鼠标等HID设备的数据传输。
  中断传输在流程上除不支持PING之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。
  主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。同样中断传输也采用 PID 翻转的机制来保证收发端数据同步。

使用特权

评论回复
18
chenqiang10|  楼主 | 2018-8-29 15:35 | 只看该作者
批量传输(Bulk Transfers)

  批量传输由OUT事务和IN事务构成,是一种可靠的单向传输,但延迟没有保证,它尽量利用可以利用的带宽来完成传输,适合数据量比较大的传输。低速USB设备不支持批量传输,高速批量端点的最大包长度为512,全速批量端点的最大包长度可以为8、16、32、64。
  用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等
  批量传输在访问USB总线时,相对其他传输类型具有最低的优先级,USB HOST总是优先安排其他类型的传输,当总线带宽有富余时才安排批量传输。高速的批量端点必须支持PING操作,向主机报告端点的状态。NYET表示否定应答,没有准备好接收下一个数据包,ACK 表示肯定应答,已经准备好接收下一个数据包。

使用特权

评论回复
19
chenqiang10|  楼主 | 2018-8-29 15:35 | 只看该作者
同步传输(Isochronous Transfers)

  同步传输是一种实时的、不可靠的传输,不支持错误重发机制。只有高速和全速端点支持同步传输,高速同步端点的最大包长度为1024,低速的为1023。由OUT事务和IN事务构成。有两个特殊地方,第一,在同步传输的IN和OUT事务中是没有返回包阶段的;第二,在数据包阶段所有的数据包都为DATA0。
它由两种包组成:

token
data

使用特权

评论回复
20
chenqiang10|  楼主 | 2018-8-29 15:59 | 只看该作者
USB设备架构

  USB 设备第一次连接到主机时, 要接收主机枚举( Enumeration) 和配置(Configuration) ,目的是让主机知道设备功能、是哪一类的USB 设备、占用多少资源、使用了哪些传输方式以及传输的数据量等等。只有主机完全确认了这些信息后, 设备才能真正开始工作。USB Host通过设备请求命令来获取或者设置USB Device的参数/数据。这些信息是通过存储在设备中的USB 描述符来体现的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

940

帖子

1

粉丝