zoukankan      html  css  js  c++  java
  • USB 3.0 驱动 (2)

    在PC机上,USB 3.0的控制器标准就是xHCI (extensible-host-controler-interface),该标准开放,网上下载就可以查看 (尽管版本挺多)。

    在实际的实现中,第一步自然是发现xhci,xhci作为一个PCI总线上的设备,自然与上一代控制器标准ehci的过程是一样的。总线枚举即可,因此,没什么可说的。

    发现xhci控制器后,接下来就是对控制器进行初始化,初始化的步骤在xhci手册中描述的很清楚。

     初始化完毕之后,就要与xhci进行交互,交互的意思也就是来往,优先级高的当时是要先能够收到xhci的讯息。这里我打算首先能够收到设备热插拔的中断作为开始。

    将代码写完,编译生成镜像,安装到u盘中,上电PC。嗯,不出所料,没有中断,美滋滋。

    增加打印信息,好像没什么头绪,但是偶尔(概率性)会收到一下中断,有时候又收不到,中断在捉迷藏。。。

     问题来了,重新阅读手册。就是觉得有点奇怪,以前的ehci控制器初始化的时候会要求操作系统与pre-os协商控制器的使用权。xhci的手册里却不是必选项?

    在没有协商控制权的情况下,唯一的硬件到底由谁来控制呢?难道不协商,xhci也是可以工作的?再好好翻翻手册,i love usermanual。。。

    没找到【

    此时我剩下的选择不多了,还可以尝试的是那个不怎么用的台式机,台式机与我经常使用的笔记本电脑的区别在于,台式机是一个主板中只有xhci作为usb控制器,而笔记本的年代较老,主板中同时包含xhci和ehci。

    操作一

    在使用笔记本电脑运行时,实测xhci的extended capabilities中是没有用于协商控制权的USBLEGSUP字段的,毕竟是可选项,就是这么任性,没有!

    然而台式机的xhci却包含了用于协商控制权的寄存器字段。。。。

    操作二

    到底需不需要协商控制权?干脆做个实验,枚举发现xhci控制器,看看默认的xhci控制器是什么状态。。。

    笔记本和台式机都是运行态!

    操作三

    干脆做个实验,枚举发现xhci控制器,先将其停止工作看看会发生什么。

    笔记本无事发生。。。。

    操作四

    台式机的xhci在停止之后,我的usb键盘就无法响应了,原本是可以响应键盘输入的(我采用的是ps2的方式驱动键盘)。这说明系统启动了,bios默认仍然在工作,且支持xhci并将usb键盘模拟为ps2的。不经过协商就直接使用,必然造成资源的使用冲突。

    增加协商功能,中断如期而至!

     遗留问题:

    笔记本电脑的主板同时存在ehci和xhci,默认情况下,xhci并不控制物理端口,所有的端口都是有ehci控制器掌管的。intel的一些主板型号支持通过操作xhci寄存器来完成端口的切换,但切换到xhci控制器下之后,不能协商控制权,目前仍然不知道怎么回事(升级bios?)。

    希望有大神解答

  • 相关阅读:
    反向代理实例
    nginx常用命令和配置
    nginx的安装
    Can Live View boot up images acquired from 64bit OS evidence?
    What is the behavior of lnk files?
    EnCase v7 search hits in compound files?
    How to search compound files
    iOS 8.3 JB ready
    Sunglasses
    现代福尔摩斯
  • 原文地址:https://www.cnblogs.com/lycmtz/p/12951556.html
Copyright © 2011-2022 走看看