精华内容
下载资源
问答
  • 公司内网只有PS/2接口,希望可以使用无线鼠标(貌似没有PS/2接口的)。而那种USB转PS/2的转接头只是简单的连线,需要键盘或鼠标本身支持PS/2模式才可以正常工作,现代的USB鼠标接收器显然没有考虑这一点。无意中发现...
  • drivers/usb目录下面,host目录包括了host驱动代码,core目录包含了主要的api接口代码,而其他目录则主要是device驱动代码。 2、device驱动怎么看 device驱动大多数和上层协议有关,不涉及到具体的寄存器读写。示例...
  • USB HOSTUSB OTG的区别及工作原理

    万次阅读 多人点赞 2018-08-01 14:06:06
    在SmartQ 7上面,同时存在USB HOSTUSB 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

    相关文章:

    展开全文
  • USB Host Core

    2020-06-18 17:01:45
    IP 通过 AXI4-Lite 从机登记接口访问,用于控制、状态和数据。 要发送或接收的数据存储在某些内部 FIFO中。数据通过 AXI4-Lite 从访问。没有与此 IP 关联的 DMA 。 核心功能很好,非常小,但在执行 USB 传输所需的...
  • 本文介绍了基于单片机和USB HOST接口芯片在汽车行驶记录仪中实现USB HOST功能的相关模块设计,该模块很好地实现了汽车行驶记录仪中单片机向优盘大量数据的快速传输。 USB HOST相关模块的总体设计  汽车行驶记录...
  • 4.3 USB Host 接口测试 此节演示在终端下如何在 USB Host 接口上使用 usb 存储设备。 注意:需要准备一个 USB 设备,比如 U 盘、USB 蓝牙模块、usb 网卡或者 usb 摄像头等。 下面使用一个 U 盘作为例子,插到任意一...

    在线课堂:https://www.100ask.net/index(课程观看)
    论  坛:http://bbs.100ask.net/(学术答疑)
    开 发 板:https://100ask.taobao.com/ (淘宝)
         https://weidongshan.tmall.com/(天猫)
    交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
    交流群二:QQ群:536785813(单片机-嵌入式)
    公 众 号:百问科技


    版本日期作者说明
    V12020韦东山技术文档

    4.3 USB Host 接口测试

    此节演示在终端下如何在 USB Host 接口上使用 usb 存储设备。

    注意:需要准备一个 USB 设备,比如 U 盘、USB 蓝牙模块、usb 网卡或者 usb 摄像头等。
    在这里插入图片描述
    下面使用一个 U 盘作为例子,插到任意一个 USB Host 接口,会打印出如下设备信息:
    在这里插入图片描述
    通过打印的设备信息可知,系统为该 usb 存储设备创建的设备节点为 /dev/sda。一般来说/dev/sda 对应整个U盘,/dev/sda1 对应该 U盘的第 1 个分区,/dev/sda2 对应第 2 个分区。

    有些 U 盘没有划分分区,它只有一个设备节点/dev/sda,而没有/dev/sda1 等节点。对于这种情况,/dev/sda 既代表整个 U 盘,也代表第 1 个分区。

    我们可以挂载某个分区,挂载之前要先通过 fdisk 命令获取分区类型,如下所示:
    在这里插入图片描述
    从上图可知/dev/sda1 是 FAT32,挂载时可以指定类型为“vfat”:
    在这里插入图片描述
    注意:暂不支持分区类型为 NTFS 的 U 盘。
    测试完以后,通过 umount 卸载/mnt,才可拔下 usb 设备:

    [root@100ask:~]# umount /mnt
    

    4.4 OTG 接口测试

    此节演示如何测试 OTG 接口的两种模式,分别是 device 模式和 host 模式。

    注意:需要准备一个 OTG 转接线(开发板清单中不配)、Type C usb 数据线(开发板清单里配有)。

    4.4.1 otg device 模式测试

    开发板作为 USB 从设备,可以接到电脑上让电脑识别出它来,其中系统默认设置 usb otg device 为模拟网卡设备,可以通过直接访问此 IP 的方式登录开发板。
    在这里插入图片描述
    Usb otg 线连接至电脑后,可以看到设备管理器网络适配器 里多出一个名为 “Remote NDISCompatilble Deive #4 ”的网卡设备,之后我们可以使用 MobaXteram 新建一个 ssh 登录会话,登录到 IP地址为 192.168.7.1 的开发板。
    在这里插入图片描述

    登录成功后的截图如下图所示:
    在这里插入图片描述

    4.4.2 otg host 模式测试

    开发板作为 usb 主设备,其他 USB 设备通过 otg 转接线插入开发板,开发板即可识别出这些 USB 外设备。
    全功能 OTG HOST 模式接口测试
    下图是把 U 盘通过 otg 转接线插入开发板后,在串口打印的信息:
    在这里插入图片描述
    通过打印的设备信息可知,系统为该 usb 存储设备创建的设备节点为 /dev/sda。一般来说/dev/sda 对应整个 U 盘,/dev/sda1 对应该 U 盘的第 1 个分区,/dev/sda2 对应第 2 个分区。

    有些 U 盘没有划分分区,它只有一个设备节点/dev/sda,而没有/dev/sda1 等节点。对于这种情况,/dev/sda 既代表整个 U 盘,也代表第 1 个分区。

    我们可以挂载某个分区,挂载之前要先通过 fdisk 命令获取分区类型,如下所示:
    在这里插入图片描述
    从上图可知/dev/sda1 是 FAT32,挂载时可以指定类型为“vfat”:
    在这里插入图片描述
    注意:暂不支持分区类型为 NTFS 的 U 盘。
    测试完以后,通过 umount 卸载/mnt,才可拔下 usb 设备:

    [root@100ask:~]# umount /mnt
    
    展开全文
  • USB hostusb device、USB OTG的判断

    万次阅读 2019-06-28 16:59:21
    USB hostusb 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驱动。

    展开全文
  • 公司内网只有PS/2接口,希望可以使用无线鼠标(貌似没有PS/2接口的)。而那种USB转PS/2的转接头只是简单的连线,需要键盘或鼠标本身支持PS/2模式才可以正常工作,现代的USB鼠标接收器显然没有考虑这一点。无意中发现...

    制作缘由

    公司内网只有PS/2接口,希望可以使用无线鼠标(貌似没有PS/2接口的)。而那种USB转PS/2的转接头只是简单的连线,需要键盘或鼠标本身支持PS/2模式才可以正常工作,现代的USB鼠标接收器显然没有考虑这一点。无意中发现有人用Arduino制作过USB键盘转PS/2的装置,那么鼠标一定也可以。这个装置,从原理上来说,就是一个转发器。对于USB鼠标(非蓝牙无线鼠标对主机来说仍是USB鼠标,和有线的没啥区别),他是一个主机,接收来自鼠标的数据;对于真正的主机,他是一个PS/2鼠标,负责向其发送转换过的数据。


    PS/2部分

    物理接口

    如下图,实际有用的只有4根线,1 - Data:用于传输数据(双向);5 - Clock:用于向主机发送脉冲,控制读写数据;3 - Ground:接地;4 - Vcc (+5V) :电源。其中1和2可以接在Arduino任意的数字引脚上(但要避开USB Host Sheild占用的那些引脚,我实际使用的是2号、3号引脚),而3和4分别接在Arduino的5V和GND引脚上,这样不用额外供电,连到主机的PS/2接口就能正常工作。

    数据传输(1位)

    设备 > 主机 :由设备控制Clock以产生脉冲,首先,设置Data为要发送的位(高/低电平表示1/0),同时保持Clock为高电平一段时间,然后拉低Clock为低电平,产生一个下降沿,通知主机读取(锁存)Data,继续保持Clock为低电平一段时间后释放Clock(恢复为高电平,为传输下1位数据做准备)。。

    主机 > 设备:仍然由设备控制Clock脉冲。当主机拉低Data或Clock时表示想要向设备发送(命令)数据,此时设备应该停止发送数据,优先读取来自主机的数据,待主机释放Clock(变为高电平)时,表示设备可以开始读入数据。首先,设备让Clock保持高电平一段时间,然后拉低Clock,产生一个下降沿,通知主机设置Data,继续保持Clock为低电平一段时间后,释放Clock为高电平(此时设备可以锁存当前Data,并且准备读入下1位数据)

    数据传输(1字节)

    每传输1字节数据,需要额外附带起始位(0),奇校验位,停止位(1),共11位

    代码实现

    最初在Arduino官方网站找到了一个叫做ps2dev的示例代码,里面的PS2dev类看上去实现了单个字节的读写,但是版本过于老旧。后来发现这个ps2dev已经是Arduino的一个库了,在库管理器中就可以搜索安装,但还是不够新,存在一些问题。他的最新版本在这里 https://github.com/Harvie/ps2dev,其中简单模拟鼠标的例子在某些时候会死循环出不来,我的修正已经被作者合并进去了。进一步地,为了提高通讯速度,我修改了时钟频率以及发送单个字节的间隔,目前工作正常。:)

    鼠标协议

    总的来说,主机向鼠标发送各种命令,以设置或询问鼠标的状态或参数;而鼠标呢,除了答复来自主机的命令,就是向主机发送位移数据包(处于Stream模式并且“数据报告”使能状态下,可以主动上报);更具体的可以参考网上的文档。(有中文版哦,搜索“PS2 鼠标 键盘技术参考”)下面列出我抓到的命令序列:

    19:44:22.522 -> process_cmd FF       重置命令,进入Reset模式,重置各种状态,回复自检完成、设备ID,进入Steam模式
    19:44:22.556 -> process_cmd F2       询问设备ID,首次询问应该回复00(标准鼠标),但我一律回复的03(滚轮鼠标)也没事哦
    19:44:22.556 -> process_cmd E8       设置解析度
    19:44:22.556 -> set resolution 0        读取解析度,1count/mm
    19:44:22.556 -> process_cmd E6       设置缩放比例1:1
    19:44:22.556 -> process_cmd E6       设置缩放比例1:1 
    19:44:22.556 -> process_cmd E6       设置缩放比例1:1,为啥连续发了3次?
    19:44:22.556 -> process_cmd E9       询问鼠标状态,此时应该回复3字节的状态包
    19:44:22.556 -> process_cmd E8       设置解析度
    19:44:22.589 -> set resolution 3        读取解析度,8count/mm
    19:44:22.589 -> process_cmd F3       设置采样率
    19:44:22.589 -> set sample rate 200  读取采样率 200/sec
    19:44:22.589 -> process_cmd F3       设置采样率
    19:44:22.589 -> set sample rate 100  读取采样率 100/sec
    19:44:22.589 -> process_cmd F3       设置采样率
    19:44:22.589 -> set sample rate 80    读取采样率 80/sec,注意,当主机按此顺序设置采样率,表示他支持03鼠标(滚轮鼠标)
    19:44:22.589 -> process_cmd F2       询问设备ID,此时应该回复03,如果鼠标支持的话
    19:44:27.052 -> process_cmd FF       重置命令
    19:44:27.052 -> process_cmd F2       询问设备ID
    19:44:27.052 -> process_cmd E8       设置解析度
    19:44:27.052 -> set resolution 0        读取解析度,1count/mm
    19:44:27.052 -> process_cmd E6       设置缩放比例1:1
    19:44:27.052 -> process_cmd E6       设置缩放比例1:1
    19:44:27.052 -> process_cmd E6       设置缩放比例1:1,同样的,为啥连续发了3次?我猜可能有含义的。
    19:44:27.086 -> process_cmd E9       询问鼠标状态,此时应该回复3字节的状态包
    19:44:27.086 -> process_cmd E8       设置解析度
    19:44:27.086 -> set resolution 3        读取解析度,8count/mm
    19:44:27.086 -> process_cmd F3       设置采样率
    19:44:27.086 -> set sample rate 200  读取采样率 200/sec
    19:44:27.086 -> process_cmd F3       设置采样率
    19:44:27.086 -> set sample rate 100  读取采样率 100/sec
    19:44:27.086 -> process_cmd F3       设置采样率
    19:44:27.086 -> set sample rate 80    读取采样率 80/sec,为啥又来一遍?囧
    19:44:27.086 -> process_cmd F2       询问设备ID,此时应该回复03,如果鼠标支持的话
    19:44:27.120 -> process_cmd F3       设置采样率
    19:44:27.120 -> set sample rate 200  读取采样率 200/sec
    19:44:27.120 -> process_cmd F3       设置采样率
    19:44:27.120 -> set sample rate 200  读取采样率 200/sec
    19:44:27.120 -> process_cmd F3       设置采样率
    19:44:27.120 -> set sample rate 80    读取采样率 80/sec,注意,当主机按此顺序设置采样率,表示他支持04鼠标(5键滚轮)
    19:44:27.120 -> process_cmd F2       询问设备ID,此时应该回复04,如果鼠标支持的话,但是我没有。:)
    19:44:27.120 -> process_cmd F3       设置采样率
    19:44:27.120 -> set sample rate 100  读取采样率 100/sec
    19:44:27.120 -> process_cmd E8       设置解析度
    19:44:27.154 -> set resolution 3        读取解析度,8count/mm
    19:44:27.154 -> process_cmd F4        使能“数据报告”,下面鼠标就可以开始主动上报“位移数据包”了。。


    USB部分

    使用USB Host Shield扩展板(采用MAX3421E芯片,支持USB2.0),加上USB Host Shield 2.0(它也是Arduino的一个库),最新版本在这里 https://github.com/felis/USB_Host_Shield_2.0,只要继承HIDUniversal类并且覆盖虚函数ParseHIDData就能得到HID设备的数据(数据格式可用USBBlyzer分析)。实际使用中发现,如果本次数据和上次的完全一致,则不会调用ParseHIDData。(比如同方向滚动滚轮,后面的都被忽略了)只需略微修改hiduniversal.cpp,已提合并请求,作者暂时没理我。^_^ (我的修改见 https://github.com/felis/USB_Host_Shield_2.0/pull/522

    USB是一种主从结构,只有当主机向设备发送IN令牌包(见上述库中 USB::InTransfer)时,设备才可以向主机发送数据。在鼠标设备内部,分为USB芯片(用于与USB主机通讯)和MCU(用于执行鼠标固件程序)。当检测到鼠标状态变化(比如按键按下或发生移动),MCU将状态数据写入USB芯片的缓冲区,待收到IN令牌包时由USB芯片将数据发给主机。如果主机请求数据速度过慢会怎样?我猜数据会丢失?从目前能找到的固件程序代码看,都是直接向芯片缓冲区写数据的,并没有额外的处理。或许当缓冲区满了之后,合并后续数据会好一点?


    鼠标回报率

    也就是上面提到的采样率。

    PS/2理论上支持:10、20、40、60、80、100、200。我的主机最终设置的值为100,目前USB部分耗时2ms,PS/2部分耗时6-7ms,已经可以满足。曾经试过把时钟频率调的更快、发送单个字节的间隔改的更短,没成功。:(

    USB1.1支持:125

    USB2.0支持:250、500、1000

    考虑到USB和PS/2收发速率可能不匹配,所以实现了一个循环队列用于存放来自USB鼠标的数据,并尽可能地将新的数据与队尾元素合并。但是,实际测试中,队列长度从未超过1并且合并函数从未被调用,即便在loop()中尝试读取多次USB数据再向PS/2发送也是如此,Why?可能是因为我的USB鼠标只有125的回报率吧。


    呼吸灯

    为了了解转换器的工作状态(以及更炫酷一点),额外加了一个全彩LED灯在盒子顶部。繁忙时,以红色快速闪烁;而空闲时,则以绿色缓慢呼吸;


    最终成品

    完整源代码在这里 https://github.com/liumazi/MzMouse


    参考资料

    https://www.zhihu.com/question/46855816/answer/619886526

    https://www.arduino.cn/forum.php?mod=viewthread&tid=22851

    http://www.burtonsys.com/ps2_chapweske.htm

    http://usb.baiheee.com/usb_projects/easy_usb_51_programer_plus/usb_hid_mouse.html

    https://blog.csdn.net/suipingsp/article/details/30238891

    展开全文
  • usb接口AD封装库

    2019-04-09 21:48:24
    文件内含USB接口的元器件库和PCB封装库,尺寸可靠亲自使用验证无误。
  • 提出了基于ISP1760的嵌入式USB主机接口方案,详细探讨了主机接口的软硬件设计,该方案支持USB2.0协议和大规模存储协议规范,并将其应用于无线通信终端设备中。
  • USB HostUSB Device和USB otg的理论简析

    千次阅读 2020-06-20 10:27:32
    我们PC上目前常用的USB接口USB3.0和USB2.0,但是以个人短浅的经验,在ARM上基本还都是以USB2.0和USB1.1为主。接口定义以这个为准。 一般的USB接口为四根线:红绿白黑-->从左至右! ![USB接口定义]...
  • 本文介绍了基于单片机和USB HOST接口芯片在汽车行驶记录仪中实现USB HOST功能的相关模块设计,该模块很好地实现了汽车行驶记录仪中单片机向优盘大量数据的快速传输。 USB HOST相关模块的总体设计 汽车行驶记录仪中...
  • USB HOSTUSB OTG有什么区别

    千次阅读 2018-01-22 13:38:44
    电脑用户经常使用USB接口,连接U盘或移动硬盘等。但是,知道USB HOSTUSB OTG的却不多,现在分享一下这方面的知识,便于以后用到这些设备时知道它们的区别和使用方法。  USB设备分为HOST(主设备)和SLAVE(从设备...
  • USB接口测试指导

    2018-11-17 10:07:47
    为了顺应市场的要求,目前的产品大部分都出的是USB2.0的接口,而且我们产品都是作为HOST端,USB2.0一共提供3种速率,如下表。 数据速率 上升时间 Low Speed 1.5Mbps 75~300ns Full Speed 12Mbps 4~20ns High Speed ...
  • 汽车行驶记录仪中的USB HOST相关模块由单片机、USBHOST接口、FLASH、铁电存储体(FRAM)、实时时钟和电源管理等部分组成。汽车行驶记录仪工作时,由单片机通过前端接口电路拾取汽车行驶状态的各种信息,包括车速、发动机...
  • usb host分析

    千次阅读 2018-11-10 21:01:12
    usb主机控制器简介:规格OHCI(非PC主板),UHCI(PC主板的usb驱动),EHCI(USB2.0成本低,驱动复杂),xHCI(主要面向usb3.0驱动), 1:usb入口函数:usb_init 参考文档: ... ...
  • USB-HOSTUSB-DEVICE、USB-OTG

    千次阅读 2019-07-07 13:22:48
    例如主机的USB口,可以识别U盘或者是其它USB设备,所以主机的USB就是Host接口,而U盘的就是device。 OTG就是指既可以做Host口亦可以做device口。 Mini-USB和Micro-USB的ID脚在OTG功能中才使用。...
  • usb3.0开发指南:host环境验证

    千次阅读 2017-04-05 21:42:40
    今天又花了将近一天时间,整理dwc3 usb验证套件,主体部分已经完成的差不多了,代码依旧在我的dwc3仓库中。这篇文章记录今天的工作内容,其实就是主体内容。一、第二天进展第一天完成了初始化流程,然后建了个...
  • USB HOSTUSB DEVICE枚举后通讯,端点需要一一对应吗?
  • USB HostUSB Device的区别

    千次阅读 2015-07-28 13:54:38
    USB Host是指驱动过后,板子就可以连接USB接口连接的器件,读取和装载数据了。 USB Device是指驱动过后,板子可以当做一个USB移动设备,通过USB连接到电脑上,类似U盘
  • 本书从一个 U SB 接口应用开发者的角 度 , 阐述 对 USB 协议 的理 解 , 描述 U SB 开 发过 程 中的要点和体会 , 给出 USB 设备与 USB 主机开发应用的实例 , 所附程序都是在应用中验证 过 的 , 可直接拿来使用。
  • 该文档为USB3300详细使用数据手册的中文翻译版,共54页。...ULPI接口允许USB3300 PHY用作设备,HOST或ON-The-GO(OTG)设备。使用USB3300 PHY作为设备的设计可以在以后增加HOST和OTG功能,而无需额外的引脚。
  • USB硬件建立连接一般usb有4根线(Vbus 、D+、D-...usb host端:在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平。usb device端:在D+或者D-上接了1.5K欧姆上拉电阻。(对于全速和高速设备, 上拉电阻是接在D...
  • (以下讨论基于kernel 2.6.11,ARM9 s3c2410,arm-linux-gcc 3.4.1 )=================================================2.6在s3c2410上usb host不工作的直接结果就是提示110错误:usb 1-1: device descriptor read/...
  • 另外针对STM32F103应用范扩大,STM32F103作为USB主控制端的应用需求也日益增大,本文通过引入USB总线接口芯片CH375扩展了STM32F103的USB HOST功能,并通过设计一个针对STM32F103的USB HOST的U盘解决方案验证了STM32...
  •  目前,USB 设备产品的应用非常广泛,但市场上能够提供Host/Slave两种模式的USB控制芯片并不多,本系统采用CYPRESS公司的SL811HST芯片作为USB接口的控制芯片,实现Host/Slave两种工作模式。    系统介绍  本...
  • 而传统意义上的LISB驱动程序的开发都是USB外设驱动程序的开发,主控制器驱动大部分由操作系统来提供,开发者所要做的就是调用操作系统提供的驱动程序的接口。两大主流操作系统中,Windows不公开源码而Linux的代码却...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,886
精华内容 9,154
关键字:

host接口usb