USBhost判断插入的设备是高速还是低速的设备
USB host 工作流程
USB枚举步骤USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态(Attached)和挂起状态(Suspend))。
Attached和Powered状态不难理解:当一个设备被正确插入到主机的USB接口时,就处于Attached(连接)的状态。
设备连接好了,USB主机识别了设备,同时没有对设备进行请求,USB设备就处于Suspended(挂起)状态。
下面步骤是Windows系统下典型的枚举过程,但是固件不能依此就认为所有的枚举操作都是按照这样一个流程行进。
设备必须在任何时候都能正确处理所有的主机请求。
1. 用户把USB设备插入USB端口或给系统启动时设备上电这里指的USB端口指的是主机下的根hub或主机下行端口上的hub端口。
Hub给端口供电,连接着的设备处于上电状态。
2. Hub监测它各个端口数据线上(D+/D-)的电压在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而在设备端,D+(全速,高速)和D-(低速)上有一个1.5k的上拉电阻Rpu。
当设备插入到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V)。
hub检测到它的一根数据线是高电平,就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口(全速、高速设备的区分在后面的章节中描述)。
检测到设备后,hub继续给设备供电,但并不急于与设备进行USB传输。
3. Host了解连接的设备每个hub利用它自己的中断端点向主机报告它的各个端口的状态(对于这个过程,设备是看不到的,也不必关心),报告的内容只是hub端口的设备连接/断开的事件。
如果有连接/断开事件发生,那么host会发送一个Get_Port_Status请求(request)以了解更多hub上的信息。
USB学习系列之二——USB设备的插入检测机制
USB学习系列之二——USB设备的插入检测机制B的插入检测机制:USB端口的D+和D-均用一个15k的电阻接地,当无设备接入时,均处于低电平;在设备端在D+(表示高速设备或者全速设备)或者D-(表示低速设备)接了一个1.5k的上拉电阻到+3.3v,一旦将设备接入,USB端口的D+或者D-其中一个被拉高为3v,系统识别到外部设备接入。
注意:高速设备首先会被识别为全速设备,然后再通过集线器和设备二者的确认最后切换到高速模式下。
在高速模式下,采用的是电流传输模式,这个时候上拉电阻需要从D+上断开。
2.当设备没有枚举成功时(可以通过一个10K的电阻将USB的电源端和D+ 或者D-连接起来,电脑会发现一个无法识别的设备,这个设备的PID和VID都是0,根据每个特性可以简单的判定设备的枚举是否成功。
3.一个具体的USB实现什么功能,USB主机并不知道。
USB主机通过读取USB的设备描述符来获取设备的类型、厂商的ID和产品的ID(通常依靠它们来加载对应的驱动程序)、端点情况、版本号等众多信息。
B1.1协议定义的标准描述符有设备描述符(DeviceDescriptor)、配置描述符(ConfigurationDescriptor)、接口描述符(InterfaceDescriptor)、端点描述符(EndpointDescriptor)和字符串描述符(StringDescriptor)。
USB2.0相比于USB1.1新增加的两个描述符:限定符描述符(QualifierDescriptor)和其他速度配置描述符(OtherSpeedConfigurationDescriptor)。
5.一个USB设备只有一个设备描述符。
设备描述符里面决定了该设备有多少种配置,每种配置都有一个配置描述符;。
USB插入检测方式
USB接口插入检测方式(详解)数据线USB接口;上图为U盘以及接口;据百度百科介绍,中国朗科公司才是U盘的全球第一个发明者。
具体可以百度,再次不赘述。
正常的U盘机芯包括一块PCB+USB主控芯片+晶振+贴片电阻、电容+USB接口+贴片LED (不是所有的U盘都有)+FLASH(闪存)芯片;具体的外形有变化,毕竟功能达到了,那么就要美一点了,哈哈哈。
里面包含控制器,里面含有厂商信息、USB信息,例如厂商ID,USB的ID,注意ID是唯一的,就像身份证号码一样,唯一;再说插入识别检测问题,因为所有接口中,USB号称最为难以控制的,最复杂,特别是驱动等的实现:首先,在USB设备控制器部分,也就是USB控制芯片的内部,将USB的数据线,例如USB2.0的D+与D-两条线,通过15K欧姆的电阻连接到地,所以在正常逻辑下,被电阻下拉到地,所以是低电平“0”,如下图所示:在USB设备端,也就是常见的U盘等,在内部电路上,是将D+或者D-通过1.5K欧姆的电阻上拉到VCC电源端;为什么是或者D+、D-呢?因为USB设备是分高速与低速的,就是你的U盘十几MB/S,别人的几十MB/S;高速的话,D+是接上拉的;低速的话,D-是上拉的。
如下图所示:图中的两个电阻上拉是可以软件配置的,可以配置为上拉或者不上拉。
所以当U盘设备插入到USB母座时,此时的D+与D-两条线相当于分压的接法,接电源端是1.5K欧姆,接地的15K欧姆,所以对于5V的VCC电源,此时D+或D-两条线上的电压是不一样的,所以CPU可以获得差值V,检测到有U盘插入了,并且可以分得是高速设备还是低速设备;如下图:当检测到插入设备且高速或低速时,CPU控制端再和USB设备之间用指令应答方式相互确认;确认完成,U盘内部控制芯片通过内部配置,将D+或D-上的上拉电阻断开,开始传输数据;以上就是插入U盘检测的步骤;标准的USB接口是有5条线的,VCC、GND、D+、D-和ID,但是好多只有四条;有五条时可以作为主设备使用,ID是接在GND上的,比如手机的OTG功能时。
在USB中USBHOST是通过各种描述符来识别设备的
在USB中USBHOST是通过各种描述符来识别设备的USB HID报告及报告描述符简介在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接⼝描述符,端点描述符,字符串描述符,报告描述符等等。
USB报告描述符(Report Descriptor)是HID设备中的⼀个描述符,它是⽐较复杂的⼀个描述符。
USB HID设备是通过报告来给传送数据的,报告有输⼊报告和输出报告。
输⼊报告是USB设备发送给主机的,例如USB⿏标将⿏标移动和⿏标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB 设备的,例如键盘上的数字键盘锁定灯和⼤写字母锁定灯等。
报告是⼀个数据包,⾥⾯包含的是所要传送的数据。
输⼊报告是通过中断输⼊端点输⼊的,⽽输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。
⽽报告描述符,是描述⼀个报告以及报告⾥⾯的数据是⽤来⼲什么⽤的。
通过它,USB HOST可以分析出报告⾥⾯的数据所表⽰的意思。
它通过控制输⼊端点0返回,主机使⽤获取报告描述符命令来获取报告描述符,注意这个请求是发送到接⼝的,⽽不是到设备。
⼀个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前⾯,即第⼀个字节。
当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。
更详细的说明请参看USB HID协议,该协议可从下载。
USB报告描述符可以通过使⽤HID Descriptor tool来⽣成,这个⼯具可以到下载,为了⽅便⼤家,我顺便上传了⼀份。
下⾯通过由HID Descriptor tool⽣成的USB⿏标和USB键盘来说明⼀下报告描述符和报告。
code char KeyBoardReportDescriptor[63] = {//表⽰⽤途页为通⽤桌⾯设备0x05, 0x01, // USAGE_PAGE (Generic Desktop)//表⽰⽤途为键盘0x09, 0x06, // USAGE (Keyboard)//表⽰应⽤集合,必须要以END_COLLECTION来结束它,见最后的//END_COLLECTION0xa1, 0x01, // COLLECTION (Application)//表⽰⽤途页为按键0x05, 0x07, // USAGE_PAGE (Keyboard)//⽤途最⼩值,这⾥为左ctrl键0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)//⽤途最⼤值,这⾥为右GUI键,即window键0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)//逻辑最⼩值为00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最⼤值为10x25, 0x01, // LOGICAL_MAXIMUM (1)//报告⼤⼩(即这个字段的宽度)为1bit,所以前⾯的逻辑最⼩值为0,逻辑最⼤值为10x75, 0x01, // REPORT_SIZE (1)//报告的个数为8,即总共有8个bits0x95, 0x08, // REPORT_COUNT (8)//输⼊⽤,变量,值,绝对值。
USB协议-设备识别过程
USB协议-设备识别过程USB协议一枚举过程:◆用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态。
◆主机检测设备。
◆集线器使用中断通道将事件报告给主机。
◆主机发送Get_Port_Status(读端口状态)请求,以获取更多的设备信息。
◆集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对Get_Port_Status请求的响应。
◆主机发送Set_Port_Feature(写端口状态)请求给集线器,要求它复位端口。
◆集线器对设备复位。
◆主机使用Chirp K信号来了解全速设备是否支持高速运行。
◆主机发送另一个Get_Port_Status请求,确定设备是否已经从复位状态退出。
◆设备此时处于缺省状态,且已准备好在零端点通过缺省通道响应主机控制传输。
缺省地址为00h,设备能从总线获取高达100mA的电流。
◆主机发送Get_Deor(读设备描述符)报文,以便确定最大数据包大小。
设备描述符的八个字节是bMaxPacketSize。
◆通过发送Set_Address(写地址)请求,主机分配地址,设备此时处于地址状态。
◆主机发送Get_Deor报文,以获取更多的设备信息。
主机通过发送描述符响应设备请求,随后发送全部的次级描述符。
◆主机分配并加载设备驱动程序。
◆通过发送Set_Configuration(写配置)请求,主机的设备驱动程序选择一个有效配置,设备此时处于配置状态。
◆主机为复合设备接口分配驱动程序。
◆如果集线器检测到有过流现象,或者主机要求集线器关闭电源,则USB总线切断设备供电电源。
在这种情况下,设备与主机无法通信,但设备处于连接状态。
◆如果在3毫秒内设备在总线上未见任何动作,则它将进入挂起状态,在挂起状态设备消耗的总线电能最少。
如下:1)集线器检测新设备主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。
(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。
USB设备分类:HOST,OTG,DEVICE
USB 设备分为三种:HOST,OTG,DEVICE。其中 ID 脚在 OTG 功能中 才使用。 A,如果你的系统自己仅仅是用做 Slave,那幺就使用 B 接口。任何时候 都悬空,都做 Slave。 如果是 OTG 设备,它的系统控制器会判断外部设备的 ID 脚的电平,决 定是什幺样的设备插入: B,如果是高电平,则是 B 接头插入,此时 OTG 设备就做主模式 (master mode); C,如果 ID 为低,则是 A 接口插入,然后 OTG 设备就会使用 HNP 对话 协议来决定它跟外设哪个做 Master,哪个做 Slave。 D,还有种主动 OTG 设置,就是接入外设后,在 OTG 设备中点击 HOST
ቤተ መጻሕፍቲ ባይዱ
在微型 A 插头中,ID 引脚接地,在微型 B 插头中,ID 引脚悬空。在 OTG 中,如果设备的 ID 引脚接地(如图 l 右侧的设备),则此设备默认为主 机,否则为外设。同时,在设备连接使用过程中,通过主机协商协议,允许 主机和外设功能互换。例如,假设图 1 左边的 B-Device 为 1 个手持 PDA,右 边的 A-Device 为 1 个打印机。由于连接线的关系,打印机初始化为主机。但 是打印机的驱动程序存在 PDA 中,这时需要 PDA 作为主机,打印机作为外 设。通过 HNP 可以方便实现此功能,而不必拔下连接线调换插头方向,重新 连接打印机和 PDA。
使能,会强制 ID 拉低。此时的 Master 和 Slave 关系确定。 我们手机上一般用的都是 B 型 Mini-USB 口 (1)USB (2)Mini USB (3)总结 从左往右依次为:miniUSB 公口(A 型插头)、miniUSB 公口(B 型插 头)、USB 公口(B 型)、USB 母口(A 型插座)、USB 公口(A 型插头) 。 (4)OTG 特性:既能充当 HOST 又能用做 Device,即 DRD(Dual-role-devices); OTG 设备依然可以连接到 PC 上用做普通的外设,即 POD(Peripheral-Only Device)。协议简述:USB OTG 中引入了两个新的协议, SRP(Session Request Protocol)和 HNP(Host NegoTIaTIon Protocol),即会话请求协议和 主机交流协议。
USB接口指标测试指导书的参考学习分享
USB接口指标测试指导书1、USB接口指标描述为了顺应市场的要求,目前的产品大部分都出的是USB2.0的接口,而且我们产品都是作为HOST端,USB2.0一共提供3种速率,如下表。
数据速率上升时间Low Speed 1.5Mbps 75~300ns Full Speed 12Mbps 4~20ns High Speed 480Mbps >500ps 当我们的设备是作为HOST端是,数据方向是Down Stream,其关注的指标有:1、信号质量1)眼图测试(Eye-Diagram testing) 2)信号速率(Signal Rate) 3)包结尾宽度(End of Packet Width) 4)JK抖动(JK jitter) 5)KJ抖动(KJ jitter) 6)连续抖动(Consecutive jitter) 7)单调性测试(Monotonic test (for HS)) 8)上升与下降时间(Rise and Fall times) 2、Droop(电压跌落) 3、Chirp (Shake Hands) 2、USB接口指标测试方法(1)信号质量测试由于我们的设备都是作为HOST端,在这里只介绍HOST端的接口指标测试方法。
1)USB High Speed信号质量测试方法信号质量测试方法a)连接好被测设备(DUT)、测试夹具和示波器,具体的连接示意图如图1所示。
图 1 High Speed 信号质量测试连接示意图信号质量测试连接示意图b) DUT 上电,启动USB 测试包,发送测试命令,使USB 端口能够发送出测试码流,具体的码流波形如图具体的码流波形如图 2所示。
所示。
图 2 High Speed 信号质量测试波形信号质量测试波形c) 运行示波器上的USB 测试软件,在Analyze 菜单中选择USB2.0 Test 启动后的界面如图面如图 3所示。
在软件的Measurements 菜单中选择Select ,然后选择High Speed ,选择测试项,在这里可以点击Select All ,将信号质量的测试项全部选上。
在USB中USBHOST是通过各种描述符来识别设备的
在USB中USBHOST是通过各种描述符来识别设备的随着技术的不断发展, USB(通用串行总线)已经成为了连接各种设备的主要方式。
在 USB 中,USBHOST 是用于识别、管理和连接 USB 设备的主机端,而 USB 设备则是被动接受主机指令并执行操作的从属端。
在 USBHOST 与设备之间的通讯过程中,USBHOST 首先需要对设备进行识别,然后才能对其进行管理和使用。
本文将介绍 USBHOST 是如何通过各种描述符来识别设备的。
什么是 USB 描述符?在 USB 中,描述符起着至关重要的作用。
USB 描述符是用于描述 USB 设备的结构,可以理解成USB 设备的一份数据结构,包含了设备的基本信息、功能特点、支持的协议和接口等信息。
插入 USB 设备后,USBHOST 会从设备中读取一些关键的描述符,通过这些描述符,USBHOST 可以识别出连接的设备,并以正确的方式进行管理和控制。
USB 描述符分为设备描述符、配置描述符、接口描述符等。
其中,设备描述符是必须的;而配置描述符和接口描述符则是通过设备描述符间接引用的。
下面将详细介绍每种描述符的作用和结构。
设备描述符设备描述符是用于描述USB 设备的基本信息,包括设备的供应商ID、产品ID、设备版本号、设备类等。
设备描述符有18个字节长,其中,字节1为描述符的长度,字节2为描述符类型(值为0x01表示设备描述符),字节3和字节4表示USB规范的版本号。
字节5和字节6表示USB设备的类别、子类别和协议码,字节7为USB设备可处理的最大数据包大小,字节8为设备的厂商ID,字节9为设备的产品ID,字节10和11为设备的版本号,字节12至18为USB设备的其他描述符。
配置描述符配置描述符用于描述 USB 设备的配置信息,包括该配置的总长度、配置号、接口数、供电方式等。
配置描述符由配置描述符首部和接口描述符组成。
需要注意的是,在 USB 中,配置描述符中的一个设备可以包含多个接口描述符。
【专业技术】如何检测USB是否已经插入?
【专业技术】如何检测USB是否已经插入?usb是我们现代生活中不可或缺的一个东西,大家平常只要使用电脑,肯定都接触过usb吧。
本篇文章对于大部分同学来说并没有实际意义,主要面向想了解USB的一些同学,以及一些做嵌入式的同学。
首先第一个问题,当我们在电脑中插入了一个U盘,那么电脑是怎么知道有一个U盘插入的呢?一般usb有4根线,作为数据的D+,D-,以及供电的Vbus和GND。
我们需要知道在集线器的端口上(比如电脑的usb口)分别接了一个15K欧姆的下拉电阻到地。
这样,在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平。
而在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。
对于全速和高速设备,上拉电阻是接在D+上;而低速设备则是上拉电阻接在D-上。
这样,当设备插入到集线器时,由1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线中的一条拉高了。
集线器检测到这个状态后,它就报告给USB主控制器(或者通过它上一层的集线器报告给USB主控制器),这样就检测到设备的插入了。
USB高速设备先是被识别为全速设备,然后通过HOST和DEVICE两者之间的确认,再切换到高速模式的。
在高速模式下,是电流传输模式,这时将D+上的上拉电阻断开。
基于以上原因,我们如果把电脑usb口的D+或者D-接到5v电源上,那么电脑也会识别到有usb设备插入,只不过电脑识别到的是未识别的硬件,VID,PID都是0。
现在我们会经常听到说某某手机支持OTG,可以在手机上插U盘。
那么什么是OTG呢,手机本来是作为SLAVE设备的,他怎么知道要切换到HOST设备呢?这就引入了第二个问题:OTG设备是如何检测设备的插入的?支持OTG设备的usb口会多出一个引脚叫ID引脚,下面是OTG 设备对管脚的定义:为支持OTG功能,mini/micro usb接口扩展了一个ID引脚(第4脚)A设备端ID脚接地,则初始状态为Host,例如PC和支持OTG 设备做主设备时B设备端ID脚悬空,默认上拉为高电平,则初始状态为Device,例如U盘和支持OTG设备做从设备时1. 移动设备如需支持OTG,内部ID引脚需要默认上拉为高2. VBUS是输入输出双向引脚。
USB HOST与 USB OTG的区别是什么,功能上有什么差异
(2)作为A设备时,需要具有VBUS监视和供电电路;作为B设备初始化SRP时,需要监视和触发VBUS。
(3)具有ID输入引脚。作为两用OTG设备,ASIC、DSP或其它与收发器连接的电路必须具备充当外设和主机的功能,并应按照HNP协议转换其角色。
收发器所需添加的大多数电路用于VBUS引脚的管理。作为主机,它必须能够提供5V、输出电流可达8mA的电源。图3中的模拟开关用于配置收发器的各种功能。
ASIC和控制器还必须包含USB主机逻辑控制功能,包括发送SOF(帧启动)包、发送配置\u36755输入\u36755输出数据包,在USB 1 msec帧内确定传输进程、发送USB复位信号、提供USB电源管理等。
Maxim要提供的USB OTG方案
MAX3301E是Maxim公司研制的一款USB OTG收发器,该器件集成有电荷泵,可将PDA、蜂窝电话和数码相机等移动设备与USB外设直接连接而无需PC机的参与。采用MAX3301E和一个嵌入式USB主机,就可直接将诸如打印机或外部硬盘驱动器这样的外设连接。MAX3301E内部包括USB OTG收发器、UBUS电荷泵、线性稳压器和I2C 2线串行接口。内部电平转换器使MAX3301E能够与采用+1.65至+3.6V逻辑电源电压的器件连接。MAX3301E中的电荷泵工作在+3V至+4.5V输入电源下,可产生符合OTG要求的VBUS输出,且输出电流大于8mA。该器件可利用内部比较器控制并测量VBUS,同时支持USB OTG SRP和HNP。
这个解释起来好麻烦,lz慢慢看
简单地说,OTG就是On The Go,正在进行中的意思,也就是可以直接传输,就是可以从一个机器直接传到另一个机器中,举个例子 未来的一天,我拿着MEIZU最新产品“EX”来到学校,听着“EX”里面装着的我最新下载的一首新歌,我的一个好朋友夺下我的耳塞想听听这首歌,她一边听一边陶醉地说:“我找这首歌已经很久了,可是一直都没有能download到,你是在哪儿找到的???”我笑着要她拿出她的Mp3,同时我从钥匙扣上取下一条便携的数据线,数据线的一头插在“EX”上,另一头插在她的Mp3上,我打开“EX”的菜单,选中了基于OTG技术的传输模式,直接将这首好听但是难找的歌“拷”到了她Mp3上,她非常惊讶,直到她在自己的Mp3上听到了这首歌才相信这一切都是是真的……,呵呵呵
关于USB高速(HighSpeed)和中速(FullSpeed)的区分
关于USB高速(HighSpeed)和中速(FullSpeed)的区分USB中区分当前设备是低速还是中速(初始时,高速也被当做中速)的方法是检查D+ 或者D- 上的电阻。
如果发现时中速设备,还要有额外的动作来区分是中速还是高速设备。
具体的做法是:“主机识别一个中速设备是否支持高速。
要知道一个设备是否支持高速,需使用两个特殊的信号状态。
在Chirp J 状态时只有D+线会被驱动,在Chirp K 状态时只有D-线会被驱动。
在重置期间,支持高速的设备会送出一个Chirp K。
高速的集线器检测到该Chirp后,会反映遗传的交替Chirp K与J。
当设备检测到KJKJKJ的样式后,它会移除它的中速上升,然后在高速执行所有的通信。
如果集线器没有对设备的Chirp K做出相应,设备知道它必须继续使用中速通信。
高速的设备必须能够在中速时,相应检测设备的请求”【注释1】使用Ellisys USB 分析仪查看,其中的一个例子:Mass-storage USB 2.0 HS.ufo 可以看到这样一个握手。
上面的解释是“High speed Detection HandshakeHigh speed Detection Handshake state detectedStatusThe handshake completed successfully.When does this state occur?All high speed devices start at full speed to ensure USB 1.1 backward compatibility. If the upstream port(device) supports high speed signaling, it will generate a Chirp K state on the bus after Reset. If the downstream port (host) also supports high speed signaling, it will generate Chirps to change the link speed into high speed. If the downstream port (host) does not support high speed signaling, it will never see the upstream port (device) Chirp and the link speed will stay at full speed.”可惜的是无法看清楚具体的电气特性。
USB主机控制器(HostController)
USB主机控制器(HostController)1. 主机控制器(Host Controller)· UHCI: Universal Host Controller Interface (通用主机控制接口, USB1.0/1.1)· OHCI: Open Host Controller Interface (开放主机控制接口,USB1.0/1.1)· EHCI: Enhanced Host Controller Interface (用于USB2.0高速设备的“增强主机控制接口”)USB的拓扑结构决定了主机控制器就是最高统帅,没有主机控制器的要求设备永远不能主动发数据。
所以主机控制器在USB的世界里扮演着重要的角色,它是幕后操纵者。
比如说Host发送Setup包获取设备描述符是怎么发出去的?这个过程包含很多信息,比如:如何在D+和D-这两根线上传过去的、又传过来的。
这一切的工作都是主机控制器给我们做的。
USB Host控制器的规范有很多种这里只介绍混得不错的EHCI和OHCI。
这个EHCI主要针对高速的USB设备。
如果要操作全速和低速可以考虑OHCI。
· 什么是USB controller?USB 设备和主机的接口就是host controller,一个主机可以支持多个host controller比如分别属于不同厂商的。
那么USB host controller 本身是做什么的? controller(控制器):用于控制。
控制什么?控制所有的USB设备的通信。
CPU把要做的事情分配给主机控制器,然后自己想干什么就干什么去,主机控制器替他去完成剩下的事情,事情办完了再通知CPU。
否则让CPU去盯着每一个设备做每一件事情,那是不现实的。
控制器的主要工作是什么? 把数扔出去,把数拿回来。
绝对不应该偷偷加工数据。
主机控制器控制总线上包的传输,使用1ms或125us的帧。
USB2.0速度识别
USB2.0速度识别shareman:低速设备和非低速设备首先是依靠D+、D-上是否有1.5k的上拉电阻来判断的,全速和高速是通过后续的握手来做进一步判断。
hub发出复位信号SE0(双低)(这个动作理解为hub想知道设备是高速还是全速),如果是高速设备收到复位信号后,会输出一定大小的电流在hub端产生800mv的电压这就是chirp K信号(设备高速hub我是个高速的),hub检测到chiro K后,如果自己是个2.0的hub,就连续发出3对kj序列(告诉设备俺也是个高速的hub),高速设备看到hub也是高速的,就把自己切换到高速模式(改变D+、D-上的上拉电阻)。
全速和低速识别根据规范,全速(Full Speed)和低速(Low Speed)很好区分,因为在设备端有一个1.5k的上拉电阻,当设备插入hub或上电(固定线缆的USB设备)时,有上拉电阻的那根数据线就会被拉高,hub根据D+/D-上的电平判断所挂载的是全速设备还是低速设备。
如下两图:USB全速设备上电连接(Full-speed Device Cable and Resistor Connections)USB低速设备上电连接(Low-speed Device Cable and Resistor Connections)高速识别USB全速/低速识别相当简单,但USB2.0,USB1.x就一对数据线,不能像全速/低速那样仅依靠数据线上拉电阻位置就能识别USB第三种速度:高速。
因此对于高速设备的识别就显得稍微复杂些。
高速设备初始是以一个全速设备的身份出现的,即和全速设备一样,D+线上有一个1.5k的上拉电阻。
USB2.0的hub把它当作一个全速设备,之后,hub和设备通过一系列握手信号确认双方的身份。
在这里对速度的检测是双向的,比如高速的hub需要检测所挂上来的设备是高速、全速还是低速,高速的设备需要检测所连上的hub是USB2.0的还是1.x的,如果是前者,就进行一系列动作切到高速模式工作,如果是后者,就以全速模式工作。
usb检测原理
usb检测原理USB(Universal Serial Bus,通用串行总线)是一种用于计算机的外部设备连接标准。
通过USB接口,我们可以连接各种外部设备,如打印机、键盘、鼠标、摄像头等。
在使用USB设备之前,系统需要对其进行检测,以确保设备的稳定性和兼容性。
下面将介绍USB检测的原理和过程。
一、USB检测的目的和意义USB设备的检测是为了保证设备的正常运行,以及与计算机之间的有效通信。
通过检测,系统能够了解设备的类型、参数和功能,进而进行相应的初始化和设置。
检测过程中还可以判断设备的连接状态和传输速度,以便为用户提供更好的使用体验。
二、USB检测的流程1. 初始连接检测:当插入一个USB设备时,计算机会首先检测设备的插入信号,确认设备是否正确连接到USB接口。
这一步骤通常包括物理插入检测和电气参数检测。
2. 设备识别和描述符读取:设备被正确插入后,计算机会向设备发送握手信号,以识别设备的类型和功能。
计算机会从设备的描述符中读取有关设备的信息,比如设备的供应商ID、产品ID、设备版本号等。
这些信息有助于系统识别设备,并加载相应的驱动程序。
3. 驱动程序加载和设备初始化:根据设备的识别信息,计算机会加载相应的驱动程序。
驱动程序负责与设备进行通信,并完成设备的初始化设置,确保设备可以在系统中正常工作。
4. 速度协商和配置:USB设备支持多种传输速度,包括低速、全速和高速。
在这一步骤中,计算机会与设备协商选择合适的传输速度,并为设备分配所需的带宽和资源。
5. 设备状态监测:一旦设备成功配置和初始化,计算机会定期监测设备的状态,以便及时响应设备的变化或故障。
例如,当设备被拔出时,系统需要及时检测到这一状态,并进行相关处理。
三、常见的USB检测技术1. 插拔检测:通过检测USB接口的插入和拔出信号,判断设备的连接状态。
当设备插入时,插拔检测技术可以自动唤醒系统,进行后续的检测和操作。
2. 描述符读取和解析:通过读取设备的描述符,系统可以获取设备的各种信息。
USBHOST与USBOTG的区别是什么,功能上有什么差异
USBHOST与USBOTG的区别是什么,功能上有什么差异这个解释起来好麻烦,lz慢慢看简单地说,OTG就是On The Go,正在进行中的意思,也就是可以直接传输,就是可以从一个机器直接传到另一个机器中,举个例子未来的一天,我拿着MEIZU最新产品“EX”来到学校,听着“EX”里面装着的我最新下载的一首新歌,我的一个好朋友夺下我的耳塞想听听这首歌,她一边听一边陶醉地说:“我找这首歌已经很久了,可是一直都没有能download到,你是在哪儿找到的”我笑着要她拿出她的Mp3,同时我从钥匙扣上取下一条便携的数据线,数据线的一头插在“EX”上,另一头插在她的Mp3上,我打开“EX”的菜单,选中了基于OTG技术的传输模式,直接将这首好听但是难找的歌“拷”到了她Mp3上,她非常惊讶,直到她在自己的Mp3上听到了这首歌才相信这一切都是是真的……,呵呵呵usb host USB设备分为HOST(主设备)和SLAVE(从设备),只有当一台HOST与一台SLAVE连接时才能实现数据的传输。
简单的说,如果一个数码设备支持USB HOST,那么它就可以从另外一个USB设备中取得数据。
USB HOST线可以使得很多智能手机支持连接鼠标、键盘、硬盘、U盘、MP3、USB游戏手柄、USB HUB、USB网卡、USB打印机、手机、USB SIM手机卡读卡器等一堆设备,好处多多所以一句话来说:一般情况下OTG和HOST的区别就是host支持的东西多一点,otg传输方便点,不需要别的机器上有从设备的接口就能传输,就说真么多了什么是usb host?USB是英文Universal Serial Bus的缩写,中文含义是“通用串行总线”。
它不是一种新的总线标准,而是应用在PC领域的接口技术。
USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
不过直到近期,它才得到广泛地应用。
从1994年11月11日发表了USB V0.7版本以后,USB版本经历了多年的发展,到现在已经发展为2.0版本,成为目前电脑中的标准扩展接口。
USB枚举过程分析
1. 枚举是什么?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。
调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。
USB架构中,hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。
在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。
USB总线拓扑结构见下图(最顶端为主机的Root Hub):USB总线拓扑结构一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道。
然后主机以控制传输(Control Transfer)的方式,通过端点0(Endpoint 0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。
所有的USB设备必须支持标准请求(StandardRequests),控制传输方式(Control Transfer)和端点0(Endpoint 0)。
在讲解枚举之前,先大概说说USB的一种传输模式——控制传输。
这种传输在USB中是非常重要的,它要保证数据的正确性,在设备的枚举过程中都是使用控制传输的。
控制传输分为三个阶段:●建立阶段。
●数据阶段。
●确认阶段。
建立(setup)阶段:都是由USB主机发起,它是一个setup数据包,里面包含一些数据请求的命令以及一些数据。
如果建立阶段是输入请求,那么数据阶段就要输入数据;如果建立阶段是输出请求,那么数据阶段就要输出数据。
如果在数据阶段,即便不需要传送数据,也要发一个0长度的数据包。
数据阶段过后就是确认阶段。
确认阶段刚好跟数据阶段相反,如果是输入请求,则它是一个输出数据包;如果是输出请求,则它是一个输入数据包。
USB信号简介
USB_DM USB Data Minus USB数据负信号即D-USB_DP USB Data Positive USB数据正信号即D+USB_ID 当用作OTG的时候用到该信号,检测ID脚状态高低,判断是主还是从设备。
USB信号为一种差分总线USB的DM、DP有时候会接上拉电阻。
这是为什么。
因为在USB中有Host 和Device之分,在Host端,D+、D-信号各接一个15Kohm的下拉电阻。
而在device端,就有高速和低速的区别。
usb1.0, 1.1,2.0协议中都有定义高低速设备以满足不同情况的需求,这些在硬件上的区别就是:1.高速设备:D+上接一个1.5k的上拉电阻,D-则不接。
2.低速设备:D-上接一个1.5k的上拉电阻,D+则不接。
与高速设备相反。
高速和低速Device插入Host时的区别:a.高速设备D+被拉高,D-则不变b.低速设备D-被拉高,D+则不变这个上拉过程需要时间,在这段时间内,Host检测到该信号,即可判断有设备plug in。
根据检测到的信号,判断是高速还是低速设备。
USB OTG检测原理:USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG)。
USB OTG技术可实现没有主机时设备与设备之间的数据传输。
例如:数码相机可以直接与打印机连接并打印照片,手机与手机之间可以直接传送数据等,从而拓展了USB技术的应用范围。
在OTG中,初始主机设备称为A设备,外设称为B设备。
也就是说,手机既可以做外设,又可以做主机来传送数据,可用电缆的连接方式来决定初始角色(由ID线的状态来决定)。
USB OTG接口中有5条线:2条用来传送数据(D+ 、D-);1条是电源线(VBUS);1条则是接地线(GND)、1条是ID线。
ID线---以用于识别不同的电缆端点,mini-A插头(即A外设)中的ID引脚接地,mini-B插头(即B外设)中的ID引脚浮空。
图解高速USB握手过程
图解高速USB握手过程我们知道,USB全速外设(FS)和低速外设(LS)是通过在D+或D-数据线上上拉1.5K 的电阻予以区别,D+上拉为全速外设,D-上拉为低速外设。
高速外设的识别则比较复杂,需要通过主机与高速外设握手才能识别。
本篇对高速USB握手进行图解说明。
数据采集设备:HD-USB480-II型USB2.0协议分析仪相关知识1、高速外设最初以全速外设的形式出现,即:高速外设在插入USB HUB/HOST时D+数据线上拉1.5K的电阻;2、高速握手成功之后,外设与主机进入高速模式。
如果握手不成功,则返回全速模式;3、在高速握手过程中,USB HUB/HOST要判定与其相连的外设是否支持高速模式,外设也要判定USB HUB/HOST是否支持高速模式。
下图是通过“HD-USB480-II型USB2.0协议分析仪”采集的某品牌U盘的高速握手过程。
1、【Index13】:USB HUB/HOST检测到插入的外设为全速外设,即:D+数据线被上拉;2、【Index14】:USB HUB/HOST检测到插入的外设为全速外设后,复位总线。
即:向总线发送SE0。
此SE0的持续时间不得小于2.5微秒。
本例的SE0持续时间为3.63微秒;3、【Index15】:高速外设检测到总线上SE0的持续时间不小于2.5微秒后,向总线发送Chirp K信号。
此Chirp K信号的持续时间不小于1毫秒且不大于7毫秒。
本例的Chirp K信号持续时间为2毫秒;4、【Index16】:高速外设发送Chirp K信号结束后,总线回复到SE0状态。
如果USB HUB/HOST支持高速模式,则必须在Chirp K信号结束后100微秒内做出响应。
本例中USB HUB/HOST在Chirp K信号结束后58.23微秒时做出了响应;5、【Index17-22】:HUB/HOST在Chirp K信号结束后100微秒内做出了响应,向总线发送连续的Chirp K/J对,每个Chirp K信号或Chirp J信号的宽度不小于40微秒且不大于60微秒(本例为50-60微秒之间),每2个相邻的Chirp K和Chirp J信号之间的间隔不应大于2.5微秒。
USB上的DM DP ID上下拉电阻分析
USB上的DM,DP拉电阻分析DM,DP上拉电阻分析:①usb有主从设备之分,主设备有:pc, 现在市面上的那些插u-disk即可播放mp3的“mp3”之类的。
usb 信号是差分信号,信号线为D+, D-,。
在usb host 端,D+,D- 各接一个15kohm 的下拉电阻,而在usb device端,这时就有高速低速设备的区别了。
usb1.0, 1.1,2.0协议中都有定义高低速设备以满足不同情况的需求,这些在硬件上的区别就是:高速设备:d+ 接一个1.5kohm的上拉电阻,d-不接;低速设备则相反。
这样当usb device 插入到host中时,如果是高速设备,则d+被拉高,d-不变;低速设备则与之相反。
这个上拉过程需要大概2.5us的时间,host这这个时间内便检测到了该信号,即可判断有device plug in,和该device的类型,然后开始通讯,枚举。
等。
ID上下拉或者悬空分析:②USB OTG(on the go)就是既可以做host又可以做client。
我们一般是作为client接受pc传输数据,作为host时可以接打印机直接把手机中的照片打印出来判别是host还是client是靠USB_ID这根pin当作为client时,USB_ID基本是悬空的(内部有上拉)如果侦测到USB_ID被拉低,就被认为是作为host,向外输出所以需要外部client设备把USB_ID拉低其中ID脚在OTG功能中才使用。
由于Mini-USB接口分Mini-A、B和AB接口。
如果你的系统仅仅是用做Slave,那么就使用B接口。
系统控制器会判断ID脚的电平判断是什么样的设备插入:如果是高电平,则是B接头插入,此时系统就做主模式(master mode) ;如果ID为低,则是A接口插入,然后系统就会使用HNP对话协议来决定哪个做Master,哪个做Slave。
这些说明为技术人员总结的,仅供参考。
总结:A型ID接下拉;B型ID悬空或者接上拉;(A,B,AB型都是5个脚)我们手机上一般用的都是B型Mini-USB口3、VBUS USB电源开关,起限流(原因)最近碰到有些客户遇到USB的使用问题,主要表现在U盘不识别,VBUS 错误等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Usb充电器的D+,D-是短路的,因此可以通过检测数据线的连接方式来判断是usb充电还是usb传数据。
USB host 如何判断插入的设备是高速还是低速的设备
2010-03-17 00:04 1333人阅读 评论(1) 收藏 举报
d+ d-
0 0 PC
0 1 错误设备
1 0 非标准充电器
1 1 标准充电器
usb有主从设备之分,主设备有:pc,现在市面上的那些插u-disk即可播放mp3的“mp3”之类的,usb信号是差分信号,信号线为D+, D-。 在usb host 端, D+,D-各接一个15kohm 的下拉电阻,而在usb device端,这时就有高速低速设备的区别了。usb1.0, 1.1,2.0协议中都有定义高低速设备以满足不同情况的需求,这些在硬件上的区别就是:高速设备:d+接一个1.5kohm的上拉电阻,d-不接;低速设备则相反。
USB OTG(on the go)就是既可以做host又可以做client,我们一般是作为client接受pc传输数据,作为host时可以接打印机直接把手机中的照片打印出来。判别是host还是client是靠USB_ID这根pin,当作为client时,USB_ID基本是悬空的(内部有上拉),如果侦测到 USB_ID被拉低,就被认为是作为host,向外输出,所以需要外部client设备把USB_ID拉低。