USB学习笔记(一)——USB最基本的一些东西

        学习USB,主要是因为小学期要做的内容里面有一个主从节点通信的课题。

        可是不用的分组之间有不同的分工,所以老师就要求我们做到自发自收,于是就得从USB这里开始了。

        首先第一步,当然就是想试试两个USB接口之间直接连接会出现什么情况,结果很简单,没有情况,Windows什么反应都没有。。。到网上找了一下,很多人都说这是行不通的。可是我觉得这怎么会行不通?有什么理由行不通?在我的印象里,只要两个设备之间有了电气连接,而设备跟主机能识别并控制这种电气连接的状态就是能够传输数据的。何况还是一个设备之间,根本不存在电气的不兼容性。又有很多人说电平相等无法传输的问题,这USB接口的两条数据线难道不是两个锁存器么,有什么理由传输不了数据。

       然后当然就是学习通讯协议了,没别的办法。可是,Windows内部架构又不是很清楚,如何通过Windows操作USB控制器,这又是一个不小的问题,有点烦,前几天刚被Windows编程搞得头大,这又跟内核较上劲了。

 

先来通讯协议吧。

       所有的USB通信(USB3.0除外)均发生在主机和设备之间。主机负责管理总线上的传输,而设备响应来自主机的通信。端点(EndPoint)是设备的缓冲区,用来存储接收到的数据和待发送的数据。每个端点拥有特定的编号、传输方向以及在一次事务中端点可发送或接收的最大数据字节量。(跟CAN总线好像,只是CAN总线没有明显的主从之分) 每个USB传输由一个或多个事务(transaction)组成,这些事务可将数据载入端点或从端点取出。USB2.0事务开始于主机在总线上发送的令牌包信息(Token Packet)。令牌信息包含有目标端点号和方向。IN令牌信息包表示向端点请求数据包。OUT令牌信息包则是主机派发数据信息包的先行信息。

        这都是从书上查到的,可是这些就总括了USB的工作模式与通讯方式。先向总线上发送令牌,主机告诉从机或从机告诉主机要干什么,然后被动方做好准备,然后进行传输。其实从各方面来讲,我觉得如果可以控制D+与D-这两个数据线电平,完全可以自己开发通信协议,不过总是感觉数据的同步是一个很大很大的问题。

        USB支持4种传输类型:控制传输、批量传输(个人觉得U盘用的就是批量传输,开始还觉得是同步传输,后来一看定义就知道了)、中断传输以及同步(即等时)传输。

        所有的传输类型中,只有控制传输有确定的阶段。控制传输最多有3阶段(Stage),分别为设置阶段、数据阶段、状态阶段。设置阶段含有请求。存在数据阶段时,此阶段含有从主机或设备发来的数据(视请求的内容而定)。状态阶段含有表明传输是否成功的信息。在控制读传输中,设备会在数据阶段传送数据;而在控制写传输的数据阶段中,则由主机来发送数据。而其它的传输类型则由软件在更高层次上定义了解读原始数据的方法。批量传输在总线空闲时速度最快,但不保证时序。打印机和USB虚拟COM端口的数据使用的就是批量传输。中断传输保证最大等待时间(latency)(即两次事务尝试间的间隔),鼠标和键盘就用的这种。同步传输保证时序,但允许一定的差错存在,比如视频,音频等。

       端点:数据的来源和数据的接收端。所有的总线传输都是传到设备端点(device EndPoint),或从设备端点发过来的。端点就是一块典型的存储多个数据字节的缓冲区。它可由数据存储器或设备控制器芯片中的寄存器构成。它里面的数据可以是已收到的数据或待发送的数据。主机也有类似的缓冲区,介主机没有端点,主机只作为与设备端点通信的源和目的地。

       这句话该怎么理解?我的理解就是主机有自己默认的缓冲区,从机只需要将数据发送到总线上就可以了,不需要指明要将数据存到主机的哪个位置,因为主机会将数据存到该存的地方,所以主机没有必要设置端点。

       在数据可传输之前,主机和设备必须建立起一个管道(Pipe)。管道是设备端点和主机控制器软件之间的联系。主机软件会与每个主机想要通信的设备端点地址建立管道。(个人觉得这是对于Windows来说的)

        随着了解的越来越多,更多问题出现了,因为我用的不是单片机,用的是Windows,我想要越过Windows做一些事情,几乎是不可能的,我要对付这个大BOSS。。。无法解决的一个就是怎么能直接访问USB控制器啊,USB 接口啊。。。对对Windows编程的我几乎一窍不通的我来说,都要从头来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值