usb 订阅
USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。 展开全文
USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。
信息
外文名
Universal Serial Bus
外语缩写
USB
推出年代
1994
中文名
通用串行总线
应用领域
计算机领域的接口技术
usb简介
通用串行总线 (Universal Serial Bus,USB) 是一种新兴的并逐渐取代其他接口标准的数据通信方式,由 Intel、Compaq、Digital、IBM、Microsoft、NEC及Northern Telecom 等计算机公司和通信公司于1995年联合制定,并逐渐形成了行业标准。USB 总线作为一种高速串行总线,其极高的传输速度可以满足高速数据传输的应用环境要求,且该总线还兼有供电简单(可总线供电)、安装配置便捷(支持即插即用和热插拔)、 扩展端口简易(通过集线器最多可扩展127 个外设)、传输方式多样化(4 种传输模式),以及兼容良好(产品升级后向下兼容)等优点。 [1]  通用串行总线(universal serial bus,USB)自推出以来,已成功替代串口和并口,成为21世纪大量计算机和智能设备的标准扩展接口和必备接口之一,现已发展到USB 4.0版本。USB 具有传输速度快、使用方便、支持热插拔、连接灵活、独立供电等优点,可以连接键盘、鼠标、大容量存储设备等多种外设,该接口也被广泛用于智能 手机中。计算机等智能设备与外界数据的交互主要以网络和USB接口为主。 [2] 
收起全文
精华内容
下载资源
问答
  • AndroidUSBCamera基于[saki4510t/UVCCamera](https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封装,能够帮助开发者通过几个简单的API实现USB Camera设备...

        AndroidUSBCamera基于[saki4510t/UVCCamera](https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封装,能够帮助开发者通过几个简单的API实现USB Camera设备的检测、连接、预览和音视频数据采集,最重要的是手机无需root,只需支持otg功能即可驱动。主要功能包括:  

    (1)支持USB Camera设备检测,画面实时预览;  
    (2)支持本地录制mp4格式视频,支持实时获取音视频数据流;  
    (3)支持jpg格式图片抓拍;  
    (4)支持获取camera支持的分辨率,和分辨率切换;  
    (5)支持屏蔽声音,重启Camera; 
    (6)支持相机自动对焦;  

    (7)支持调整对比度和亮度

    (8) 支持480P、720P、1080P and higher

    (9) 支持Android5.0,6.0,7.0,8.0,9.0


    如何使用AndroidUSBCamera项目 


    1. 添加依赖到本地工程
      
    第一步 添加JitPack仓库到工程gradle  
    Step 1. Add the JitPack repository to your build file
    Add it in your root build.gradle at the end of repositories:

     

    allprojects {
    repositories {
    ...
    maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' }
    maven { url 'https://jitpack.io' }
    }
    }


    第二步 添加依赖到app Module的gradle   
    Step 2. Add the dependency  

     

     

     

    dependencies {
    compile 'com.github.jiangdongguo:AndroidUSBCamera:1.3.8'
    } 
    

     

    注:最新版为2,3,0

     

     2. 初始化引擎,注册USB设备事件监听器  
      Init AndroidUSBCamera engine,register the USB device event listener  
      

       private USBCameraManager.OnMyDevConnectListener listener = new USBCameraManager.OnMyDevConnectListener() {
            // 插入USB设备
            @Override
            public void onAttachDev(UsbDevice device) {
                if(mUSBManager == null || mUSBManager.getUsbDeviceCount() == 0){
                    showShortMsg("未检测到USB摄像头设备");
                    return;
                }
                // 请求打开摄像头
                if(! isRequest){
                    isRequest = true;
                    if(mUSBManager != null){
                        mUSBManager.requestPermission(0);
                    }
                }
            }
    
    
            // 拔出USB设备
            @Override
            public void onDettachDev(UsbDevice device) {
                if(isRequest){
                    // 关闭摄像头
                    isRequest = false;
                    mUSBManager.closeCamera();
                    showShortMsg(device.getDeviceName()+"已拨出");
                }
            }
    
    
            // 连接USB设备成功
            @Override
            public void onConnectDev(UsbDevice device,boolean isConnected) {
                if(! isConnected) {
                    showShortMsg("连接失败,请检查分辨率参数是否正确");
                    isPreview = false;
                }else{
                    isPreview = true;
                }
            }
    
    
            // 与USB设备断开连接
            @Override
            public void onDisConnectDev(UsbDevice device) {
                showShortMsg("连接失败");
            }
        };
        
        mUVCCameraView = (CameraViewInterface) mTextureView;
        mUVCCameraView.setCallback(new CameraViewInterface.Callback() {
            @Override
            public void onSurfaceCreated(CameraViewInterface view, Surface surface) {
                if(!isPreview && mUSBManager.isCameraOpened()) {
                     mUSBManager.startPreview(mUVCCameraView, new AbstractUVCCameraHandler.OnPreViewResultListener() {
                     @Override
                     public void onPreviewResult(boolean result) {
    
    
                     }
                  });
                  isPreview = true;
                  }
             }
                @Override
                public void onSurfaceChanged(CameraViewInterface view, Surface surface, int width, int height) {
    
    
                }
    
    
                @Override
                public void onSurfaceDestroy(CameraViewInterface view, Surface surface) {
                    if(isPreview && mUSBManager.isCameraOpened()) {
                        mUSBManager.stopPreview();
                        isPreview = false;
                    }
                }
            });
            // 初始化引擎
            mUSBManager = USBCameraManager.getInstance();
            mUSBManager.initUSBMonitor(this,listener);
            mUSBManager.createUVCCamera(mUVCCameraView);


    3. 注册USB设备广播事件监听器,开始Camera预览  
      Register the USB device broadcast event listener and start the Camera Preview

     

     

     

    // 注册USB事件广播监听器
    if(mUSBManager != null){
          mUSBManager.registerUSB();
    }
    // 恢复Camera预览
     if(mUVCCameraView != null){
          mUVCCameraView.onResume();
     }

     


    4. 注销USB设备广播事件监听器,停止Camera预览  
      Unregister the USB device broadcast event listener and stop the Camera Preview

     

     

     

     

    // 注销USB事件广播监听器
     if(mUSBManager != null){
             mUSBManager.unregisterUSB();
      }
     // 暂停Camera预览
     if(mUVCCameraView != null){
             mUVCCameraView.onPause();
     }

     


     5. 图片抓拍
      Picture capturing

     

     

     

     

    if(mUSBManager == null || ! mUSBManager.isCameraOpened()){
              showShortMsg("抓拍异常,摄像头未开启");
              return;
     }
     mUSBManager.capturePicture(picPath, new AbstractUVCCameraHandler.OnCaptureListener() {
              @Override
              public void onCaptureResult(String path) {
                   showShortMsg("保存路径:"+path);
              }
     });

     


    6. 本地录制(可实时获取音视频数据流)
       recoring mp4,and get media real-stream  
       

     

     

     

    if(mUSBManager == null || ! mUSBManager.isCameraOpened()){
               showShortMsg("录制异常,摄像头未开启");
               return;
     }
    if(! mUSBManager.isRecording()){
                        String videoPath = USBCameraManager.ROOT_PATH+System.currentTimeMillis();
                        FileUtils.createfile(FileUtils.ROOT_PATH+"test666.h264");
                        RecordParams params = new RecordParams();
                        params.setRecordPath(videoPath);
                        params.setRecordDuration(0);    // 设置为0,不分割保存
                        params.setVoiceClose(false);    // 不屏蔽声音
                        mUSBManager.startRecording(params, new AbstractUVCCameraHandler.OnEncodeResultListener() {
                            @Override
                            public void onEncodeResult(byte[] data, int offset, int length, long timestamp, int type) {
                                // type = 0,aac格式音频流
                                // type = 1,h264格式视频流
                                if(type == 1){
                                    FileUtils.putFileStream(data,offset,length);
                                }
                            }
    
    
                            @Override
                            public void onRecordResult(String videoPath) {
                                showShortMsg(videoPath);
                            }
                        });
    // 停止录制
    mUSBManager.stopRecording();


    7. 切换分辨率
      update Resulotion  
        

     

    mUSBManager.updateResolution(this, mUVCCameraView, 320, 240, new USBCameraManager.OnPreviewListener() {
                 @Override
                 public void onPreviewResult(boolean isSuccess) {
                        if(! isSuccess) {
                                showShortMsg("预览失败,不支持该分辨率");
                            }else {
                                showShortMsg("以切换到分辨率为320x240");
                            }
                        }
          });  
     // 获取Camera支持得分辨率  
     List<Size> list = mUSBManager.getSupportedPreviewSizes();
     // Camera自动对焦  
     mUSBManager.startCameraFoucs();


    8. 释放引擎资源
      release resource  

     

    // 释放资源
    if(mUSBManager != null){
           mUSBManager.release();
     }

    9. 添加权限
      add permissions  
       

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />


    USBCameraManager  API (Other)

     

    (1) void requestPermission(int index):请求授予开启USB摄像头权限;
    (2) int getUsbDeviceCount():返回查询到的可用USB Camera数目;
    (3) boolean isRecording():判断是否正在录制视频;
    (4) boolean isCameraOpened():判断USB摄像头是否正常打开;
    (5) void release():释放资源
    (6) USBMonitor getUSBMonitor():返回USBMonitor实例;
    (7) mUSBManager.setModelValue(USBCameraManager.MODE_CONTRAST,contrast++); 调整对比度
    (8) mUSBManager.setModelValue(USBCameraManager.MODE_BRIGHTNESS,brightness++);调整亮度

     

     

     

     

     

    注:在使用Android Studio移植UVCCamera时,很多朋友可能会遇到"open(“/dev/bus/usb/001/002”, O_RDWR, 0),报错,Permission denied"问题,这是由于Android Studio使用的ndk版本所致,建议使用ndk-r14即可。解决方法:local.properties-->指定ndk.dir版本。(注:这里使用的是离线方式)

     

    最新版为2.3.0,更新时间为2019年6月17日,使用方法请移步Github项目

     

     

    GitHub源码地址:https://github.com/jiangdongguo/AndroidUSBCamera(如果对您有用,欢迎star&fork以表支持~谢谢^_^!)

     

    Download APK

     In order to display the functions, I develop a simple released apk,which is based on version 2.3.1,and the build version is 28.0.3.Here is my configs and if you have any questions please issues to me ,I will follow it do my best.

    ext {
        javaSourceCompatibility = JavaVersion.VERSION_1_8
        javaTargetCompatibility = JavaVersion.VERSION_1_8
        compileSdkVersion = 28
        buildToolsVersion = '28.0.3'
        minSdkVersion = 21
        targetSdkVersion = 28
        commonLibVersion= '2.12.4'
    }
    

    下载APP:  安装密码 12345678

    displaying:

     

     

    展开全文
  • 高通平台USB 2.0和USB 3.0接口充电器识别原理

    1 BC 1.2
    1.1 充电器类型探测
    1)DCD:DP上有150mV(= 10uA x 15K欧姆下拉电阻)的电压,DM上电压为0
    2)Primary Det(DP发起检测DM):
    - DP上加载0.6V电压,DM上电压为0,充电器类型是SDP
    - DP上加载0.6V电压,DM上电压为0.6V,进入Secondary Det
    3)Secondary Det(DM发起检测DP):
    - DM上加载0.8V电压,DP上电压为0,充电器类型是CDP
    - DM上加载0.8V电压,DP上电压为0.8V,充电器类型是DCP
    注:VDAT_REF=0.6V,数据线参考电压
    VLGC=0.8V,逻辑电压
    Figure 1-1 CDP探测波形

    1.2 USB 2.0 ULPI PHY
    高通平台的USB 2.0的PHY框图如Figure 1-2所示。
    Figure 1-2 USB 2.0 PHY

    高通平台的USB 2.0接口由于采用了ULPI PHY接口,所以将BC 1.2的探测寄存器放到了ULPI寄存器空间,标准的ULPI寄存器空间地址范围0x00-0x2f,这部分是公规(地址偏移不允许芯片制造商更改),从而高通将充电器探测寄存器的地址放到了这些公规寄存器地址之外了。

    1.3 USB 3.0 UTMI and PIPE PHY
    高通平台USB 3.0的PHY框图如Figure 1-3所示。
    Figure 1-3 USB 3.0双总线架构

    由于USB 3.0是双总线架构,既包含了USB 2.0的数据线也包含了USB 3.0的数据线,所以USB 3.0的物理层是有两个部分的。高通MSM8974的USB 3.0的LS/FS/HS物理层用的是UTMI接口,SS用的PIPE3接口(参看phy-interface-pci-express-sata3-usb30-archectures.pdf),并且这两种PHY接口是没有内置寄存器的,故而高通将BC 1.2的充电探测寄存器放到了AHB地址空间(见图)。识别原理主要通过UTMI PHY控制寄存器,PIPE3 PHY接口是不用来做充电器识别的。

    2 Q & A
    Q:USB_VBUS管脚的47K电阻的作用?
    A:使得USB_VBUS上的电压快速充放电,从而识别出外部电源已拔走,快速关断三极管,避免异常时电流倒流的情况。

    3 Abbreviations
    ARC:Argonant RISC Core
    AT91SAM9260:SAM means Smart ARM-based Microcontroller
    ATMEL SAMBA:ATMEL Smart ARM-based Microcontroller Boot Assistant
    CC2530:TI ChipCon2530
    DCD:Data Contact Detect
    DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
    ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
    Quirks:the attributes of a device that are considered to be noncompliant with expected operation
    SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
    TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci);产品UHC124表示USB Host Controller;收购了ARC USB技术;现已被chipidea收购,chipidea又被mips收购
    TLV:TI Low Value,高性价比
    TPS:TI Performance Solution
    TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)
    usb3_mifgen:Altera Memory Initialization File
    USB BH reset:Bigger Hammer or Brad Hosler,表示warm reset;you may be confused why the USB 3.0 spec calls the same type of reset "warm reset" in some places and "BH reset" in other places. "BH" reset is supposed to stand for "Big Hammer" reset, but it also stands for "Brad Hosler". Brad died shortly after the USB 3.0 bus specification was started, and they decided to name the reset after him. The suggestion was made shortly before the spec was finalized, so the wording is a bit inconsistent
    USB SIE:Serial Interface Engine,新的版本命名为Link layer
    xECP:xHCI Extended Capabilities Pointer

    展开全文
  • USB host、usb device、USB OTG的判断

    千次阅读 2019-06-28 16:59:21
    USB host、usb device、USB OTG的判断经典博客 经典博客 OTG数据线与普通USB数据线有什么区别? https://www.jb51.net/shouji/332556.html USB OTG简介、与普通USB线的区别 ...

    经典博客

    文章 链接
    OTG数据线与普通USB数据线有什么区别? https://www.jb51.net/shouji/332556.html
    USB OTG简介、与普通USB线的区别 https://blog.csdn.net/mao0514/article/details/46345861
    linux usb驱动——host与device电路 https://www.cnblogs.com/mahj/p/8480085.html
    开机自动打开USB调试模式和配置android为USB OTA模式 https://blog.csdn.net/longkg/article/details/8626271
    USB HOST与 USB OTG的区别及工作原理 https://blog.csdn.net/rainbowbirds_aes/article/details/86557077
    RK平台下USB_OTG提供的接口和返回的状态 https://blog.csdn.net/wangubuntu/article/details/17723793
    USB Host、USB Device和USB otg的理论简析 https://blog.csdn.net/DIYfashaoyou/article/details/49895111

    概念

    host、device

    usb协议中,设备连接是主从模式,具体定义自行了解usb协议,比较直观的认识,如下:

    USB Host是指驱动过后,板子就可以连接USB接口连接的器件,读取和装载数据了。
    USB Device是指驱动过后,板子可以当做一个USB移动设备,通过USB连接到电脑上,类似U盘
    
    OTG

    手机只有一个外接usb口,为了方便用户使用,如otg上插上一条可以支持U盘插入的线,手机就可以直接访问U盘的内容,不需要经过PC,手机给外设供电。若手机连上PC,PC上的usb口基本为host端,为方便使用,手机端作为device端比较方便合理。因此手机端的usb支持host、device模式的自动切换。OTG即是增加了host、device协商机制的usb口。

    识别

    host、device

    host、device的电路设计不同,定义好角色后不可以转变。如果需要转变,就是下面介绍的OTG。
    分别的电路图见上面博客介绍。在实际使用中,若无客制化需求,在linux开发中,驱动都是已经有的。

    各自的角色在设备上电后,根据电路自行执行确定的角色驱动。

    OTG

    otg数据线设计比普通的usb数据线多了一条ID线。OTG连接如下:
    在这里插入图片描述
    OTG口就是手机端的充电口,usb口接入PC后连接U盘。

    usb口接上设备后,在otg口端检测ID脚的电平高低,OTG决定作为host或device端。若id脚为低电平作为host端,对外供电;若id脚悬空,则作为device端。详见博文《https://blog.csdn.net/mao0514/article/details/46345861》。

    实际开发中遇到的问题

    rk3288平台与linux设备,两个设备连接,android端打开rndis。换了一个设备后,一样的连接,发现rndis开关为灰色,也即没有rndis设备被识别到。为什么?
    硬件把另外一端的usb连接线的DET脚电平拉高供电,就能正常使用。
    在这里插入图片描述
    分析OTG的定义,此处otg端作为了device端。从android设备命令查看:

    cat /sys/bus/platform/drivers/usb20_otg/force_usb_mode
    

    值为2,确实被作为device端了。这时通过命令

    echo 1 > /sys/bus/platform/drivers/usb20_otg/force_usb_mode
    

    把otg口设置为host端,rndis也无法识别,说明对端就是host端,host与host端是不能通信的。

    总结

    usb协议只能是host与device间通信。若不能通信,两端都是device或都是host。非OTG口是不能动态设置usb口为host端或者device端,一个确定的开发板,usb的角色由设计电路决定。按照usb协议定义的电气标准,通用usb驱动会自动适配usb驱动。

    展开全文
  • USB HOST与 USB OTG的区别及工作原理

    万次阅读 多人点赞 2018-08-01 14:06:06
    在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!!   零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,...

    在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!!

     

    零 USB背景知识

    USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一。 
    硬件上,它是用插头连接。一边是公头(plug),一边是母头(receptacle)。例如,PC上的插座就是母头,USB设备使用公头与PC连接。 
    目前USB硬件接口分三种,普通PC上使用的叫Type;原来诺基亚功能机时代的接口为Mini USB;目前Android手机使用的Micro USB。

    Host 
    USB是由Host端控制整个总线的数据传输的。单个USB总线上,只能有一个Host。 
    OTG 
    On The Go,这是在USB2.0引入的一种mode,提出了一个新的概念叫主机协商协议(Host Negotiation Protocol),允许两个设备间商量谁去当Host。

    预了解更多USB知识,请参考USB官网以及下面这篇文章: 
    http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html

     

    USB HOST/DEVICE/OTG概念:

    这里写图片描述

    OTG控制器可以做host,也能做device,控制器的角色一般由USB ID电平来决定。完整的USB2.0 OTG 控制器硬件信号如下:

    这里写图片描述

    USB_ID:输入信号,由 USB OTG 协议定义,用于识别 USB 口所接设备的默认角色(host or device)。USB_ID 默认上拉,处于 device 状况,如果要控制器进入 host 状态,需外接 mini-A 口或 micro-A 口将 USB_ID 短接到地。

    也可以由软件进行强制切换,通过控制 
    /sys/bus/platform/drivers/usb20_otg/force_usb_mode 
    实现,可以有如下三种值:

    0: 由硬件即USB ID决定 
    1: 强制 host模式 
    2: 强制 device模式

    HOST模式和OTG模式区别

    OTG和HOST的区别就是HOST支持的设备多一点,但需要有对应的从设备接口连接才能实现数据传输,而OTG传输方便,不需要别的机器上有从设备的接口就能传输。

     

    USB OTG的工作原理
      OTG补充规范对USB 2.0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作。OTG有两种设备类型:两用OTG设备(Dualrole device)和外设式OTG设备(Peripheralonly OTG device) 。两用OTG设备完全符合USB 2.0规范,同时,他还要提供有限的主机能力和一个MiniAB插座、支持主机流通协议(Host Negotiatio n Protocol, HNP),并和外设式OTG设备一样支持事务请求协议(Session Request Protocol, SRP)。当作为主机工作时,两用OTG设备可在总线上提供8 mA的电流,而以往标准主机则需要 提供100~500 mA的电流。

      2个两用OTG设备连接在一起时可交替以主机和从机的方式工作,这个特点兼容了现有USB 规范主机/外设的结构模型。OTG主机负责初始化数据通信的任务,比如:总线复位、获取USB 各种描述符和配置设备。这些配置完成后,2个OTG设备便可以分别以主机和从机方式传输信息,2个设备主从角色交换的过程由主机传输协议(HNP)定义。

     

    1.1主机(Adevice)和从机(Bdevice)的初始功能
      设备的初始功能是通过定义连接器来实现的。OTG定义了一个叫做MiniAB的袖珍插孔,他能直接接入MiniA或者MiniB插口,MiniAB有一个ID引脚 上拉至电源端,MiniA插头有一个与地连接好的ID(R<10 Ω),Mini B插头有一个与地连接的开路ID引脚(R>100 kΩ)。当2个OTG设备连接到一起的时候 ,MiniA插头边的ID引脚会注入一个“0”状态,MiniB插头边的ID引脚为 “1”,ID为0的OTG设备默认为主机(Adevice),ID为1的OTG设备默认为从机(B device)。图1对上述内容进行了图解。

    1.2对话请求协议SRP(Session Request Protocol)

      这个协议允许Adevice(可以是电池供电)在总线未使用时通过切断Vbus来节省电源消耗,也为Bdevice启动总线活动提供了一种方法。任何一个Adevice, 包括PC或便携式电脑,都可以响应SRP;任何一个Bdevice,包括一个标准USB外设, 都可以启动SRP;要求一个双重功能设备既能启动SRP,又能响应SRP。

    1.3主机流通协议HNP(Host Negotiation Protocol)
      HNP是一种用来实现Adevice和Bdevice主机/从机转换的协议(实际上是电缆的反转)。主/从机功能交换的结果表现在下列过程中:
      (1)利用上拉电阻来发送信号给从机。
      (2)Adevice可在Bdevice上设置“HNP Enable”特性。
      (3)Bdevice断开上拉。
      (4)ADevice与上拉电阻相连,表明Adevice从属于从机。
      (5)Adevice给Vbus供电。
      (6)Bdevice检测Adevice的上拉。
      (7)复位/列举/使用Adevice。

    1.4驱动程序
      与PC主机不同,便携式设备没有便捷的方式和足够的空间装载新的驱动程序。因此,OTG 规范要求每个两用OTG设备有一个支持的外设式OTG目标设备的列表,列表中包括设备的类型和制造商等信息。
      与PC机不同,OTG两用设备的驱动程序栈由USB主机栈和USB设备栈构成以满足两种工作方式的需要。OTG驱动程序通过连接器的不同或者是否有NHP交换设备的工作方式来决定使用USB主机栈还是USB设备栈。
      当OTG两用设备以主机方式工作时,USB主机栈工作。其中的主机控制器驱动程序负责USB 主机栈与硬件端点的数据交换,USB驱动程序枚举并保存设备的信息,目标外设主机类驱动程序支持目标设备列表里的设备。主机类驱动程序由芯片制造商提供,同时,OTG提供通用的主机类驱动程序(可以修改以用于非通用设备)。
      当OTG两用设备以从机方式工作时,USB设备栈工作。其中的设备控制器驱动程序负责USB 设备栈与硬件端点的数据交换,USB协议层负责处理USB协议规范,设备类驱动程序的功能取决于该两用设备的功能(如数码照相机、存储设备、打印机等)。
      OTG驱动程序负责处理两用OTG设备的工作方式转换,同时,他还可以返回其结果(如设备是否支持HNP)并处理总线错误。应用层程序通过OTG驱动程序开始或者结束一个传输事务, 通过USB主机栈或设备栈与硬件层交换数据。

    1.5数据流模型
      OTG主机和设备被划分为功能层、USB设备层和USB接口层3个不同层次,如图2所示。

      USB接口层为OTG主机和OTG设备提供物理连接,USB系统软件使用主机控制器来管理主机与 USB设备的数据传输。USB系统软件相对于主机控制器而言,处理的是以客户角度观察的数据传输及客户与设备的交互。USB设备层为USB主机系统软件提供一个可用的逻辑设备。主机通过与之功能匹配的客户软件实现其各种功能。
      OTG设备与以往的USB设备一样有两种通道:数据流通道和消息通道。数据流通道没有定义好的结果,而消息通道则有固定的结构。但是,每个通道都有一定的带宽、传输类型、传输方向和缓冲区大小。自供电设备配置一个默认的控制通道,由他提供该设备的配置和状态等信息。


    一问一答:

    1 . 什么是USB OTG?
         USB OTG是USB 2.0的补充规范
    2.  USB OTG针对USB 2.0的最重要扩展是什么?
        更具节能性的电源管理和允许设备以主机和外设两种形式工作。
    3. USB2.0中定义三种类型: HOST(主机),Device(设备), HUB
        OTG新增两种设备: Dual-role device(两用设备),Perip-heral-only OTG device(OTG外设)
    4. USB 2.0中定义了三种连接器对(插头和插座): Standard-A(主机),Standard-B(外设),Mini-B(较小的外设)
        OTG新增插头: Mini-A
        OTG新增插座: Mini-A和Mini-AB(同时支持Mini-A或Mini-B的插头)
        其中插头和插座内部的塑料颜色:Mini-A为白色,Mini-B为黑色,Mini-AB为灰色
    5. USB 2.0中定义了两种电缆: Standard-A至Standard-B,  Standard-A至Mini-B
        OTG增加的两种电缆:Mini-A至Standard-B, Mini-A至Mini-B
    6. OTG的Dual-role device(两用设备)必须具备:
        1) 有限的主机能力
        2) 可作为全速的外设(可选的高速方式)
        3)可作为全速的主机(可选的低速或高速方式)
        3) OTG目标设备的列表及驱动程序
        4)支持SRP,HNP
        5)一个Mini-AB插座
        6)VBUS上不小于8mA的电流输出
        7)与用户通讯的方式
    7. Perip-heral-only OTG device(OTG外设):
        1.是普通的USB外设
        2. 支持SRP
        3. 一个Mini-B插座(不能使用Mini-AB)

    8.Android usb如何实现既可以发现accessory设备,同时也可以发下host设备

        做usb通信,首先要先弄清楚哪边是HOST那边是SLAVE
        比如你的android手机做host,要获得slave,用UsbDevice表示slave
        要是你的android手机做slave,要获得host,用UsbAccessory表示host

     

    转载于:http://blog.csdn.net/ljzcom/article/details/8843360

    相关文章:

    展开全文
  • usb3.1 通常是指 usb3.1 gen2,比3.0的传输速率更快、充电更快,同兼容 type-c 通常是指 usb3.1的一种接口形状,总共三大类,c就是第三大类 先看下usb2.0接口 usb2.0 理论传输速率480Mbps,即60MB/s 四引脚 ...
  • 缘起 随着小新pro发布,看到带了全功能的type-c接口,一直搞不懂什么type-c还有什么全功能,半功能?和雷电3又有什么区别,雷电3又有...但其实这个样子的全称是USB Type-A,除此之外还有USB Type-B,USB Type-C ...
  • ),先上个图看看当前众多的 USB 接口 众多的 USB 接口可谓眼花缭乱!最主要的是,USB 的命名会给一些人造成误解。   随着 USB 规范的不断更新,规范对于这些接口的支持情况也是有变化的,如下图(来自维基百科)...
  • USB 之一 USB2.0 规范详解 第一部分

    万次阅读 多人点赞 2018-04-16 18:47:22
    注意 对于物理特性仅做简单说明 主要是针对 USB 2.0 规范的前八章。...在USB 1.0和 USB 1.1 版本中,只支持1.5Mb/s 的低速(low-speed)模式和 12Mb/s 的全速(full-speed)模式,在USB 2.0中...
  • USB协议基本知识

    万次阅读 多人点赞 2018-09-11 16:11:27
    USB 基本知识 USB的重要关键概念: 1、端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点...
  • 1.手机USB接口通信特点 - 1.1 使用方便 - 1.2 通用性强 - 1.3 速度快 - 1.4 可采用总线供电 2. 手机USB接口通信原理 - 2.1 常见手机USB接口 - 2.2 通信过程 - 2.3 体系架构 2.4软件层次 3. 手机USB接口与...
  • java使用usb4java读取usb连接的设备

    万次阅读 热门讨论 2018-07-07 14:28:06
    1、最近在做一个java与usb通信的项目,在我原来的理解中,java是不能读取电脑底层设备信息的,所有就让人用C写一个中间程序来传递数据。但是最近在查询资料的时候,看到usb4java是写好的jar包,可以用java读取硬件...
  • USB转TTL、USB转串口、USB转232的区别

    万次阅读 多人点赞 2017-12-20 16:20:49
    PO主作为一个没有专业背景的小白,在初玩单片机时曾被上面的几个名词所混淆,不过后来终于大彻大悟,现在把...PC机上的通信接口有USB接口,相应电平逻辑遵照USB原则;还有DB9接口(九针口),相应电平逻辑遵照RS-232
  • 科普下USB复合设备和USB组合设备的区别。 关键字 Communication Device Class,简称CDC USB Compound Device,USB复合设备 USB Composite Device,USB组合设备 摘要 Compound Device内嵌Hub和多个...
  • USB协议入门

    千次阅读 2020-06-15 15:27:46
    文章目录USB是什么USB解决什么问题USB-OTGUSB的特点USB的拓扑结构USB的电气特性USB的插入检测机制USB描述符USB设备的枚举过程USB包结构和传输过程包的结构包的分类令牌包数据包握手包特殊包USB的四种传输类型USB事务...
  • 一、USB-Type-A
  • 当在宿主机上插入一个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别。 再看一种情况...
  • import usb.core import time import os if __name__ == '__main__': while True: if usb.core.find(idVendor=0x046D, idProduct=0xC077) is not None: time.sleep(3) else: ...
  • USB、Mini-USB、Micro-USB接口的引脚定义

    万次阅读 2017-11-04 00:43:51
    看到网络上有很多USB、Mini-USB(迷你USB)接口的文章,里面有很多手工画的贴图要么不清楚,要么就是错误的(按照它的标法,插头都插不到插座里),考虑到USB连线和接口应用的广泛性,特重新整理编辑,希望对大家...
  • 高通HS-USB驱动 2.1.0.3,Qualcomm HS-USB Driver,QDLoader 9008

    千次下载 热门讨论 2015-03-28 17:15:46
    高通平台手机 Modem、网络、调试COM口 ...驱动版本 2.1.0.3 是目前最新版本的驱动了,支持如下 Qualcomm HS-USB QDLoader 9008 Qualcomm HS-USB Diagnostics Qualcomm HS-USB NMEA 等等很多高通平台手机调试所需的驱动
  • USB总线

    万次阅读 2018-01-26 10:39:33
    一、USB简介 USB(通用串行总线)具有数据传输率高,易扩展,支持即插即拔和热插拔的优点。USB1.1包含全速和低速两种模式,低速支持一些不需要很大数据吞吐量和高实时性的设备,如鼠标。全速可以外接速率更高的外设。...
  • USB3.1、USB Type-C、USB PD这几个英文单词应该是目前与USB接口相关的较热门的英文单词,大家或多或少都会在有意或者无意下接触到与其相关的一些信息,但是相对于大部分人来说也仅仅是知道有这么一个东东,但是对其...
  • USB device & USB controller & USB passthrough

    千次阅读 2015-01-11 22:29:45
    近期往 openstack 里倒腾 USB passthrough[1],遂把 USB 知识做较为全面的整理,以供分享。 USB device  什么是 USB device, 上图机智的小萌狗就是 USB device,你的鼠标是 USB device, 键盘是 USB ...
  • 什么是 USB3.2 简单来说,USB3.2就是在USB3.1 Gen2的基础上,将带宽翻了一倍、在现有的USB Type C线上实现双...也就是说,USB3.1 Gen2即USB3.2 Gen2,USB3.0和USB3.1 Gen1即USB3.2 Gen1,而真正的USB3.2则为USB3....
  • USB2.0和USB3.0彻底梳理

    千次阅读 2019-03-21 15:20:59
    最近公司有一款产品要用到USB技术,因此我又一次对USB基础知识进行了梳理,只是这一次把这些梳理全部公之于众,希望对大家有帮助,下表是我边查资料边更新,耗费了半天的时间汇总出来的。 USB1.0 ...
  • USB 模块   在 STM32 众多系列的 MCU 中,USB模块并不是相同的。...USB+ IP: 是针对USB IP的扩展版本,同样仅可作为全速或低速的USB设备,但是ST针对这部分的USB模块进行了扩展,例如添加了USB低功耗管理等 F...
  • USB设备类代码表官网链接:...USB defines class code information that is used to identify a device’s functionality and to nominally load a device driver based on that func...
  • USB调试助手

    万次阅读 2018-09-01 15:48:32
    今天终于把USB调试助手做完了,程序看起来自己还算满意,虽然有些地方还需完善,但整体功能已经实现了,程序就叫“USB调试助手”吧,是一款USB设备测试工具,可用于研究学习USB协议或进行USB设备开发测试使用,程序...
  • fanxiushu 2016-10-08 转载或...因此花了4,5天时间,利用自己之前开发的USB驱动,实现了一个虚拟USB摄像头的实例代码。 稍后会公布到CSDN上。 记得最早的一篇文章也是介绍虚拟摄像头驱动的开发的,只是当时采用的是wi
  • MSM8953 core 3.0 usb otg USB 笔记

    万次阅读 2018-08-30 16:07:56
    8953走的是dwc3-msm.c,8909走的是phy-msm-usb.c // device 切 host 流程 usbid_change_handler dwc3_msm_power_set_property_usb + POWER_SUPPLY_PROP_USB_OTG + queue_delayed_work(mdwc-&gt;dwc3_wq, &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 137,048
精华内容 54,819
关键字:

usb