浙江回收三菱PLC公司
因为根据USB2.0协议,高速(HighSpeed)设备在初始时是默认全速(FullSpeed)状态运行,所以对于一个支持USB2.0的高速hub,当它发现它的端口连接的是一个全速设备时,会进行高速检测,看看目前这个设备是否还支持高速传输,如果是,那就切到高速信号模式,否则就一直在全速状态下工作。同样的,从设备的角度来看,如果是一个高速设备,在刚连接bub或上电时只能用全速信号模式运行(根据USB2.0协议,高速设备向下兼容USB1.1的全速模式)。随后hub会进行高速检测,之后这个设备才会切换到高速模式下工作。假如所连接的hub不支持USB2.0,即不是高速hub,不能进行高速检测,设备将一直以全速工作。
浙江回收三菱PLC公司
回收基恩士,回收康耐视,回收西门子,回收三菱PLC模块,回收仪器仪表。我们以更好、更快的为客户服务为经营宗旨,努力把自身打造成为业界的航母。收购范围:大量收购工厂、公司、个人等因各种原因所积压的。
USB初始化过程中,无论是主机控制器驱动还是根集线器驱动,都是通过URB传输获取设备信息。为urb分配内存并执行初始化。初始化具体的urb包不同的传输模式下,驱动为之申请不同的URB。其中,Linux内核只支持同步传输外的三种传输事件,ISO事务需要手工进行初始化工作。控制传输事务、批量传输事务、中断传输事务API如上所示。事务传输模式下的URB初始化函数有很多相似之处,主要参数含义如下:
浙江回收三菱PLC公司
请求可被导引到设备,设备接口,或某一个设备端结点(endpoint)上。这个请求域也指定了接收者。当指定的是接口或端结点(endpoint)时,wIndex域指出那个接口或端节点。bmRequest(什么请求)这个域标识的请求。bmRequestType域的Type字段可修改此域的含义。本文仅定义Type字段为0即标准设备请求时bRequest域值的含义。wValue域此域用来传送当前请求的参数,随请求不同而变。wIndex域当bmRequestType的Recipient字段为接口或端点时,wIndex域用来表明是哪一个接口或端结。wLength域这个域表明第二阶段的数输长度。传输方向由bmRequstType域的Direction位指出。wLength域为0则表明无数输。在输入请求下,设备返回的数据长度不应多于wLength,但可以少于。在输出请求下,wLength指出主机发出的确切数据量。如果主机发送多于wLength的数据,设备做出的响应是无定义的。
这些信息可以在DbgView中看到。KdPrint()自身是一个宏,为了完整传入参数所以使用了两重括弧。这个比DbgPrint调用要稍好。因为在free版不被编译。经常查看DDK帮助了解各种函数的意义。循序渐进的驱动开发方式按照以下的步骤进行可以减少调试的时间:确定驱动程序需要哪些内核模式对象。确定驱动程序需要哪些上下文环境或者状态信息和这些信息的存储位置。首先编写DriverEntry和Unload例程,初不要增加即插即用支持,这样允许通过控制面板手动的测试驱动程序的装载和卸载。添加处理IRP_MJ_CREATE和IRP_MJ_CLOSE的操作和一些不需要进行设备的访问例程。然后可以使用一个简单的WIN32程序调用CreateFile和CloseHandle来测试。添加寻找和分配驱动程序的硬件的代码,还有在驱动程序被卸载后的重新分配硬件的代码。如果硬件支持即插即用,这一步测试硬件和驱动程序的自动加载能力。添加处理IRP_MJ_XXX函数的派遣例程,初的例程应该没有使用物理设备,后来新的代码应该使用简单的WIN32程序进行测试,例如ReadFile和WriteFile调用,或者其它支持的函数。