单片机外围模块漫谈之四,USB总线基本概念

发布者:创客1992最新更新时间:2023-03-14 来源: zhihu关键字:单片机  外围模块  USB总线 手机看文章 扫描二维码
随时随地手机看文章
  1. USB概述

USB设备现在是用的非常普遍的一种接口了,它即插即用的特性给人们带来了很大的方便。在嵌入式的应用中, USB经常被用来作为与上位机通信的接口,还用来通过U盘存储数据等。USB按通讯速度可分为低速,全速和高速设备。在我们的应用中,低速和全速是最为普遍的,在此我们对USB从物理层到协议层做一个简要的介绍。高速USB的原理是一样的,在理解了低速和全速设备的工作原理后再去理解高速设备就比较简单了,在此我们暂不讨论。

低速(Low Speed, 1.5Mbps):键盘,鼠标,手写笔

全速(Full Speed, 12Mbps):音频

高速(High Speed, 480Mbps):视频

USB协议是开放的,可以从官方网站usb.org下载。

2. 主机,设备(Host, Device)

上图是一个典型的USB全速主机和设备的连接示意图。主机要有对外的供电能力,图中可以看到作为主机的单片机,一个引脚用来控制三极管或MOSFET,提供5V的电源至USB口。设备供电有两种方法:一种是通过USB总线,从主机提供的5V获得,如我们常用的U盘;一种是自己从另外的电源获得,此时主机至设备的电源线可以不连。如果设备的1.5k上拉电阻是加在D-上,那么此设备将被主机识别为低速设备。高速设备的上拉与全速设备一样是加到D+,需要靠软件协议进一步区分。

通过USB总线获得供电的设备,分为两种配置:

低功率设备(Low-power devices): 最大电流不超过100mA

高功率设备(High-power devices): 刚连接后设备后的枚举阶段不超过100mA,配置完成后最大不超过500mA。

USB所有的通讯都是由主机发起。当主机检测到有设备连接时,首先会询问设备,让设备自报家门,看看设备都具备哪些能力,其中就包括最大电流,然后主机根据上报的描述进行相应的操作。这个过程叫自举(Enumeration)。设备通过描述符(Descriptor)来声明自己的能力,包括:

设备描述符(Device Descriptor)

配置描述符(Configuration Descriptor)

接口描述符(Interface Descriptor)

端点描述符(Endpoint Descriptor)

字符串描述符(String Descriptor)

端点(Endpiont)是USB通信的基本单元,每个USB设备都会包含若干个端点。主机下发的数据最终会根据设备地址和端点地址到达某一个端点,主机获取数据也是给某个端点发出读数据命令,此端点随后把存储在自己缓冲区的数据发给主机。

在端点之上是逻辑组织,多个端点可以归到一个接口,多个接口可以归为一个配置。而一个设备可以有多个配置。

3. USB物理层

(USB Specification 2.0)

1 红色 Vbus(5V)

2 白色 D-

3 绿色 D+

4 黑色 GND

有的USB接口会多出一根ID线,以支持OTG(On The Go)。支持OTG的线两端是不一样的,其中一端插到OTG设备时会把设备接口的识别引脚ID拉低,此设备识别到自己的ID拉低后会进入主机状态(Host),连线另一端的设备ID没有拉低,默认进入设备状态(Device)。之后通过软协议可以主从切换。但是集中这种应用不是太多,一台设备要么作主机,要么作设备的情况比较多。

USB使用的是差分传输模式,有两根数据线D+和D-。
Differential 1:D+ > VOH(min) (2.8V) 且D- < VOL(max)(0.3V)
Differential 0:D- > VOH and D+ < VOL

J状态:对于低速USB是Differential 0,对于全速USB是 Differential 1
K状态:对于低速USB是Differential 1,对于全速USB是 Differential 0

除此之外,通过把D+,D-当作单端信号拉低,拉高,可以表示一些特殊的状态。

SE0状态(Single Ended 0):D+ 低,D- 低
SE1状态(Single Ended 1):D+ 高,D- 高

Reset信号:D+ and D- < VOL for >= 10ms
主机在要和设备通信之前会发送Reset信号来把设备设置到默认的未配置状态。即主机拉低两根信号线(SE0状态)并保持10ms。

看到这里也许有点晕,不过没关系,你如果看USB协议会更晕。

我们千万不要掉进这个坑里出不来,就像我们用串口也从来不会去触发一个起始信号,或者拉出一个结束信号一样,这些物理层信号状态的处理完全由芯片集成的USB控制器来处理。而且提供USB软件协议栈也是必须的,靠用户自己完全把所有细节搞清楚是不现实的。然而就像开车一样,你如果对汽车的原理有更深入的了解,一定更能充分的发挥出这辆车的性能。

继续,除了以上状态,还有:

Idle State, Resume State, Start of Packet, End of Packet, Disconnect, Connnect.

4. Packet

Packet是USB通讯最基本的单位。

