精华内容
下载资源
问答
  • 安卓 USB 设备检测.rar

    热门讨论 2013-10-02 14:02:24
    用于安卓手机(有OTG功能)检测接入的USB设备(如 USB转串口工具)的信息,具体如下: 设备名称 厂商ID 产品标志 设备类码 子类码 协议码 设备标志 接口数量 可编程组种类 散列码 端点数 端点类型 端点地址 端点属性 端点...
  • 用于查看连接Android手机的USB设备的信息,便于后续开发使用!
  • QT5 下 usb 设备插拔检测

    热门讨论 2015-12-09 18:20:13
    基于QT 5做的usb插拔检测,我主用是用于检测usbkey的(通过 VID,PID),其他设备应该也是可以的,测试过u盘,usb转串口线,usb key都能识别,
  • 这是一个完整的实例,用VB.net写的,开发环境是win8+VB2012。 可以用来查询所有的USB设备,获得设备ID和硬件号等详细信息。没有用DLL等太多的东西。代码很小。应该在其它版本也是能用的。
  • 本节讨论使用DSF设备模拟器测试USB驱动程序的技术。 本节包括: 创建一个模拟USB 2.0 EHCI控制器 在模拟USB 2.0控制器中插入设备 模拟设备PNP枚举 用设备模拟器协调I/O 在计算机上重启模拟设备 使用设备仿真...

    本节讨论使用DSF设备模拟器测试USB驱动程序的技术。

    本节包括:

    创建一个模拟USB 2.0 EHCI控制器

    在模拟USB 2.0控制器中插入设备

    模拟设备PNP枚举

    用设备模拟器协调I/O

    在计算机上重启模拟设备

    使用设备仿真的测试策略


    创建一个模拟USB 2.0 EHCI控制器

    在将模拟设备插入模拟USB 2.0控制器之前,必须在目标系统上创建和枚举控制器。若要创建并枚举控制器,请运行DSF运行时在目标程序系统中安装的Softehcicfg.exe应用程序,该程序文件在\Program Files\dsf\softehci 文件夹中。

    若要安装控制器,请打开命令窗口并运行 softehcicfg /install。这个命令将向DSF根枚举器驱动程序(Dsfroot.sys)发送一条消息,并告诉它枚举模拟EHCI控制器。您必须等待控制器枚举,然后才能将模拟设备插入其中。您可以查看是否通过检查设备管理器和查找“Microsoft USB 2.0 Host Controller Simulator”条目来枚举控制器,或者使用诸如微软 Windows Device Testing Framework (WDTF)之类的工具以编程方式枚举控制器。

    注意,控制器的设备ID是"PCI\VEN_1414&DEV_0004&SUBSYS_00041414&REV_00"。这个ID是微软的一个被正式分配的PCI设备ID,它不应该与任何其他现有的PCI设备冲突。

    您还可以通过使用Softehcicfg.exe意外地从目标系统中移除模拟的EHCI控制器。若要移除模拟的EHCI控制器,请打开命令提示符窗口并运行softehcicfg /remove

    您还可以枚举多个同时模拟的EHCI控制器,将实例参数添加到 softehcicfg /install。例如,您可以运行softehcicfg /install 0,然后运行softehcicfg /install 1

    控制器将由即插即用(PnP)管理器分配唯一的设备实例ID,这些ID以实例号结束,实例号表示为最多三个前导零。使用上面的示例,控制器可以被分配以下设备实例ID:

    Instance 0:
    PCI\VEN_1414&DEV_0004&SUBSYS_00041414&REV_00\1&1222FD94&9&0000
    
    Instance 1:
    PCI\VEN_1414&DEV_0004&SUBSYS_00041414&REV_00\1&1222FD94&9&0001

    若要删除多个实例,请将实例参数追加到softehcicfg /remove。若要移除在较早示例中添加的两个控制器,请运行softehcicfg /remove 0,然后运行softehcicfg /remove 1。 

    原文链接:https://docs.microsoft.com/zh-cn/previous-versions/windows/hardware/dsf/ff538281%28v%3dvs.85%29


    在模拟USB 2.0控制器中插入设备

    有两种方法将设备直接插入模拟USB 2.0控制器:

    调用IDSF::HotPlug,传递设备的DSFDevice对象(IDSFDevice)。

    调用SoftEHCIRootHubPort::HotPlug, 传递设备的SoftUSBDevice 对象(ISoftUSBDevice)。

    通常,测试应用程序将把设备模拟器插入控制器,但是模拟器可以选择性地设计成将自己插入控制器。如果测试应用程序插入设备,则测试应用程序将需要访问其SoftUSBDevice 对象或其DSFDevice对象。每个对象都可以从另一个对象访问。考虑下面的VBScript代码示例。

    Set DSFDevice = SoftUSBDevice.DSFDevice
    
    const IID_ISoftUSBDevice = "{9AC61697-81AE-459A-8629-BF5D5A838519}"
    Set SoftUSBDevice = DSFDevice.Object(IID_ISoftUSBDevice)

    如果模拟设备被实现为COM对象,那么DSFDevice 对象或SoftUSBDevice 对象可以作为属性公开。例如, DSF USB Loopback Device Simulation通过LoopbackDevice::DSFDevice 属性公开DSF设备对象。 

    IDSF::HotPlug方法采用两个参数:总线的名称和模拟设备的DSFDevice对象。EHCI控制器模拟器的总线名称是“USB2.0”。HotPlug返回一个DSFBus 对象(IDSFBus),您可以稍后使用它来拔出设备。(例如,从\Program Files\dsf\USBLoopback文件夹中与DSF运行时一起安装的RunLoopbackSample.wsf loopback示例脚本中),考虑以下代码示例:

    Dim LoopbackDev    : Set LoopbackDev = WScript.CreateObject("SoftUSBLoopback.LoopbackDevice", "LoopbackEvent_")
    Dim LoopbackDSFDev : Set LoopbackDSFDev = LoopbackDev.DSFDevice
    Dim DSF : Set DSF = CreateObject("DSF.DSF")
    Dim Bus : Set Bus = DSF.HotPlug(LoopbackDSFDev, "USB2.0")
    
    ... use the loopback device ...
    Bus.UnPlug LoopbackDSFDev

    为了使用SoftEHCIRootHubPort::HotPlug,你必须访问EHCI控制器模拟器。可以通过为控制器搜索IDSF::Devices 属性来访问此模拟器,如EnumSimulatedDevices例程中的以下示例脚本所示。 

    '/
    ' Function EnumSimulatedDevices
    '
    ' This function searches the collection of simulated devices
    ' referenced by DSF.Devices for a device that exposes an ancillary
    ' object from DSFDevice.Object with the specified GUID. If found it returns the
    ' DSFDevice object otherwise it returns Nothing.
    '/
    const IID_IDSFBus = "{E927C266-5364-449E-AE52-D6A782AFDA9C}"
    Dim CtrlrDev : Set CtrlrDev = EnumSimulatedDevices(IID_IDSFBus)
    ...
    Private Function EnumSimulatedDevices(SearchObjectGUID)
    
        Dim DevSought : Set DevSought = Nothing
        Dim Dev       : Set Dev = Nothing
        Dim DSF       : Set DSF = CreateObject("DSF.DSF")
        Dim ObjSought : Set ObjSought = Nothing
    
        For Each Dev in DSF.Devices
            If Dev.HasObject(SearchObjectGUID) Then
                Set ObjSought = Dev.Object(SearchObjectGUID)
                If Not ObjSought Is Nothing Then
                    Set DevSought = Dev
      Exit For
                End If
            End If
        Next
    
        Set EnumSimulatedDevices = DevSought
    
    End Function

    如果使用多个模拟EHCI控制器并且需要根据设备实例ID查找特定控制器,则可以修改前面的EnumSimulatedDevices示例函数,以通过检查循环中每个设备的InstanceID 属性来检查设备实例ID,如下面是代码示例。

          For Each Dev in DSF.Devices
            If Dev.HasObject(SearchObjectGUID) And (Dev.InstanceID = SearchID) Then
                Set ObjSought = Dev.Object(SearchObjectGUID)
                If Not ObjSought Is Nothing Then
                    Set DevSought = Dev
      Exit For
                End If
            End If
        Next

    根集线器端口对象可从EHCI控制器的端口集合获得。下面的代码示例演示如何获取根集线器端口1的对象。

    Dim CtrlrObj : Set CtrlrObj = CtrlrDev.Object(IID_EHCICtrlrObj)
    Dim RootHubPorts : Set RootHubPorts = CtrlrObj.Ports
    Dim RootHubPort1 : Set RootHubPort1 = RootHubPorts(1)

     第一行从控制器的DSFDevice 对象中提取SoftEHCICtrlr 对象。第二行获取根集线器端口集合,第三行获取端口1的SoftEHCIRootHubPort 对象。

    最后一步是使用设备模拟器的SoftUSBDevice 对象将设备模拟器插入根集线器端口。例如,考虑 loopback设备的以下代码示例。

    const IID_ISoftUSBDevice = "{9AC61697-81AE-459A-8629-BF5D5A838519}"
    RootHubPort1.HotPlug LoopbackDevice.DSFDevice.Object(IID_ISoftUSBDevice)

     要删除设备,运行RootHubPort1.Unplug。

    如果调用SoftEHCIRootHubPort::Unplug 或者 IDSFBus::UnPlug,目标系统将该调用视为意外移除,并且在功能上等同于从根集线器端口移除USB电缆而不首先在软件中启动移除(例如,通过使用安全移除硬件图标)。

    原文链接:https://docs.microsoft.com/zh-cn/previous-versions/windows/hardware/dsf/ff542263(v%3dvs.85)


    模拟设备PNP枚举

    从目标系统的角度来看,模拟USB设备的枚举与真实USB设备的枚举实际上没有什么不同。您可以在设备管理器中看到设备,还可以通过使用工具(如微软 Windows Device Testing Framework (WDTF)或 SetupDiXxx API)以编程方式发现设备。

    在Windows Vista的Windows Driver Kit(WDK)中包含的DSF版本(版本6000)中,在插入第二设备之前,必须等待枚举一个设备。类似地,当您拔出模拟设备时,在移除或插入附加设备之前,必须完成设备移除。

    从WDK for Windows Server 2008(版本6001)中包含的DSF版本开始,可以使用外部集线器模拟器同时枚举多个设备。类似地,可以通过拔出父外部集线器模拟器来拔除多个设备。

    原文链接:https://docs.microsoft.com/zh-cn/previous-versions/windows/hardware/dsf/ff542301(v%3dvs.85)


    用设备模拟器协调I/O

    使用设备模拟器测试驱动程序通常需要使用设备启动I/O,同时在模拟器中运行操作以满足那些I/O请求。测试用例可以是肯定的(期望I/O成功完成)或否定的(期望I/O以特定错误完成)。

    如果测试包括设备的多个实例,则必须将设备模拟器的实例与即插即用(PnP)设备实例匹配。目前,DSF中没有能够将模拟的USB设备与给定设备实例ID积极匹配的工具。

    枚举设备的实例(例如,通过使用微软Windows Device Testing Framework [WDTF]),插入模拟设备,然后重新枚举以找到设备的其他实例。

    通过使用RegisterDeviceNotification 来接收设备到达通知,并在插入模拟设备之后等待通知,从而处理WM_DEVICECHANGE消息或注册设备通知。有关WM_DEVICECHANGE RegisterDeviceNotification的更多信息,请参见MSDN Library 网站。

    在您已经明确地标识了设备并且可以对其发起I/O之后,您必须确保设备模拟器相应地响应I/O请求。例如,考虑DSF USB Loopback Device Simulation,它具有一个具有一个批量IN端点和一个批量OUT端点的单个接口。Rwbulk.exe(您可以在\src\usb\bulkusb\exe文件夹中的WDK安装中找到)调用Microsoft Win32 API函数CreateFile 以打开bulkusb 驱动程序(在\src\usb\bulkusb\sys文件夹中)公开的设备接口,然后调用Win32 API函数ReadFile 和 WriteFile发送I/O请求。WriteFile 调用使控制器向大容量端点发送数据传输。loopback 设备通过将接收到的数据排队到批量IN端点,在CLoopbackDevice::OnWriteTransfer函数(在\src\Test\DSF\USB\SoftUSBLoopback文件夹中)中处理这个I/O事件。来自Rwbulk.exe的后续ReadFile调用导致控制器请求来自大容量IN端点的数据传输,然后大容量IN端点使用排队的数据。

    您可以设计一个确定的肯定测试用例,以便loopback 设备向测试应用程序中触发一个事件,以指示收到批量OUT传输。测试应用程序可以调用WriteFile,等待确认收到批量OUT传输的事件,然后等待WriteFile调用完成。这个过程需要两个线程或使用异步重叠I/O,因为WriteFile调用将被阻塞,直到I/O完成。

    您可以设计一个否定的测试用例,以便对loopback设备进行编程,以在下一个事务上从批量OUT端点返回事务错误。您可以通过向回送设备添加属性来完成这种情况(例如,LoopbackDevice.ErrOnNextBulkOUT = True)。

    loopback设备可以在每次调用CLoopbackDevice::OnWriteTransfer开始时检查该属性,如果属性为真,则返回USB_ERR作为事务状态,并将属性重置为false。在设置此属性之后,测试应用程序可以调用WriteFile ,然后检查它是否返回相应的错误。

    原文链接:https://docs.microsoft.com/zh-cn/previous-versions/windows/hardware/dsf/ff538279(v%3dvs.85)


    在计算机上重启模拟设备

    模拟USB 2.0控制器在重启、关机、休眠和挂起操作之间被持久化,直到通过运行softehcicfg /remove被移除。

    模拟的外部集线器和模拟的USB设备不会在DSF的当前版本中重新启动。

    外部集线器和设备在关机、休眠、暂停时不会被删除,但是,在计算机重新启动时也不会出现。这种情况类似于在系统关闭或暂停USB电缆时物理删除连接到控制器的装置。

    原文链接:https://docs.microsoft.com/zh-cn/previous-versions/windows/hardware/dsf/ff542262(v%3dvs.85)


    使用设备仿真的测试策略

    设备模拟提供了新的机会,以提高您的驱动程序测试策略,是不可用的真实硬件。最明显的好处是您必须手动完成测试的自动化。总有一些测试用例必须手动运行,例如必须知道能够100%工作的通用用户集成场景和涉及无法模拟的潜在电气和时序问题的场景。

    仿真提供了机会来达到代码路径和生成数据值,这在真实硬件不可能做到的。您应该彻底检查您的驱动程序和设备应用程序代码,以确定如何使用仿真覆盖这些情况。

    仿真还允许在驱动程序开发过程中修改,这在真实硬件不可能做到的。在开发过程中,应考虑以下事项以加强过程:

    • 创建一个自动化的构建验证测试(BVT)。
    • 创建一个可以在虚拟机上运行的自动化BVT。使用微软虚拟服务器实现对虚拟机的自动化控制。
    • 创建一个自动回归套件,可以在不到一天的时间内运行。
    • 创建一个较小的自动化回归套件,开发人员可以在他们的计算机或笔记本电脑上运行。
    • 创建一个自动化的压力套件,包括即插即用(PNP)和I/O测试。
    • 使用仿真作为新的驱动程序开发人员的学习工具。
    • 在将硬件提交到硬件原型之前,使用模拟来测试潜在的硬件更改。

    原文链接:https://docs.microsoft.com/zh-cn/previous-versions/windows/hardware/dsf/ff542527(v%3dvs.85)

     

    展开全文
  • Linux内核中识别USB设备过程

    千次阅读 2019-09-28 21:50:24
    1.usb全速模式和高速模式的区别,名字...2.如何查看插入电脑的usb设备是全速模式还是高速模式?? Linux下使用dmesg命令查看 设备中下查看方法: 插入后直接看打印信息 3.怎么测试的说,电脑下设备是高速的,...

    1.usb全速模式和高速模式的区别,名字上感觉速度应该差不多??

    Usb1.1又是usb2.0全速模式,传输速率只有12Mbps

    Usb2.0高速模式达到了480mbps

    擦类这明显不是一个等级。。。。

    2.如何查看插入电脑的usb设备是全速模式还是高速模式??

    Linux下使用dmesg命令查看

    设备中下查看方法:

    插入后直接看打印信息

    3.怎么测试的说,电脑下设备是高速的,803P下是全速的怎么测试的??

    是通过查看注册信息的方式查看的。

    4.803的usb和设备的cy68013有什么区别??

    本质上没有区别,类似于stm32内部ADC和外部ADC??、

    OHCI  1.0规范

    EHCI  2.0规范

    Usb device 设备

    Usb host  主控制器

    Usb控制器时钟是在u-boot中设置???

    通过终端查看设备的打印信息,当插入多道设备后,终端会自动打印信息

    有点奇怪,当前是设备枚举出错了。

    挂接u盘是可以的

    意思是没有一个端口要这个多道设备,导致枚举不成功??为什么没人要呢??

    echo i>/proc/driver/musb_hdrc.0;

    将设备强制改为全速模式

    可以成功挂载。

     

    通过上面的打印信息可以分析出是设备枚举失败,-71 是协议错误,而且是usb主控制器的错误。

    为什么别的设备可以挂接为高速设备??、为什么自己的设备挂接为全速设备就可以正常挂载。

    有可能是全速模式下,这设备的相关配置好了,但是高速模式下没配置好

    U盘和多道的传输方式应该是不一样的。

     

    需要查看各用的什么传输方式,查看该方式是否正常运行,应该就可以了吧?

    主机发送个信号给设备,确认是什么设备,然后usb回指令。如果不是高速设备,主机不会发送高速握手协议,但是上面的打印信息肯定是发送了握手协议了,但是usb设备没回??

    有可能电脑发送的切换信号,usb设备识别了,803发的切换信号,usb来不及识别。

    2、 高速设备的检测

    在连接的最开始阶段,高速设备是当成全速设备来识别的,因此,高速设备的D+线上也会有一个1.5K欧姆的上拉电阻到电源,但是与全速设备不相同的是,高速设备对这个上拉电阻,会有一个开关进行通断控制。因为

    高速信号传输是通过电流驱动的,而且D+和D-上的信号幅值在0V和400mv之间切换,所以传输时不允许有一个接到3.3V的上拉电阻存在。以下就是简化的高速设备检测流程。

    1,集线器或者主机必须确认连在它端口上的设备不是低速设备,如果是低速设备,则集线器或者主机就不会发起高速握手协议。

    2,当集线器或者主机确认端口设备不是低速设备后,它将在握手协议的最开始阶段,T0时刻,发出一个SE0(信号或称命令、状态。不管是什么,理解了就好),用作复位

    3,设备检测这个SE0,进行复位。(这里设备根据自己处在何种状态,会作出不同的动作)

    4,假如设备是高速设备,则它会让上拉电阻仍然连接,但会使高速的端接无效,并驱动高速信号电流流向D-线上,这将在总线上产生一个K脉冲。该脉冲,在复位的TO时刻后,必须持续至少1.0 ms,但不能超过7.0ms

    5,集线器在观察到设备发出的K脉冲至少2.5 us后,必须能检测出这个脉冲。假如集线器没有检测出这个脉冲,则它必须持续的发出SE0信号,直到复位结束。

    6,在当K脉冲信号在总线上存在不超过100 us的时间后,集线器必须开始发送间隔的K脉冲和J脉冲序列信号,在J’s和K’s之间的总线上不允许有空闲状态发生。该序列信号在复位结束之前将持续一段时间,不少于100 us,但不长于500 us。(这保证了总线上始终保持活动状态,阻止设备进入高速挂起状态。)每一个独立的K脉冲和J脉冲的持续时间至少为40 us,但不能长于60 us。

    7,在完成脉冲序列信号发生之后,集线器发出SE0信号,直到复位结束。在复位结束时,集线器必须转到高速使能状态,而无需在数据线上作出任何改变。

    8,在设备完成它自己的脉冲信号(K脉冲)后,它将寻找高速集线器的脉冲信号。设备至少需要观测到K-J-K-J-K-J脉冲序列,来作为检测到一个有效的集线器脉冲信号。每一个独立的K脉冲和J脉冲至少需检测到2.5 us。

    A),假如设备检测到脉冲序列K-J-K-J-K-J,则在检测到后的500 us(TWTHS)之内,设备要求断开D+的上拉电阻,并使能高速端接,进入高速缺省状态。即已进入高速模式

    B),假如设备在完成它自己的脉冲信号之后的1.0 ms到2.5 ms之内,没有检测到脉冲序列K-J-K-J-K-J,则设备要回复到全速缺省状态,并等待至复位结束。(进入全速模式)

                    

    应该是803的切换时序和多道的切换时序没有对上。然后就需要分析他们的时序和查看一下切换时的电流情况。(切换流程较复杂)

    通过linux查看,确实是注册的高速设备,所以,这个设备是支持高速的

    先复习一下usb的基础知识,方便更深入的学习

    现象:当将一个usb设备接入windows时

    1.显示usb名称

    2.没安装过驱动会跳出一个对话框,提示安装驱动

     

    电脑怎么知道的该显示那个名称???

    1.windows里面有了usb的总线驱动程序,接入usb设备后,是总线驱动程序知道的你是什么名字,我们安装的是设备驱动程序

    所以usb设备的层次就分为两层

    》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

    设备驱动层         //需要自己写的(了解数据含义)

    <--Usb总线驱动层   //一般为内核自带(1.识别设备,2.找到并安装设备驱动程序3.提供usb读写函数   不了解数据含义)

    <--硬件设备(usb主机控制器)

    》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

    写的usb总线驱动程序相当于写的usb主机控制器驱动程序,usb主机控制器接有usb设备,设备驱动程序相当于是支持usb设备的,设备驱动程序为了能够访问usb设备,需要借助usb总线驱动程序提供的函数,把包发给usb主机控制器,然后主机控制器将数据发给usb设备。(usb驱动程序框架)

     

    Usb总线驱动程序负责什么??

    Usb总线驱动负责识别usb设备,然后给usb设备找到对应的驱动程序

     

    Usb设备种类很多,怎么能一接入电脑就能识别出来??

    Usb和pc设备都要遵守一些规范

    当usb设备接入电脑后,pc会发送指令询问你是什么?

    Usb回复我是什么什么设备。

    两人都要用一样的协议都要说中文

    Usb总线驱动程序发出指令获取设备信息(描述符)

    Usb设备必须返回描述符给PC

     

    PC上有很多设备,PC是怎么进行区分的??

    Usb接口只有四条线 5v GND D+ D-

    接在usb总线上的每一个usb设备都有自己的编号

    Pc想访问某个usb设备时,发出命令都要有对应的编号地址

     

    刚接入的时候,没编号,怎么通讯??

    每一个设备接入pC时,usb总线驱动程序都会给它分配一个编号

     

    Usb设备接入PC时,还没有编号,怎么把编号告诉他们??

    在未分配新编号之前,PC使用默认的0编号进行通讯

     

    Usb一接入,电脑能够立即发现???

    是硬件做的处理,pc 端D+ D-接有15k下拉电阻

    Usb设备的D-端和5v之间接有一个1.5k电阻,当插入pc时,5v有电压了,就会拉高D-引脚,电脑就知道有设备接入了。

     

    D-和5v之间有一个1.5k电阻代表的是全速设备,D+和5v之间有一个1.5k电阻代表的是一个高速设备。(应该是之前的标准,当前的板卡没有发现遵循这个)

     

    Usb是主从结构:所有的usb传输都是从主机这方发起,usb设备没有主动通知usb主机的能力

     Usb鼠标滑动一下产生数据,但是它没有能力通知PC机来读取数据。

     

    怎么保证数据是及时的??

    PC机不断的查询。

    Usb的传输类型

    U盘(不实时,文件可靠 批量传输

    Usb鼠标(时间有保证,可靠 中断传输—)(借助概念,使用的查询方式))

    Usb摄像头(数据不可靠,实时 实时传输

    控制传输:文件可靠,实时(usb的识别过程)

     

     

    Usb传输的对象:端点(endpoint)

    读u盘 写u盘 可细化为,把数据写到u盘的端点1,从u盘的端点2读取数据

    除了端点0外的端点都是单向的。

    端点0用于控制传输。既能输出也能输入

    每一个端点都只有一种传输类型和传输方向

    术语中的输入(IN)输出(OUT)永远都是基于usb主机来说的

    比如鼠标,鼠标的数据是从鼠标传到PC机,对应的端点称为输入端点。

     

    Usb主机控制器协议规范:(硬件层)

    UHCI  OHCI  EHCI

    UHCI:intel(适用于低速1.5mbps和全速usb设备12mbps)

    OHCI:microsoft(微软) (适用于低速和全速usb设备)

    EHCI: 高速(480Mbps)

     

    Usb总线驱动程序

    1.识别设备,

    (1)分配地址,并告诉usb设备(set address)

    (2)发出命令获取描述符

    2.找到并安装设备驱动程序

    3.提供usb读写函数

     

    Usb设备自带一个hub

     

    查看插入usb设备后的串口打印信息,在内核目录下搜索

    信息。(usb device using)

    Grep “USB device using” * -nR

    --》Drivers/usb/core/hub.c
    --》hub_port_init() //hub_set_address()把地址告诉usb设备
                   //usb_get_device_descriptor//获取描述符
    	            //usb_new-device(udev)
    		        Err= usb_get_configuration(udev)//将描述符读出并解析
    		        Usb_parse_configuration//解析
                    Device_add  //把设备放入bus_type的dev链表,从usb_bus的driver链表里读出usb_driver,把usb_interface和usb_driver的id_table一一比较如果能匹配调用usb_driver的probe函数
    
    --》hub_port_connect_change()//choose_address(udev)给新设备分配编号
    	    udev =usb_alloc_dev(hdev,hdev-bus,port1);
    		dev->dev.bus=&usb_bus_type;
    
    --》hub_events()//hub事件
    --》hub_thread//hub线程,在队列里面休眠
    --》Kick_khubd唤醒这个线程
    --》hub_irq
    --》硬件上的操作
    

     

     

    usb驱动程序编写:

    目的:usb鼠标用作按键

    1.分配 input_dev

    2.设置

    3.注册

    4.硬件操作

     

    怎么写usb设备驱动?

    1.分配设置usb_driver结构体

               .id_table //支持哪些设备

               .probe //具体的解析操作

               .disconnect

    2.注册

     

     

    驱动程序的编写:

    1.入口函数(注册结构体)

    2.出口函数(卸载结构体)

    3.module_init module_exit 修饰一下

    4.module_license("GPL")规范

    5.分配设置usb_driver结构体

     

    测试驱动程序:

    1.make menuconfig去掉原来的usb鼠标驱动

    2.make uImage 使用新的内核启动

    3.insmod usbmouse_as_key.ko

    4.在开发板上接入拔出usb鼠标

    展开全文
  • u盘插入电脑,提示“无法识别的usb设备”。 U盘插进电脑里,提示无法识别USB设备是为什么? 维修思路:对于此现象,首先的一点说明u盘的电路基本正常,而只是跟电脑通信方面来有故障,而对于通信方面有以下几点...

    u盘插入电脑,提示“无法识别的usb设备”。 U盘插进电脑里,提示无法识别USB设备是为什么?

     

    https://iknow-pic.cdn.bcebos.com/023b5bb5c9ea15cee2aeaaabb3003af33b87b2d4?x-bce-process=image/resize,m_lfit,w_600,h_800,limit_1

    维修思路:对于此现象,首先的一点说明u盘的电路基本正常,而只是跟电脑通信方面有故障,而对于通信方面有以下几点要检查:

    (1)U盘的usb接口,usb接口没有什么特别硬件,就是两根数据线一正一负,所以在检查此电路时只要测量数据线到主控之间的线路是否正常即可,一般都在数据线与主控电路之间会串接两个小阻值的电阻,以起到保护的作用,所以要检查这两个电阻的阻值是否正常。

    (2)时钟电路,因U盘与电脑进行通信要在一定的频率下进行,如果U盘的工作频率和电脑不能同步,那么系统就会认为这是一个“无法识别的设备”了。这时就要换晶振了。而实际zd维修中真的有很多晶振损坏的实例!

    (3)主控,如果上述两点检查都正常,那就可以判断主控损坏了。在于主控坏了的情况下,如果能找到识别方式和量产软件还是有望修复的。

    有时候是电脑配置低,比如说主机上是USB1.1的接口有时就检测不到USB2.0的优盘或者设备,相反的话,主机2.0也有时检测不到1.1,如果换台电脑试后也不行的话,可能优盘硬件出现问题了.

     

     

    可能接口类型不匹配,可以试试机箱后面的接口 "无法识别的USB设备"处理方法

     1.前置USB线接错。当主板上的USB线和机箱上的前置USB接口对应相接时把正负接反就会发生这类故障,这也是相当危险的,因为正负接反很可能会使得USB设备烧毁。 所以尽量采用机箱后置的USB接口,也少用延长线.也可能是断口有问题,换个USB端口看下.

    2.USB接口电压不足。当把移动硬盘接在前置USB口上时就有可能发生系统无法识别出设备的故障。原因是移动硬盘功率比较大要求电压相对比较严格,前置接口可能无法提供足够的电压,当然劣质的电源也可能会造成这个问题。解决方法是移动硬盘不要接在前置USB接口上,更换劣质低功率的电源或尽量使用外接电源的硬盘盒,假如有条件的话。   

    3.主板和系统的兼容性问题。这类故障中最著名的就是NF2主板与USB的兼容性问题。假如你是在NF2的主板上碰到这个问题的话,则可以先安装最新的nForce2专用USB2.0驱动和补丁、最新的主板补丁和操作系统补丁,还是不行的话尝试着刷新一下主板的BIOS一般都能解决。   

    4.系统或BIOS问题。当你在BIOS或操作系统中禁用了USB时就会发生USB设备无法在系统中识别。解决方法是开启与USB设备相关的选项。就是开机按F2或DEL键,进入BIOS,把enable usb device选择enable。

     5.拔插要小心,读写时千万不可拔出,不然有可能烧毁芯片。XP中任务栏中多出USB设备的图标,打开该图标就会在列表中显示U盘设备,选择将该设备停用,然后你再拔出设备,这样会比较安全。 其实判断软件硬件问题很简单,在别的机器或换个系统(98下要驱动哦)试试就可以了.

    有些小的问题不妨先用专门软件格式化下.还有提醒大家WINDOWS下格式化时要选择FAT,不要选FAT32。

     U盘提示无法识别的USB设备维修 故障提示如图: 此故障大部份是U盘接口电路部份引起的。

    1、首先换一根USB延长线或换个USB口,排除掉U盘之外的因素。

    2、摇动U盘的插头,看是否有松动。

    3、拆开U盘外壳,把USB接口的四个脚补焊一遍。

    4、故障依旧。我们知道在数据线到主控之间有两个起保护作用的电阻(如下图),用万用表测量其中的一个开路。

    5、从坏的主控板上拆下一个27欧的电阻换上,故障排除。

    总结: U盘的故障一般都较容易修,应急情况也可以直接短接此电阻。

    维修例二: 一Reidio牌128M的U盘插入电脑USB孔时提示无法识别的设备。此U盘为ChipsBank方案。 备注:图中为导线焊上二极管临时代用,维修时应将三脚IC折下来,将二极管直接焊在电路板上。 有配件的人员应使用规格相同的稳压IC换上。

    检修过程: 1、根据故障分析,可以排除是软件的问题。 2、拆开U盘,首先看晶振、闪存等有无虚焊 3、用备用的12M晶振代换上,故障依旧 4、用万用表测USB接口的V+电压有5V正常 5、再测稳压IC的输入端5V也正常,测稳压IC的输出端只有1.3V,正常应该为3.3V左右 6、由于芯片没有发热现像,判断稳压IC损坏。 7、手头刚好没有这种稳压IC,应急用一个二极管并在三脚IC的输入端和输出端之间,如图。

    8、故障排除。 无法识别的USB设备:Unknown USB Device. 很多人都遇到过的一个问题,所谓“无法识别”对于操作系统来说,或者是驱动程度有问题,或者是USB设备出现了问题,或者是计算机与USB设备连接出现了故障,解决问题的方法也是从这几处着手。

    对于不同的设备会有不同的处理方法,了解USB设备正常工作需要的条件以及一些可能影响USB设备正常工作的因素,会有助于解决问题。

    下面是保证USB设备可以正常工作的一些条件:

    (1)USB设备本身没有任何问题——可以通过在其它计算机上进行测试,保证能正常工作;

    (2)USB接口没有任何问题——可以通过连接其它的USB设备在此接口上进行测试;

    (3)USB设备的驱动程序已经正确安装,如果有详细说明书的USB设备,一定要仔细查看相应的说明文件,按照说明安装相应的驱动程序;Windows 2000以后的操作系统以识别大部分的USB设备,Windows 98以前的操作系统可以安装USB设备自带的驱动或者安装通用的USB设备驱动程序。

    下面是可能影响USB设备正常工作的一些情形:

    (1)USB设备已经出现了故障(同样的条件以前可以正常使用,现在出现了问题);

    (2)USB接口有问题,比如a.USB前置接口极性接反,这可能导致USB设备烧毁,所以一定要仔细看一下主板说明书,防止接错;b.接口电压不足,一些移动硬盘常会有这样的问题,主机后面的USB接口往往会比前置USB接口更可靠一些;c.主板与操作系统兼容性有问题,安装最新的主板驱动程序可以最大程度地避免此类问题;d.Bios中禁止了USB设备,可能通过更改BIOS中相应的设置来解决;e.操作系统问题,可以通过重装操作系统来解决;(

    3)USB驱动程序有问题:如果怀疑驱动有问题时,应当保证安装了该设备相应型号的最新驱动程序或确认操作系统不需要安装特别的驱动,最新的驱动可以通过从网上设备生产商的主页上去查找。 当USB设备出现问题时,除了根据实际的错误提示信息寻找解决方案以外,还要仔细查看USB设备的具体品牌、型号、生产商,在搜索结果时包括这些信息,可以更容易地找到对应的解决方法。 象有些插拔费劲需要经常处于连接状态的USB设备暂时出现故障,操作系统不停地出现“无法识别的USB设备”这样恼人的提示时,可以在设备管理器中暂时关闭通用串行总线控制器中相应的USB端口或者禁止相应的USB设备。 关于无法识别的usb设备 MP3不联机的原因可能有多种,我自己接触过很多种的MP3,大致归纳一下解决办法: 1。电脑设置 MP3插入后,就会在右下角弹出电脑正在尝试连接此USB设备的一些信息,有时就会弹出对话框让用户选择,有些用户还没看清就点了否,或者因为电脑一些初始的设置问题,禁止了USB的一些功能。 解决办法:右键点“我的电脑”,选“属性”--“硬件”--“驱动器签名”,在此选择“忽略”,点“确定”。然后重新插上MP3,还是不连的话,再右键点“我的电脑”--“属性”--“硬件”--“设备管理器”,从中找到“通用串行总线控制器”,右键,然后“扫描检测硬件改动”。 2。驱动程序问题 MP3光盘里往往会配“98驱动程序”、“升级工具”,在2000以上系统中,虽然理论上不需要安装也能联MP3,但往往安装过驱动后,能让联机变的更顺畅。所以试试安装这些工具,如果没有“98驱动”,就把“升级工具”安装一下(有些MP3的驱动集成在升级工具中)。 3。MP3本身的电压问题 由于现在MP3的趋势是千方百计的降低成本,所以各公司不断采用新方案,新主控,新FLASH芯片,并不是说这些新东西就偷工减料了,问题在于这些新东西往往需要长期的调试才能达到最佳,但市场状况只能允许MP3工厂测试能在电脑的一个接口上联机就投产,所以常出现不联机、掉盘等现象。 这种情况下就需要用户多试几次,换插不同USB接口,单独再配一条质量好的USB线(一般越粗越好,铜的比铁的好),然后保证MP3供电正常(用充电器把电充满再试)。 4。长期不使用后,出现的不联机 有些MP3长期不使用后,不能联机,甚至不能充电。主要是由于MP3未关闭电源,长期不用导致放电过度,达不到启动电压引起的。 解决办法是,把MP3连接到电脑或充电器上后,反复的拔/插USB接口和打开/关闭电源开关(ON/OFF键,如果没有就反复按PLAY键)。比如,插上USB接口后,关ON/OFF充2分钟,再开ON/OFF充2分钟,再拔下来重插,再充2分钟。这样做的目的是让MP3先少量充进一些电,达到启动电压。 5。如果这些方法仍然不能解决问题,基本能肯定MP3本身出现问题。此时,应该及时的进行返修或者退换,以免错过保修期。强烈反对用户自行拆机,MP3的种类比手机都多,而且往往需要原厂的程序重新升级,所以自行拆机大多导致不能享受免费服务。也不建议用户自行对MP3升级。

    系统报错“无法识别的USB设备”

    【故障现象】 使用U盘时电脑意外断电,重新开机后U盘无法正常使用,插上后系统就报错“无法识别的USB设备”。使用其他原来都能正常使用的USB接口设备,都会提示同样的错误信息。将USB设备插到电脑的其他USB接口上,都能正常工作。

    【分析故障】 从现象上看,USB设备和主板的接口都没有损坏,怀疑是意外断电导致系统设置错误。

    【问题处理】 从“控制面板”进入添加和删除硬件的窗口,将所有USB设备都删除,重新安装需要使用的USB设备驱动程序。重新启动电脑,U盘等USB设备插在原来的故障接口上能够正常工作。

    无法识别的USB设备-笔记本硬盘故障 移动硬盘,插在前置USB接口,无法识别。 这种情况,很大原因是供电问题。 由于USB硬盘在工作的时候也需要消耗一定的电能,如果直接通过USB接口来取电,很有可能出现供电不足。因此,几乎所有的移动硬盘都附带了单独的外接电源或者是通过键盘取电的PS2转接口,这时只要事先连接好外接电源或者通过PS2转接线与键盘连接好,确保给移动硬盘提供足够的电能之后再试试,这时应该可以正常使用了吧。需要特别提醒大家注意的是,建议使用移动硬盘之前都确保有足够的供电,否则很可能由于供电不足导致硬盘损坏。

    对于从来没有使用过USB外接设备的朋友来说,即使正确安装了驱动程序也有可能出现系统无法检测USB硬盘的情况,这主要是由于主板默认的CMOS端口是关闭的,如果没有将其设置为开启状态,那么Windows自然无法检测到移动硬盘了。为了解决这个问题,我们可以重新开机,进入CMOS设置窗口,并且在 “PNP/PCI CONFIGURATION”栏目中将“Assign IRQ For USB”一项设置为“Enable”,这样系统就可以给USB端口分配可用的中断地址了。 还有可能是USB接口类型不符导致移动硬盘无法使用。比如计算机配置的USB接口是1.1标准的,而购买的移动硬盘是USB 2.0标准的接口,这就要求连接计算机和移动硬盘的连接线必须支持USB 2.0标准。因为高速移动设备插入低速集线器,该设备可能不被正常安装,而有些朋友在使用移动硬盘的同时还使用优盘,为了方便就直接使用优盘附送的USB 1.1标准连接线,这样就导致USB 2.0标准的移动硬盘无法正确识别。只要将连接线更换为USB 2.0标准的即可解决此故障。

     

     

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvpmiafagcKsvVHCmFTpg2bEczIWeEhiajczsvqXOHzAFNkd9PkoKw6XPw/0?wx_fmt=png

    U盘位置不可用 无法访问 K:\  磁盘机构损坏且无法读取

     

     

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvQYABIzEJrljDLI2S2t6FkFowoUHk8WbRuia7RMHpwPzGLkGkJnicibE8g/0?wx_fmt=png

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvgUZCwPAqksH9kO8S20NqJ0tct4enhACtAndVFL7LQGgw3rLnCayoHg/0?wx_fmt=png

    ​上图提示解决办法:U盘插进电脑里,提示无法识别USB设备

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvEibTlDlpWkwHib0A5M4VziaeSmIFzlCJaDfNiayMHXmLYcW7WnYg2E4fQQ/0?wx_fmt=png

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsv8iav9tvxMAZNdfGuJ5x2retJkLG8yplaPG5z5UVwGxPl777w3Rr0sgw/0?wx_fmt=png

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvf0aXP14xVeI9jA4iaiauGgIfs0JqzodL4icKpalPDbr2Z9JggiaSEojxfg/0?wx_fmt=png

    解决方法:

    1、u盘本身故障,将u盘进行格式化的操作或者将其进行量产低格进行修复。

    2、检查“设备管理器”,是不是将USB Root Hub的节电设置勾选了,去除这个选项可以提高U盘使用的稳定性。

    3、可能是计算机系统故障,我们可以尝试下换台计算机试试看,是否是计算机系统故障引起u盘出现错误代码“10”,确认是计算机故障的话,就建议重装win7系统。

    4、可能是u盘的usb接口不良,建议清理下u盘接口或者将u盘插入其它的usb接口。

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsv1ibEwY1Fsrz9enmHibwg9suTRX4swLYCZDs0iamzyFsaZWicMwRTjooy2w/0?wx_fmt=png

    上图提示的解决办法:

    1、有些机子右键菜单里多了“自动播放”、“open”、“browser”等命令项目,u盘无法正常使用。

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvr7gfxbFFYVwnib4FYPib9sbDUXWnMicIALia538vh5g0Csx4iacKBgpSgBw/0?wx_fmt=png

    2、所有exe程序被关联,且快捷方式图标全换成类似.com程序的默认图标。

    u盘里面的文件夹变成*.exe格式文件或快捷方式文件,不能正常打开。

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvzEU7eibib16jPt6OWiaRpotmkBJBFGvIbnWwticwFibiaicjaGHLY8HU7Ncvg/0?wx_fmt=png

    3、选择“开始”菜单→“运行”命令,输入cmd进入命令行模式,输入“c:”按回车,再输入“cd\”按回车进入c盘根目录,在c盘根目录下输入dir/a查看所有文件,会出现autorun.inf和ravmon.exe这两个文件的就是中病毒的特征。

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsvBy20bBEQZEXKJD0icZSuMdib8icEZoFrWNE9oiaDx2DRrlzMjavuNepsgA/0?wx_fmt=png

    https://mmbiz.qlogo.cn/mmbiz_png/nfltW9YNHrU0Gfo2Nq4d21Ie8yib6ygsveumGJPG3GibhuvwqSdboq8hGOaZkMZCewHG52fcnebOufxTnYKXxqlg/0?wx_fmt=png

     

    展开全文
  • USB设备开发流程

    千次阅读 2019-01-05 17:41:01
    USB设备的开发一般包括主机端(上位机)驱动程序的开发(如果您的USB设备符合某一标准设备类且主机端已经提供了此类设备的驱动程序的话,则可以省掉此步骤)和USB设备端驱动程序的开发,有时还可能包...

    转自

    http://www.baiheee.com/OpenSource/Easy%20USB%2051%20Programer/Easy%20USB%2051%20Programer2.htm

     

    USB设备的开发一般包括主机端(上位机)驱动程序的开发(如果您的USB设备符合某一标准设备类且主机端已经提供了此类设备的驱动程序的话,则可以省掉此步骤)和USB设备端驱动程序的开发,有时还可能包括主机端应用程序的设计工作。

    1、设备系统需求分析

      设备系统需求分析是进行USB设备设计的第一步,通过对USB设备功能特性和USB主机端操作系统的分析,可以获得实现该USB设备的软硬件设计需求。

      在该阶段,设计者需要充分了解该设备的应用环境(如USB主机的软件、硬件平台),这样以用来确定是否需要提供USB主机端相关软件工作,以便该设备能得到广泛地应用。为了提供合理的软硬件设计方案,设计者还需要充分了解市场上的USB接口芯片,不同的USB接口芯片在USB协议上有着不同程度的支持,比如,对数据包地址的硬件自动识别、CRC16CRC5的自动生成等等。

      当然,在确定具体的软硬件需求时,产品的开发费用和开发周期也是必须考虑的因素。

    2、设备硬件需求

      通过设备系统需求分析,以及对市场上USB接口芯片的充分了解,设计者必须确定相应的设备硬件结构以及可能采用的硬件。在选择器件时,需要考虑到器件体积、功耗等,因为,小的设备功耗,有利于采用总线供电模式。必须通过设备系统的功耗来确定是否需要提供本地电源。  

    3、设备软件需求

       在确定了设备的硬件结构以后,该设备的软件结构就会同时产生。不同的硬件平台,可能需要不同程度的软件支持。

    4、设备硬件设计

      在选定USB控制芯片以后,如果是带USB接口的单片机,则是一般单片机应用系统的开发;反之,就是如何把USB接口芯片与单片机应用系统融合的问题。一般USB接口芯片都支持多种并行总线结构(复用/非复用),可以方便的与多种单片机接口。硬件设计中要注意的就是USB接口芯片的时钟速度比较高,所以匹配网络的设计以及PCB布线要特别关注。

    5、设备软件设计

      USB设备的软件设计主要包括两部分:一是USB设备端的软件开发,主要完成USB协议处理与数据交换以及其它应用功能程序。二是主机端的程序,由USB通信程序(驱动程序)和用户服务程序两部分组成,主机端用户服务程序通过USB通信程序(驱动程序)与系统USBDI(USB Device Interface)通信,由系统完成USB协议的处理与数据传输。主机端程序的开发难度比较大,程序员不仅要熟悉USB协议,如果需要开发主机端驱动程序的话,还要熟悉主机端操作系统(如常用的WINDOWS系统)体系结构并能熟练运用DDK工具(驱动程序开发工具)。

    6、设备调试

    要快捷、成功的开发一个USB设备,正确、合理的调试方法是必不可少的环节。调试基本分三步进行:首先对外部设备(单片机部分)借助PC调试软件(常用的有:bus houndUSB MONITOR,某些芯片生产商还提供针对特定芯片的调试软件)将设备端的USB协议(主要有描述符请求、端口配置、地址设置以及基本数据交换)调通(当然我们还可以使用USB分析仪等开发设备,但此类设备一般比较昂贵)。然后,用调试好的USB设备接口来开发、调试PC软件,这一步相对比较容易。最后,加上USB设备端的其它用户程序,对整个完整的系统进行系统调试。

     

     

     

    了解USB的通讯过程

    USB的两根信号线负责与总线上的设备交换数据。这些电缆形成了所有设备必须共享的惟一的一条传输通路。 RS-232有一条Tx线用来传输一个方向的数据,一条Rx线用来传输另一个方向的数据。与RS-232不同,USB的一对电线只传输一个不同的信号,不 同方向的信号要按顺序来传输。

      因为所有的传输共享一个数据通道,所以每一个事务必须包括事务的源和目的地址。每个设备有一个由 主机分配的惟一的地址,所有的数据都是流向主机或从主机获取。每个事务都是以主机发送数据块开始的,这个数据块包括接收设备的地址以及设备中被称为终端的 一个特殊位置。一个设备发送的每个数据是为了响应从主机接到的请求而发送的接收到的数据或状态信息。  

      USB通信分为两类,根据它们被用于原始配置还是应用中。在配置通信中主机通知设备,设备收到通知后准备好交换数据。大部分这类通信发生在上电或连接时主机检测到外设的时候。应用通信出现在主机的应用程序与一个检测到的外设交换数据的时候。这些是实现设备应用的通信。例如,对鼠标来说,应用通信是发送点击动作给主机,主机端应用程序接收到这个动作后执行相应动作。

    配置通信

      在检测过程中,设备的固件对主机的一系列标准请求做出响应。设备必须识别出每一个请求,返回被请求的信息。

      在PC上,Windows执行检测工作,所以不涉及用户编程的问题。然而,为了完成检测工作,Windows必须有两个可用的文件:一个识别这个设备驱动程序的文件名和位置的INF文件和设备驱动程序本身,如果您的项目符合某种通用设备类,则操作系统可能已经提供了此类设备的所需的这两个文件,而不需要开发人员自己提供。

      根据设备以及设备将被如何使用,设备驱动可能是如下两者之一;Wlndows自带的或芯片或外设厂商提供的。INF文件是一个文本文件,通常你可以对驱动提供考提供例子,稍加修改就可以得到了。

    应用通信

      在主机已经与设备交换了检测信息并且设备驱动已经被分配并载入后,应用通信过程可以非常顺利地进行下去了。在主机上,应用程序可以使用标准Windows API功能来读和写设备。在外设上,传输数据通常需要把要发送的数据放在USB控制器的传输缓冲器中,当一个硬件中断发出数据已经到达的信号时从接收缓冲器中读取接收到的数据,并且在完成传输时确保外设准备好下一次传输。

    主机与设备建立通信的过程

      主机端的USB集线器监视着它的每个端口的信号线的电压,当USB设备插入主机时,信号线的电平会发生变化,此时主机知道有新设备插入了。

      当主机检测到设备的插入后会首选重启这个设备,接着主机发出Get_Port_Status请求来验证设备是否已经重启,设备重启后主机通过检测根信号线的电平状态判断设备的速度。

      主机发送第一次Get_DescriptorwValue字段的高字节为0x01,表示设备描述符)请求取得设备描述符,设备描述符提供了设备的多种信息,包括:设备通讯终端0的最大包的大小,设备支持的配置号以及有关这个设备的其它信息,主机通过对这些信息的分析以确定接下来的通信动作。

      设备描述符里规定了设备一个或多个配置描述符,主机再次或多次发出Get_DescriptorwValue字段的高字节为0x02,表示配置描述符)指令来读取这些配置描述符,第一次只读出配置描述符的前9个字节,这9个字节里包含了配置描述符和它的所有从属描述符(接口描述符、端点描述符)的总长度,然后主机根据这个长度读出设备的所有配置描述符(当然包括其所有从属描述符)。

      在读取完配置描述符后,若之间读取的设置描述中指定了相关字符串描述符(用来描述厂商、产品和设备序列号信息的)的索引,主机将发出若干次Get_DescriptorwValue字段的高字节为0x03,表示字符串描述符)命令来获得这些字符串描述,此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。

      在主机已经从它的描述符中知道了能够知道的所有信息后,便开始为这个设备安装驱动程序。

      加载了USB设备驱动以后,主机发送Set_Configuration命令请求为该设备选择一个合适的配置。

      至此,USB枚举过程结束,设备可以正常使用了。

    USB命令(请求)和USB描述符

    一、USB命令

      USB规范里,对命令一词提供的单词为“Request”,但这里为了更好的理解主机与设备之间的主从关系,将它定义成命令

      所有的USB设备都要求对主机发给自己的控制命令作出响应,USB规范定义了11个标准命令,它们分别是:Clear_FeatureGet_ConfigurationGet_DescriptorGet_InterfaceGet_StatusSet_AddressSet_ConfigurationSet_DescriptorSet_InterfaceSet_FeatureSynch_Frame。所有USB设备都必须支持这些命令(个别命令除外,如Set_DescriptorSynch_Frame)。

      不同的命令虽然有不同的数据和使用目的,但所有的USB命令结构是一样的。下表所示为USB命令的结构: 

    1USB命令的结构

    偏移量

     长度(字节)

    描述

    0

    bmRequestType

    1

    位图

    请求特征:
    D7:传输方向
    0=主机至设备
    1=设备至主机
    D6..5:种类
    0=标准
    1=
    2=厂商
    3=保留
    D4..0:接受者
    0=设备
    1=接口
    2=端点
    3=其他
    4..31 保留

    1

    bRequest

    1

    命令类型编码值(见表3

    2

    wValue

    2

    根据不同的命令,含义也不同

    4

    wIndex

    2

    索引或偏移

    根据不同的命令,含义也不同,主要用于传送索引或偏 移

    6

    wLength

    2

     

    如有数据传送阶段,此为数据字节数。

    下表列出了USB11种标准命令

    2USB11种标准命令

    命令

    bmRequestType

    bRequest

    wValue

    wIndex

    wLength

    Data

    Clear_Feature

    00000000B
    00000001B
    00000010B

    CLEAR_FEATURE

    特性选择符


    接口号
    端点号

    Get_Configuration

    10000000B

    GET_CONFIGURATION

    配置值

    Get_Descriptor

    10000000B

    GET_DESCRIPTOR

    描述表种类(高字节,见表5)和索引(低字节)

    零或语言标志

    描述表长

    描述表

    Get_Interface

    10000001B

    GET_INTERFACE

    接口号

    可选设置

    Get_Status

    10000000B
    10000001B
    10000010B

    GET_STATUS

    零(返回设备状态)
    接口号(对像时接口时)
    端点号(对象是端点时)

    设备,
    接口 ,
    端点状态

    Set_Address

    00000000B

    SET_ADDRESS

    设备地址

    Set_Configuration

    00000000B

    SET_CONFIGURATION

    配置值(高字节为0,低字节表示要设置的配置值)

    Set_Descriptor

    00000000B

    SET_DESCRIPTOR

    描述表种类(高字节,见表5)和索引(低字节)

    零或语言标志

    描述表长

    描述表

    Set_Feature

    00000000B
    00000001B
    00000010B

    SET_FEATURE

    特性选择符(1表示设备,0表示端点)


    接口号
    端点号

    Set_Interface

    00000001B

    SET_INTERFACE

    可选设置

    接口号

    Synch_Frame

    100000010B

    SYNCH_FRAME

    端点号

    帧号

    其中bRequest为命令编码值,含意见表3

    3USB标准命令的编码值

    bRequest

    Value

    GET_STATUS

    0

    CLEAR_FEATURE

    1

    为将来保留

    2

    SET_FEATURE

    3

    为将来保留

    4

    SET_ADDRESS

    5

    GET_DESCRIPTOR

    6

    SET_DESCRIPTOR

    7

    GET_CONFIGURATION

    8

    SET_CONFIGURATION

    9

    GET_INTERFACE

    10

    SET_INTERFACE

    11

    SYNCH_FRAME

    12

     

    二、USB描述符

      USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述符即设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,还有百标准描述符,如类描述符。USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。

      USB设备通过描述符反映自己的设备特性。USB描述符是由特定格式排列的一组数据结构组成。

      在USB设备枚举过程中,主机端的协义软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。

      USB描述符包含标准描述符、类描述符和厂商特定描述3种形式。任何一种设备必须USB标准描述符(队字符串描述符可选外)。

      在USB1.X中,规定了5种标准描述符:设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。

      每个USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过描述符提供。

      在USB主机访问USB设备的描述符时,USB设备依照设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述符和接口描述符,如果USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。

    1、设备描述符

      设备描述符给出了USB设备的一般信息,包括对设备及在设备配置中起全程作用的信息,包括制造商标识号ID、产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一个USB设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上时USB主机所读取的第一个描述符,它包含了14个字段,结构如下:

    4USB设备描述符的结构

    偏移量

    大小

    描述

    0

    bLength

    1

    数字

    此描述表的字节数

    1

    bDecriptorType

    1

    常量

    描述符的类型(此处应为0x01,即设备描述符)

    2

    bcdUSB

    2

    BCD

    此设备与描述表兼容的USB设备说明版本号(BCD 码)

    4

    bDeviceClass

    1

    设备类码:
    如果此域的值为0则一个设置下每个接口指出它自己的类,各个接口各自独立工作。
    如果此域的值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了这些接口集体的类定义。
    如果此域设为FFH,则此设备的类由厂商定义。

    5

    bDeviceSubClass

    1

    子类

    子类挖码
    这些码值的具体含义根据bDeviceClass 域来看。
    bDeviceClass 域为零,此域也须为零
    bDeviceClass 域为FFH,此域的所有值保留。

    6

    bDevicePortocol

    1

    协议

    协议码
    这些码的值视bDeviceClass bDeviceSubClass 的值而定。
    如果设备支持设备类相关的协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然而,可能它的接口支持设备类相关的协议。如果此域的值为FFH,此设备使用厂商定义的协议。

    7

    bMaxPacketSize0

    1

    数字

    端点0的最大包大小(仅8,16,32,64
    为合法值)

    8

    idVendor

    2

    ID

    厂商标志(由USB-IF组织赋值)

    10

    idProduct

    2

    ID

    产品标志(由厂商赋值)

    12

    bcdDevice

    2

    BCD

    设备发行号(BCD 码)

    14

    iManufacturer

    1

    索引

    描述厂商信息的字符串描述符的索引值。

    15

    iProduct

    1

    索引

    描述产品信息的字串描述符的索引值。

    16

    iSerialNumber

    1

    索引

    描述设备序列号信息的字串描述符的索引值。

    17

    bNumConfigurations

    1

    数字

    可能的配置描述符数目

    其中bDescriptorType为描述符的类型,其含义可查下表(此表也适用于标准命令Get_DescriptorwValue域高字节的取值含义):

    5USB描述符的类型值

    类型

    描述符

    描述符值

    标准描述符

    设备描述符(Device Descriptor)

    0x01

    配置描述符(Configuration Descriptor

    0x02

    字符串描述符(String Descriptor

    0x03

    接口描述符(Interface Descriptor

    0x04

    端点描述符(EndPont Descriptor

    0x05

    类描述符

    集线器类描述符(Hub Descriptor

    0x29

    人机接口类描述符(HID

    0x21

    厂商定义的描述符

     

    0xFF

    设备类代码bDeviceClass可查下表:

    6、设备的类别(bDeviceClass

    值(十进制)

    值(十六进制)

    说明

    0

    0x00

    接口描述符中提供类的值

    2

    0x02

    通信类

    9

    0x09

    集线器类

    220

    0xDC

    用于诊断用途的设备类

    224

    0xE0

    无线通信设备类

    255

    0xFF

    厂商定义的设备类

    下表列出了一个USB鼠标的设备描述符的例子,供大家分析一下:

    7、一种鼠标的设备描述符示例

    字段

    描述符值(十六制)

    bLength

    0x12

    bDecriptorType

    0x01

    bcdUSB

    x0110

    bDeviceClass

    0x00

    bDeviceSubClass

    0x00

    bDevicePortocol

    0x00

    bMaxPacketSize0

    0x08

    idVendor

    0x045E(Microsoft Corporation

    idProduct

    0x0047

    bcdDevice

    0x300

    iManufacturer

    0x01

    iProduct

    0x03

    iSerialNumber

    0x00

    bNumConfigurations

    0x01

    2、配置描述符

      配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。如果主机发出USB标准命令Get_Descriptor要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给USB主机。

    8USB配置描述符的结构

       偏移量

        

     大小

      

       描述

          0

    bLength

    1

       数字

    此描述表的字节数长度。

          1

    bDescriptorType

    1

       常量

    配置描述表类型(此处为0x02

          2

    wTotalLength

    2

       数字

    此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符)

          4

    bNumInterfaces

    1

       数字

    此配置所支持的接口个数

          5

    bCongfigurationValue

    1

       数字

    SetConfiguration()请求中用作参数来选定此配置。

          6

    iConfiguration

    1

       索引

    描述此配置的字串描述表索引

          7

    bmAttributes

    1

       位图

    配置特性:
    D7 保留(设为一)
    D6 自给电源
    D5 远程唤醒
    D4..0:保留(设为一)
    一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE) 请求得到

          8

    MaxPower

    1

        mA

    在此配置下的总线电源耗费量。以 2mA 为一个单位。

    下面是一种硬盘的配置描述符示例:

    9、一种硬盘的配置描述符示例

    字段

    描述符值(十六进制)

    bLength

    0x09

    bDescriptorType

    0x02

    wTotalLength

    0x01F

    bNumInterfaces

    0x01

    bCongfigurationValue

    0x01

    iConfiguration

    0x00

    bmAttributes

    0x0C

    MaxPower

    0x32

    3、接口描述符

      配置描述符中包含了一个或多个接口描述符,这里的接口并不是指物理存在的接口,在这里把它称之为功能更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备至少就有两个接口

      如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述符,那么在响应USB主机的配置描述符命令时,USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配置描述符的一部分被返回。接口描述符不可直接用Set_DescriptorGet_Descriptor来存取。

      如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。

    10USB接口描述符的结构

    偏移量

    大小

    说明

           0

    bLength

    1

    数字

    此表的字节数

           1

    bDescriptorType

    1

    常量

    接口描述表类(此处应为0x04

           2

    bInterfaceNumber

    1

    数字

    接口号,当前配置支持的接口数组索引(从零开始)。

           3

    bAlternateSetting

    1

    数字

    可选设置的索引值。

           4

    bNumEndpoints

    1

    数字

    此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。

           5

    bInterfaceClass

            1

    接口所属的类值:
    零值为将来的标准保留。
    如果此域的值设为FFH,则此接口类由厂商说明。
    所有其它的值由USB 说明保留。

           6

    bInterfaceSubClass

            1

    子类

    子类码
    这些值的定义视bInterfaceClass域而定。
    如果bInterfaceClass域的值为零则此域的值必须为零。
    bInterfaceClass域不为FFH则所有值由USB 所保留。

           7

    bInterfaceProtocol

            1

    协议

    协议码:bInterfaceClass bInterfaceSubClass 域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议.

           8

    iInterface

            1

    索引

    描述此接口的字串描述表的索引值。

    对于bInterfaceClass字段,表示接口所属的类别,USB协议根据功能将不同的接口划分成不的类,其具体含义如下表所示:

    11USB协议定义的接口类别(bInterfaceClass

    值(十六进制)

    类别

    0x01

    音频类

    0x02

    CDC控制类

    0x03

    人机接口类(HID

    0x05

    物理类

    0x06

    图像类

    0x07

    打印机类

    0x08

    大数据存储类

    0x09

    集线器类

    0x0A

    CDC数据类

    0x0B

    智能卡类

    0x0D

    安全类

    0xDC

    诊断设备类

    0xE0

    无线控制器类

    0xFE

    特定应用类(包括红外的桥接器等)

    0xFF

    厂商定义的设备

    4、端点描述符

      端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。

      除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。

    12USB端点描述符的结构

    偏移量

    大小

    说明

    0

    bLength

    1

    数字

    此描述表的字节数长度

    1

    bDescriptorType

    1

    常量

    端点描述表类(此处应为0x05

    2

    bEndpointAddress

    1

    端点

    此描述表所描述的端点的地址、方向:
    Bit 3..0 : 端点号.
    Bit 6..4 :
    保留,为零
    Bit 7:    方向,如果控制端点则略。
    0:输出端点(主机到设备)
    1:输入端点(设备到主机)

    3

    bmAttributes

    1

    位图

    此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。
    Bit 1..0 :传送类型
    00=控制传送
    01=同步传送
    10=批传送
    11=中断传送
    所有其它的位都保留。

    4

    wMaxPacketSize

    2

    数字

    当前配置下此端点能够接收或发送的最大数据包的大小。
    对于实进传输,此值用于为每帧的数据净负荷预留时间。在实际运行时,管道可能不完全需要预留的带宽,实际带宽可由设备通过一种非USB定义的机制汇报给主机。对于中断传输,批量传输和控制传输,端点可能发送比之短的数据包
     

    6

    bInterval

    1

    数字

    周期数据传输端点的时间间隙。
    此域的值对于批传送的端点及控制传送的端点无意义。对于同步传送的端点此域必需为1,表示周期为1ms。对于中断传送的端点此域值的范围为1ms255ms

    下表是一种鼠标的端点描述符的示例,该端点是一个中断端点:

    13、一种鼠标的端点描述符示例

    值(十六进制)

    bLength

    0x07

    bDescriptorType

    0x05

    bEndpointAddress

    0x81

    bmAttributes

    0x03

    wMaxPacketSize

    0x04

    bInterval

    0x0A

    5、字符串描述符

      字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode编码。

      主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:

    14USB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符)

    偏移量

    大小

         描述

    0

    bLength

    1

    N+2

    此描述表的字节数

    1

    bDescriptorType

    1

    常量

    字串描述表类型(此处应为0x03

    2

    wLANGID[0]

    2

    数字

    语言标识(LANGID
    0

         

    N

    wLANGID[x]

    2

    数字

    语言标识(LANGID
    X

    该字符串描述符双字节的语言ID的数组,wLANGID[0]~wLANGID[x]指明了设备支持的语言,具体含义可查看USB_LANGIDs.pdf

      主机根据自己需要的语言,再次向设备发出USB标准命令Get_Descriptor,指明所要求得到的字符串的索引值和语言。这次设备所返回的是Unicode编号的字符串描述符,其结构如下:

    15Unicode字符串描述符(响应主机请求时真正表示字符串编码的字符串描述符)

    偏移量

    大小

    描述

    0

    bLength

    1

    数字

    此描述表的字节数(bString域的数值N2

    1

    bDescriptorType

    1

    常量

    字串描述表类型(此处应为0x03

    2

    bString

    N

    数字

    UNICODE 编码的字串

    bString域为设备实际返回的以UNICODE编码的字符串流,我们在编写设备端硬件驱动的时候需要将字符串转换为UNICODE编码,您可以通过一些UNICODE转换工具进行转换。这里推荐由百合电子工作室开发的一款USB描述符生成工具USB Unicode 字符串描述符生成器,它专门为编写设备端驱动程序的需要而定制,可以非常方便将您需要的字符串转换成UNICODE格式,进而导入您的C或汇编程序代码中,以下是它的界面:

    http://www.baiheee.com/Documents/090518/090518112619/USB%20Unicode%20StringDescriptor%20Generator1.jpg

    USB Unicode 字符串描述符生成器-生成C语言格式

    http://www.baiheee.com/Documents/090518/090518112619/USB%20Unicode%20StringDescriptor%20Generator2.jpg

    USB Unicode 字符串描述符生成器-生成汇编格式

    展开全文
  • Usb设备插拔检测, 方法:利用检测USB设备的PID, VID的方法进行设备识别。 1.原型在codeproject, 原来版本是vs2005, 我改成了vs6. 2. 改成vs6后,在设备串比对的地方改了下。 整理时间: 2010/06/06 20:18 用途:...
  • C#实时检测USB设备的插拔并响应各个事件,当系统插入U盘等类USB设备是程序检测到,并做出判断,响应各个事件!
  • 基于WPF的USB设备浏览器

    热门讨论 2011-11-09 12:14:07
    采用WPF开发的USB设备浏览器,可以查看系统所有USB HUB和USB设备的详细信息。
  • 2.出现该问题的设备是什么类型的设备(鼠标、U盘、无线网卡等)? 3.是否是驱动问题(可以使用驱动检测软件检测下)? 解决方法一: 注:该方法是普遍解决方法,一般是U盘出现该问题时使用该方法较多。 步骤一: Win+R,...
  • 遍历USB设备,获取USB序列号

    热门讨论 2009-10-31 15:40:22
    遍历USB设备,获取USB序列号 别人写的文章 VC
  • C#与USB设备通信

    千次阅读 多人点赞 2019-07-05 11:29:13
    最近有一个项目,也是我硕士大论文要写的东西,就是从两个线阵相机上读取数据-->分析数据-->做到利用线阵相机检测接触线(铁路接触网)几何参数的功能。...下面说一下我用C#从USB设备接收数据的几点...
  • 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的。一个USB设备由3个功能模块组成:USB总线接口、USB逻辑设备和功能单元: a -...
  • 利用QT自带的QDBus实现一个usb设备管理器:因为要在qt环境下开发一个usb的设备管理器,当插入usb设备时,弹出文件浏览器,用户可进行复制等文件操作。拔掉后关闭文件浏览器。思路是直接利用qt自带的QDBus模块来实现...
  • 获取所有USB设备,列举所有USB设备 #include &lt;INITGUID.h&gt;  #include &lt;setupapi.h&gt; #pragma comment(lib, "setupapi.lib")  #define MY_USB_PID_VID _T("VID_1111&...
  • 当在宿主机上插入一个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别。 再看一种情况...
  • Windows识别USB设备过程

    千次阅读 2018-09-26 17:15:34
    当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此会被主机集线器检测到) 主机知道了新设备连接后 每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给集线器发送一个Get...
  • 《[修复]未知的USB设备(设备描述符请求失败)在Windows 10中》 《双击unknown device由于该设备有问题Windows已将其停止(代码 43)怎么办解决教程》 情况: 1、WIN10,设备管理器->通用串行总线控制器里,...
  • C# 获取USB设备列表

    千次阅读 热门讨论 2019-04-28 11:47:58
    添加CyUSB.dll引用(如果需要识别由CyUSB.sys提供设备驱动的USB设备) 源码: public partial class Form1 : Form { USBDeviceList usbDevices; CyUSBDevice myDevice; public Form1() ...
  • usb 设备遍历

    热门讨论 2013-01-22 11:56:02
    此代码是遍历pc上usb设备。 包含控制器 hub port 设配id 等信息 usb其实和串口是一样的,其端口也是固定的(如果你不接扩展hub)。 有时一台电脑接多个相同的usb设备,如果接连个摄像头(前后各一个),我们如果...
  • Ubuntu下查看usb设备信息

    千次阅读 2020-10-23 10:58:41
    Ubuntu下查看usb设备信息 新来了一个usb 设备, 飞天的加密狗. 怎样来熟悉它? 插上硬件 1. 用dmesg 看看内核说什么? [ 1738.688160] usb 1-1.2: new full-speed USB device number 8 using ehci-pci [ 1738.798968]...
  • Android usb 设备管理器lsusb 分析

    千次阅读 2019-09-04 09:23:53
    在android 平台,我们再调试所有usb 设备时,硬件焊接好后,在内核usb 核心驱动正常情况下(当然只要USB外设遵循标准协议基本没有...通过命令,我们可以查询到当前系统中,在usb 的三条总线分别插入的6个USB设备。 ls...
  • 前面的章节陆续介绍了远程访问USB设备的相关知识,从数据采集端到虚拟总线驱动,到虚拟控制器和根集线器驱动等、 相关文章如下链接: http://blog.csdn.net/fanxiushu/article/details/51420096 (USB设备驱动...
  • 出现未知daousb设备设备...4、将设备管理器中的出现问题的设备右键卸载,然后将设备上的USB外设移除,重启您的电脑; 5、重启后将USB外设重新接入,扫描检测硬件改动,再次查看设备管理器中的问题已经解决。 ...
  • 在设备管理器中出现未知USB设备,设备描述符失败,禁止再启动无效。在没有卸载并且重新安装驱动程序的情况下,尝试以下步骤: 1.去除静电,但不清楚对笔记本是否同样适用; 关机切断电源,长按开机键20秒以上,接...
  • USB设备驱动概述

    千次阅读 2015-06-10 18:15:34
    USB设备驱动· 17.1 USB总线协议· 17.1.1 USB设备简介· 17.1.2 USB连接拓扑结构· 17.1.3 USB通信的流程· 17.1.4 USB四种传输模式· 17.2.1 观察USB设备的工具· 17.2.2 USB设备请求· 17.2.3 设备描述...
  • Linux 查看usb设备信息

    万次阅读 2016-12-15 23:49:13
    下面的信息都是在VMware中运行Ubuntu12-04系统上执行的。同样该命令也支持在嵌入式系统中进行调试USB。一、cat设备节点获取信息在一些...进入到对应的目录也可以看到usb设备更加详细的信息(可以理解为设备描述符)。1、
  • 不能分配USB设备Generic USB3.0 Card Reader[]到虚拟电脑Ubantu 宿主机系统:Win10+64位; 虚拟机:VirtualBox 6.1.16 Linux发行版本:Ubantu18.04 LTS 问题描述:在虚拟机下挂载U盘时,提示错误“不能分配USB...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 206,689
精华内容 82,675
关键字:

usb设备