USB学习笔记(二)——USB工作流程

        稍微了解一点USB的人,都会知道USB电缆包含二条信号线(D+,D-)、一条+5V电源线,一条地线。连上之后,主机对设备供电,然后主机与设备之间的通信就开始了。

       1.检测设备:

        当开机时,集线器会让主机得知所有已连接的设备,也就是被称为枚举的过程。在这个过程中,主机会为每一个设备指定地址。开机之后,集线器仍然会不停地对外围设备进行扫描,以确定是否有新设备的连接,或旧设备的断开。

        这个就很明了了,“主机会为每个设备指定地址”,这句话很有深义,因为不管怎么样,设备的硬件地址是确定的,不会变的。那么主机为设备指定的这个地址是不是就是Windows为设计者或使用者提供的接口?也就是说这个地址也就是一个指针,指向真正的硬件的地址。就是Windows设定的一个Windows内部接口,以映射到USB端口。

这些就是我的鼠标的各种硬件信息。

上面可以看到,位置0(Port_#0003.Hub_0001),这个是不是就是Windows分配给我鼠标的虚拟地址?我觉得就是这个,因为我的键盘的位置跟鼠标是不一样的为Port_#0001.Hub_#0004,而且这个也很符合Windows的命名规则。然后我换了一个接口,因为原来鼠标是接在USB3.0接口上的,这次我换了一个换到USB2.0接口上,发现,位置0没有了,只有Port_#0002.Hub_#0004。Hub为集线器,Port为端口,所以我90%可以肯定这个就是Windows提供的接口。

        数据传递,看了一下,也是采用的掩码的形式,这个发现几乎所有的总线都会有这个部分。

        2.检查错误

        在数据传输的过程中,主机通过特定的算法给发送的数据加上错误检查位,(个人觉得这个用的就是CRC,因为不管从效率上,还是从排错率上,都没得挑剔。)然后当设备接收到数据时也会对数据进行运算比较,确定哪出错了。当然USB也存在不需要错误检查的。(也就是“一”中的同步传输。)

        3.管理数据

        主机管理着总线上的数据流,在同一时刻可能有多个外围设备要求传输数据。此时主机控制器会将可用的时间分段,每一段叫做一个帧或微帧,然后将帧或微帧分配给每一个发生的传输。有些特定速率的传输,必须在一个帧内有足够的时间。这时候驱动程序会请求足够的带宽,来保证传输的时间。如果带宽不够,主机就不会让此传输发生。此时驱动程序必须请求较小的带宽,或者等待请求的带宽能够取得的时候。无时间保障的传输将使用其余的帧,并且可能必须等待。

        也就是说当数据传输的时候就要分帧传送,然后对帧查错。可是产生的问题就是,这个帧的同步问题。。。等回来再细查吧。然后就必然存在一个优先级的问题,就不知道是硬件实现还是软件实现。

        4.与外围设备交换数据

        有时候,设备驱动程序会要求主机在一定速率下发送和接收数据。而在其他情况下,则只有当应用程序或其他软件组件有要求时,主机才会与外围设备通信。如果发生问题,设备驱动程序会将问题报告给相应的应用程序。

        当应用程序产生信息,会通过接口发给硬件,硬件根据数据产生反应,然后把应用程序需要的数据返回给程序。

       

        这就产生了一个前面提到过的问题,怎么通过Windows与硬件通信,如果是DOS,我可以自己写底层驱动,我可以什么东西都自己做,我学协议为的就是这个,可是Windows集成了,所以就没那么简单了,在我又有点灰心的时候,我看到了一句话,我一下子就精神了。

        ——设备驱动程序与USB主机控制器以及根集线器硬件之间的通信,则是借助于其他系统层级的软件组件来管理。应用程序不必须知道USB通信的细节,它们只需使用标准的操作系统函数发送和接收数据即可。这些函数可以使用任何编程语言来访问

        我还是想知道USB底层的东西。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值