阅读:6308回复:8
USB通讯协议入门问题 ( 给分 )
在USB设备枚举完成后,DEVICE 和 HOST 是如何通讯的.
比如说: HOST 有数据要发送到 DEVICE , 它怎么通知 DEVICE 接收.这里HOST 向 DEVICE 发送什么包, DEVICE 如何动作. 反之 DEVICE-->HOST 也一样. 我翻遍了手边的资料也没有说明. 请告诉我具体过程, 或者告诉我具体去看什么资料. 谢谢了 这个问题我在论坛的 <USB驱动开发>版 上问过了,他们给的答案还是让我一头的雾水. 帅哥,美女们,能不能回答的稍微具体一点啊,给点专业精神. 谢谢了 |
|
沙发#
发布于:2004-09-22 17:27
这是USB总线的协议:
USB的每次传输都按启动->数据->状态三阶段 启动阶段HOST和DEVICE 决定本次的传输的方向(H->D or D->H), 以及传输的数据长度 数据阶段HOST/DEVICE 就按约定进行数据的传输 状态阶段双方交换本次传输的结果--成功/失败 一般USB的接口芯片实现该协议, 对于FW编程人员只是看到的是本次传输的结果: Control-IN/OUT, Bulk-in/out, 从而作出相应的收发数据的动作! (以上是本人研究USB的一点心得, 请高手指正 ) :D |
|
板凳#
发布于:2004-09-30 15:06
要看你实现的usb的什么profile 这个profile要求的end point的个数和类型 int、bulk、iso的end point的数据传输各有各的方式 但dev都是被动的,需要host来init传输,dev来响应 细说就太多了,你看看usb的规范吧 |
|
地板#
发布于:2004-10-10 21:14
这里涉及到usb之外的东西。 我们仍用host和device这两个词,以下的讨论以usb为例子但并不仅仅局限于USB,且并不保证所作描述的精确性。 1.进入待命状态 对deivce来讲,host是一个直运行的命令发送者,只要建立起了有效的数据通道,host会不确定的发送命令;这里device需要解决的第一个问题,就是如何做好接收命令的准备。 那么系统状态流程中device的第一个状态,便是:待命。 以cypress encore的单片机为例, 如果用Bulk OUT(or Interrupt OUT) 管道来接收命令,那么除了一切必要的初始化外,这个管道对应的模式应当被设置为ack out,此后程序应该以某种方式(如循环)等待host命令的到来。 |
|
地下室#
发布于:2004-10-15 16:44
最顶上那个兄弟说的只是控制传输。例如,如果是中断IN传输,HOST发出的第一个包就是IN包(PID,设备地址和端点地址),DEVICE负责回应NAK,ACK或者STALL。。。
我的理解:固件只管中断程序和寄存器的设置,设备列举好以后,主机知道了设备可以执行的功能,就发一些相关的包,就可以开始传输了,所以才说USB是主从式的 资料很多的,我看的每本USB的书都有,但是还是不懂。。。。。 |
|
5楼#
发布于:2004-10-18 13:59
USB的一个基本原则:所有通信建立、状态查询、数据发送和接收请求是HOST发起的,DEVICE不向HOST发请求。
OTG设备具有HOST 和DEVICE 两个角色,两个OTG设备间当一个是HOST,一个是DEVICE时,两者之间可以通过HNP协议互相请求的,不在讨论这次讨论之内。 USB DEVICE FIRMWARE所在的层次:USB2.0SPEC里(第8章)所描述的传输协议一般的由USB的接口芯片实现该协议,不需要我们固件去实现这些协议,当然需要了解,并在具体的ENDPOINT和HOST 间指定传输类型。FIRMWARE需要是对更上一层协议的解析(如DEVICE作为MASS STORAGE 设备,需要能解析指定的SCSI命令),可以用网络分层模型去理解(如物理层、链路层、传输层等等)。 一般USB有两个过程: 1、USB HOST 和 DEVICE建立通信链路过程,也就是你说的“USB设备枚举完成”,在DEVICE 插入HOST后,HOST和DEVICE 的EP0之间使用CONTROL 传输建立通信链路,HOST获取DEVICE的相关信息,并为DEVICE分配地址。 2、数据传输(或其他,这里把DEVICE作为MASS STORAGE设备),HOST和DEVICE某个ENDPOINT间可以建立传输通道,如果通道的传输类型是IN,则说明HOST想从DEVICE读数据,如果是OUT则说明HOST想写数据到DEVICE中。HOST知道读(READ10)/写(WRITE10)多少长度数据。至于DEVICE怎么知道HOST已经发完数据了,是由USB接口芯片完成了,一般DEVICE端的USB接口芯片成功接收数据后,会向MCU请求中断,找一个USB控制芯片的SPEC就可以了解了。 3、几篇资料:USB2.0 SPEC,SCSI 命令,某一种USB控制芯片SPEC |
|
6楼#
发布于:2004-10-28 11:48
以键盘为例来说,当有键按下时,就将新的数据写入相应endport的Buffer中,再查看其他特殊寄存器的内容,看Host是否处于空闲状态,如是的话,就修改某些寄存器的内容,告知IC内部的USB SIE Device有数据要传输;USB SIE会自动将数据取走,再自动传给Host,同时设置相关寄存器的内容。这些动作与Firmware都没有关系,Firmware只要丢数据与查看、修改寄存器的内容就行了。
|
|
|
7楼#
发布于:2005-03-30 16:02
有没有实现PC与USB设备通讯的VB源程序,可进行实时数据的传输与接收,一定要是可以实现通讯的。
谢谢! 如果你有什么需要,我将十分乐意提供给你资料, 希望多多合作。 E-Mail:wangkai1314_2000@163.com |
|
8楼#
发布于:2005-08-04 16:16
回答的不错!!!!!
|
|