zoukankan      html  css  js  c++  java
  • USB开发中需要弄清的一些概念

    USB接口芯片

    USB接口芯片一般是一块专用MCU,集成USB电气层协议。而USB协议就是USB固件做的事了,也有一部分USB协议MCU会集成

    USB固件

    一般地,USB设备需要一个固件程序来处理USB协议,以及设备相关的内容。比如一个USB的数据采集卡,固件就是除了处理USB协议,就是负责采数据到端点。而读取数据就是设备驱动做的事了。再比如,USB设备配置时,使用控制传输,里面有一些错误处理也是固件需要做的,当然某些错误处理就是简单的不响应。

    USB设备驱动

    USB设备驱动提供应用层一些USB设备通讯的接口,一个重要的细节就是Windows提供了总线驱动,所以USB设备驱动只应当和总线驱动做接口对接。我们不需要关心总线驱动和主控制器驱动间的关系,当然了解了也不是件坏事。

    设备枚举

    设备枚举从电气层开始讲十分复杂,一般驱动开发者可以不了解。在驱动层,USB总线驱动程序会识别到USB设备,并且最终得到一些ID,系统就去查注册表加载对应驱动。如果没有查到对应驱动,那么系统就会提示发现新硬件。这些工作都是总线驱动程序在使用控制管道和固件通讯,得到设备描述符,进而得到一些ID。更详细一点的细节是:

    USB控制器或者HUB发现硬件,控制器驱动和总线驱动发现硬件,总线驱动向PNP管理器报告,PNP管理器进一步要求总线驱动报告什么设备(ID),PNP得到ID后查询注册表,然后AddDevice。

    USB描述符

    USB描述符用于描述USB设备的各种特性,其实是硬件的配置信息,其中重要的是需要和软件配合的信息。比如某个端点的方向、类型等

    端点

    端点由USB抽象出来,端点号,缓冲区用于实际USB固件和驱动数据交换。端点号是一个数,这个数由芯片厂家决定,USB描述符里需要正确使用

    管道

    一条端点到端点数据传输的通道,由USB协议抽象出来,没有实际硬件对应。比如控制管道和接口芯片通讯,固件配合处理各总USB控制传输

    USB通讯

    USB本身是一种通讯,所谓USB设备是一种按USB协议通讯的方式驱动的设备。像其它外设一样,只不过USB通讯较为复杂,复杂到时序控制无法满足要求的程度。

  • 相关阅读:
    使用java实现面向对象 第一章
    深入.NET平台和C#编程笔记 第九章 文件操作
    MySQL_第七章
    MySQL_第八章
    MySQL_第五章
    MySQL_第四章
    MySQL_第三章
    MySQL_第二章
    MySQL_第一章
    S2_OOP第二章
  • 原文地址:https://www.cnblogs.com/iwasmu/p/1491802.html
Copyright © 2011-2022 走看看