打印

请教:2410 USB device中的setup_end和data_end之间的关系?

[复制链接]
2272|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子小骑兵|  楼主 | 2008-11-7 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了多遍的DATASHEET,也在网上查了它们的中文翻译,但始终是云里雾里,不能想通,不直到这两个中断位具体的作用和它们之间的关系是怎样的?

DATA_END是CPU设置的,那我设置了这个中断位有什么用呢? 是不是我设置了这个位,在CPU就会自动响应控制传输的握手阶段?那么SETUP_END又是什么用的呢?很难理解这句话“set by the usb when a control transfer ends before DATA_END is set”?

相关帖子

沙发
电子小骑兵|  楼主 | 2008-11-11 11:53 | 只看该作者

自问自答


可能问题比较简单,看的人不多,呵呵。我自己想了想,有了一些理解,不知对不对,把他贴出来,希望给今后象我这样的菜鸟一点参考:

以下都是针对控制传输而言的:

1. setup_end中断是出现在数据阶段结束,而握手阶段尚未开始的时候。开始我一直以为这个中断应该是USB HOST给CPU的,但仔细想了想,觉得还是应该是2410的USB DEVICE给CPU的,因为在USB的传输协议里,我找不到这个中断的具体信号。所以在2410的USB DEVICE里,应该有一些内置的FIRMWARE或逻辑电路来自动生成这个中断信号。

2.data_end中断和setup_end中断是不能共存的,因为“setup_end is set by the usb when a control transfer ends before data_end is set”.

3.控制传输的握手阶段,作为OUT型的握手是自动完成的,而且不会产生任何中断,因为0字节数据包is not a valid token and will be not written to the FIFO.

4.data_end中断,是由CPU置位,USB清空相应位完成的,这个清空工作,同样是由USB DEVICE的逻辑电路来完成的。置位data_end主要有以下两个作用:
  a. 如果数据长度小于wLength值,但最后一次剩下的数据长度恰好等于一次传输最大数据包长度,则CPU会再向主机发送一个长度为0的数据包,以作为该数据阶段的结束。
  b.  自动应答IN型的握手阶段数据包。

使用特权

评论回复
板凳
mcuduoduo| | 2008-11-11 14:48 | 只看该作者

不错

没用过2410,不敢乱说。对小骑兵勤于思考的精神大大赞一个。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

32

帖子

0

粉丝