XHCI:即可扩展的主机控制器接口,目前主要是面向USB3.0设备的,同时它也支持USB2.0及以下的设备。其中USB2.0使用的是EHCI,USB1.1使用的是OHCI。
为了实现在DOS下检索XHCI下所有的USB设备,并显示出设备接在哪个端口上,并读出该USB device的speed。文章分为4步实现:
1.通过检索PCI设备,找到USB Controller,也可以通过RU.exe找到USB Controller对应的地址,对应的bus# = 0,device# = 0x10,function# = 0,ofs = 0x10。这样就可以得到Capability Register Base Address。在此基础上可以进一步得到Operational Register Base Address。如图4.1所示:
图 4.1
其中Capability Register是在对USB controller初始化时使用,而Operational Register则是在USB controller运行时使用,比如当USB device被检测到的时候。(注1:图4.1中的Base即capability register base address)
2. 对USB host controller 初始化。初始化首先将USB controller 停止工作(stop)。就是将图4.2中的R/S位