SOP:Start Of Packet,标志由空闲状态转入数据包发送。

SYNC:同步段,供USB设备进行时钟同步。

PID:Packet Identifier。种类比较多,下面再详细说明。

Address:设备和端点地址。一个主机可以挂接多个设备,主机会给每个设备分配不同地址。

Frame Number:帧号,每发一帧加1,达到7FFFH时变为0。

Data:数据段。

CRC:校验和。

EOP:End Of Packet。

通过不同的PID,数据包被分成4个大类,每个大类又包含一些小类:

令牌 (Token) OUT,IN,SETUP,SOF

数据 (Data) DATA0,DATA1

握手 (Handshake) ACK,NAK,STALL,NYET

特殊包 (Special) PRE,ERR


5. Transaction

一次Transaction总是从主机向设备发出一个令牌(Token)开始。再次强调,USB所有的通信过程都是由主机发起。三种令牌把Transaction分为三类:

OUT:主机发送数据给设备。

IN:主机从设备获取数据。

SETUP:主机对设备进行设置。

USB协议里的OUT和IN,都要站在主机的角度来看。下面是比较典型的获取,发送数据的例子:

每一次Transaction,Token总是必需的,数据段和握手则视情况而定。比如在上一个例子中,当主机发出IN令牌获取数据时,如果设备没准备好数据,则可以返回NAK结束此Transaction。


6. Transfer

好了,有了以上这些,似乎万事俱备了。但是如果进一步想一下,那么还是有些问题不好解决。什么呢?比方说DATA数据段的长度规定多长好呢?主机多长时间发起一次通信比较好呢?

一个USB主机上是允许挂载多个设备的,而这些设备千差万别:比如像鼠标,按键后需要快速响应,把位置信息发送到主机,它的数据量很少,而像U盘则需要传输大量的数据。如果按鼠标的时候U盘正在传输数据怎么办呢?

为了解决上述问题,USB首先规定了四种传输类型:

控制传输(Control Transfers): 主要用来在设备刚连接到主机时对设备进行设置。还有平时对设备状态的管理。它需要双向的数据传输。

批量传输(Bulk Data Transfers): 主要用来进行量大,但对传输时间要求不严格的场景。例如U盘。

中断传输(Interrupt Data Transfers): 需要及时准确的传输信息的场景。中断传输总是单向的。比如鼠标。

同步传输(Isochronous Data Transfers): 一般需要占用相对固定的带宽,延时短而且比较确定。传输是单向的,数据出错后不需要重传。比如USB摄像头。

然后,为了解决设备的及时响应问题,USB每隔1ms (高速USB是每隔125us)发出一个SOF令牌,紧接令牌进行同步类型的传输,之后依次是中断类型,控制类型和批量数据传输类型。在每一个Frame内,Isochronous,Interrupt和Control都会保证一定的带宽。而Bulk型的传输优先级最低,不一定每帧都得到带宽进行数据传输。

一个Transfer 由一个或多个Transactions组成。比如一次控制传输可以由Setup,IN,OUT等Transactions组成。Packet和Transaction是不允许被中间打断的,而Transfer的多个Transactions可以分多次传输。


7. 小结

我们对USB的物理层和协议层做了简要的介绍。在接下来的文章里我们将通过实际的例子来看一下USB是如何工作的,并对很多工程师经常忽略或者没有意识到的一些问题进行探讨。



关键字:单片机  外围模块  USB总线 引用地址:单片机外围模块漫谈之四,USB总线基本概念

上一篇:单片机从零基础到独立开发,我经历了哪些阶段?
下一篇:单片机外围模块漫谈之三,CAN总线

推荐阅读最新更新时间:2024-11-17 03:16

