阅读:3236回复:15
usb基本问题 - 关键字 带宽,ping,等待,pid,nak,ack (200分)
1
我在写usb 主机驱动,协议上说,只当有可获得的带宽时,批传送才会发生。如果USB 有较多的空闲带宽,则批传送发生 地相对频繁,如果空闲带宽较少,可能有很长时间没有批传送发生。 这里的带宽是怎么获得的? 2 在usb2.0中批量传输是不是有个ping的概念? 这个ping 是怎么实现的? 在发送 bulk 传输out 的之前,必须发送ping么? 3 主机发送数据后,是不是应该有个等待时间,如果超过这个时间从机还没有反映就把刚才的数据重发。 这个等待时间怎么确定? 重发是硬件自己就会做,还是需要我们的软件来做。 4 主机,或者是从机收到的数据都是硬件就把数据解析了,我们看到的已经不是usb 封包了,可我想知道这次包的 pid 怎么办? 怎么才能看到封包的pid。 5 主机或者从机怎么才能发送nak,ack 等应答包? 也是硬件做的吧? 接收呢?接收到nak,ack 能不能通知我,接收到的是什么。 问题多了点,各位能多帮帮忙。 先谢了~ 我现在用的主机:vt6202 从机:isp1581 |
|
沙发#
发布于:2004-10-09 14:37
唉,顶一下。
是不是问题描述的不清楚? |
|
板凳#
发布于:2004-10-09 14:42
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2004-10-09 16:01
哈哈,难道楼上就是传说中的雪山飞狐 ?
:D |
|
地下室#
发布于:2004-10-09 16:08
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2004-10-09 16:20
呵呵,可别这么说。
多谢帮忙! :D 才知道你的名字该怎么念。 哈哈 |
|
6楼#
发布于:2004-10-09 16:26
5,都是硬件做的.
|
|
7楼#
发布于:2004-10-09 16:37
ren 兄isp1581 可不可以通知我到来的bulk传输的握手包是nak 还是ack 。
它好象最多只能把nak 也触发中断。 但这样,我就不能确定,到达的包是nak 还是ack了。 |
|
8楼#
发布于:2004-10-10 11:44
有必要顶一下了。
|
|
9楼#
发布于:2004-10-10 11:49
我使用的isp1161A1做usbhost也碰到了同样的问题。经常接收数据时得到NAK的反应。需要多次接收才能真正接收到数据。照理说应该是ACK时才有中断的呀。是不是philip的芯片都有这个问题?还是有某些寄存器的设置有问题?
|
|
10楼#
发布于:2004-10-10 14:36
我使用的isp1161A1做usbhost也碰到了同样的问题。经常接收数据时得到NAK的反应。需要多次接收才能真正接收到数据。照理说应该是ACK时才有中断的呀。是不是philip的芯片都有这个问题?还是有某些寄存器的设置有问题? 如果是接收到nak也触发中断,那是寄存器设置的问题。可以设置仅仅ack 时触发中断,也可以设置 ack 和 nak 都触发。 1161我不清楚,1581中有个中断配置寄存器(地址10H)就是设置这个的。 按理说,1161同样也应该有个类似的寄存器。 可能主机和从机不一样吧。 我做的 6202 也没注意到有这样的寄存器。 [编辑 - 10/10/04 by wdy9927] |
|
11楼#
发布于:2004-11-29 08:31
结帖了!
虽然有些问题还是不太清楚! |
|
12楼#
发布于:2004-11-29 09:24
ren 兄isp1581 可不可以通知我到来的bulk传输的握手包是nak 还是ack 。 这个其实不用区分的,不管是nak还是ack,都代表端点中没有数据了! 也就是说端点是空的,因此你只要收到中断,就可以往端点里写数据 另外我建议你你设置中断寄存器时设成对第一个nak和所有的ack产生中断,这样没出现一个ack之后最多出现一个nak,否则会出现很多的nak,如果这些nak都产生中断你就做不了什么事了,非常频繁。 |
|
13楼#
发布于:2004-11-29 10:09
恩。 是,我试过了,不停的产生中断。
其实我那时候是想能不能想办法把是nak产生的中断,和ack产生的中断分别出来。 但恐怕是不行~ |
|
14楼#
发布于:2004-11-30 09:31
分辨不了,不管是nak还是ack,在中断寄存器中都只有一bit表示
只能判断是否有中断,无法判断该中断是nak还是ack,不过有一个不算太好的办法,理论上说在你写满了一个数据包后,第一个收到的是ack,之后的都是nak,不知道这个对你是否有意义,你可以对中断数量记一下数 |
|
15楼#
发布于:2004-11-30 10:28
谢ren 兄!
ren 兄果然够意思! :D |
|