MSP430单片机模式IIC协议C语言程序
#include msp430x22x4.h #define I2C_SDA(operation) operation(3,1) #define I2C_SCL(operation) operation(3,2) #define PORT_SET(port,bit) P##port##OUT|=(1 bit) #define PORT_CLR(port,bit) P##port##OUT&=~(1 bit) #define SET_GPIO_MODE(port,bit) P##port##SEL&=~(1 bit) #define SET_OUTPUT_MODE(port,bit) P##
[单片机]
靈活使用PIC16C57单片机的PROGRAM MEMORY
當您使用Microchip公司的PIC16C57单片机在設計程式時,是否被它的PROGRAM MEMORY需分PAGE使用,而PAGE之設定又影響到goto、call、addwf 2、movwf 2四個指令之執行結果而困擾不已呢?以下是小弟領悟出來的一點心得,在此野人獻曝,與大家分享。 PIC16C57单片机之PROGRAM MEMORY共有2 K words,分為四個PAGE,每個PAGE有512個words;goto、call、addwf 2、movwf 2四個指令之執行,會改變PROGRAM COUNTER內容,其結果也受STATUS WORD REGISTER f3之bit 6, 5的影響,如圖(一)所示;改變S
[单片机]
带字符型12864单片机显示程序
//带字符型12864单片机显示程序 #include reg52.h #include math.h void lcd_init(void); void clr_lcd(void); void send_com(unsigned char cmd); void send_data(unsigned char dat); void chek_busy(void); void set_xy(unsigned char xpos,unsigned char ypos); void print(unsigned char x,unsigned char y,char* str); void p
[单片机]
飞思卡尔16位单片机(六)——锁相环测试
一、锁相环介绍 在前面的几个实验中,我们没有涉及到单片机的总线时钟的设置。这是因为飞思卡尔16位单片机在不进行总线时钟设置的情况下默认的总线时钟为外部输入晶振频率的1/2。我们的实验电路中用的外部晶振的频率为16MHz,所以在不设置总线时钟的情况下,总线时钟频率为8MHz。在工程应用中,8MHz的总线频率比较低,XEP100单片机允许总线频率为40MHz,实际测试最高可以运行在80MHz的总线频率下。但不建议设置过高的总线频率,原因之一是频率越高稳定性越差;另外过高的总线频率会影响芯片的寿命。为了获得比较高的总线频率,就需要使用锁相环,通过锁相环(PLL)可以对晶振频率进行倍频,从而形成比较高的总线频率。锁相环模块的功能框
[单片机]
飞思卡尔16位<font color='red'>单片机</font>(六)——锁相环测试
51单片机之忽略的东西
P0口将作为总线的低8位地址线和8位数据线使用 P2口将作为总线的高8位地址线使用 如果十六进制数以字母ABCDEF中的某一个开头,必须在前面加一个0.譬如,MOV P1, #0BFH ORG 00H 表示的是伪指令,作用帮助汇编器汇编指令,并不是单片机指令的一部分,因此伪指令不占用存储器空间。这段代码的含义是从程序存储器的00H开始执行程序。 一段小程序,循环闪烁小灯 ORG 00H START: MOV P1, #00H CALL DELAY MOV P1, #0FFH CALL DELAY JMP START DELAY: MOV R3, #50 D1: MOV R4, #20 D2: M
[单片机]
海速芯8位MCU-TM52F1376用于电动剃须刀
电动剃须刀由不锈钢网罩、内刀片、微型电动机和壳体组成,其中主控方面控制按键开关、电机驱动、电源管理等,为保证性能,电动剃须刀需要选用一个稳定性能好的MCU。本文将推荐海速芯高性能、高稳定性的8位MCU-TM52F1376应用于电动剃须刀。 海速芯8位MCU-TM52F1376的主要应用优势特点如下: ①采用8051内核、8bit的MCU,主频高达18MHz,因而拥有高性价比、稳定性好的特点,适合电动剃须刀上的应用,节约成本; ②拥有3ch PWM控制资源,满足电动剃须刀对于电机方面的控制; ③封装形式多样,满足不同设计需求,同时可以有效简化PCB面积; ④工作温度为-40℃~85℃,非常适合对于消费类电子产品即电动剃须刀上的应
[单片机]
基于MCU和基于ASIC的LED可控硅调光方案对比与解析
作为一种新的、最有潜力的光源,LED照明以其节能、环保的优势越来越受到人们重视。加上国家和地方政府的政策鼓励,我国的LED照明产业进入了加速发展阶段,运用市场迅速增长。在室内照明方面,用LED灯替代传统的可调光白炽灯或者卤素灯也将是大势所趋。由于传统的白炽灯调光器采用可控硅调光器,用LED灯替代白炽灯时,要求不能改变原有线路,还要能适应现有的可控硅调光器。针对这一目标市场,目前很多大的半导体厂商(包括国际知名半导体厂商)都已经推出了自己的LED调光ASIC,但由于LED固有的发光原理,目前市面上的LED ASIC调光案都还不是很成熟,都有其固有的问题,本文就将针对目前的调光方案做一个详细的分析,并介绍我们基于MCU的调光方案。
[电源管理]
基于<font color='red'>MCU</font>和基于ASIC的LED可控硅调光方案对比与解析
如何设计单片机的电源-稳压电路的作用
8051单片机在运行的时候,需要稳定的5V电源,那么该电源是如何设计实现的呢?今天, MCU起航 给大家简单介绍一下,先看看大部分开发板是如何做的。 大部分是这样,把电脑上的USB接口接到开发板上,用它来给板子供电。但是在实际的项目中呢,我们总不能给每个板子配一台电脑吧! 第一种,LDO供电。 LDO是什么?是low dropout regulator,意为低压差线性稳压器,是相对于传统的线性稳压器来说的。传统的线性稳压器有个特点,如78xx系列的芯片都要求输入电压要比输出电压高出2v~3V以上,否则就不能正常工作。 例如,输入端是一个8V-1A的电源,经过7805后变成了一个5V-1A的电源,那么损耗的3V-1A去哪
[单片机]
如何设计<font color='red'>单片机</font>的电源-稳压电路的作用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved