Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312411
  • 博文数量: 68
  • 博客积分: 1501
  • 博客等级: 上尉
  • 技术积分: 1010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-30 09:52
文章分类

全部博文(68)

文章存档

2010年(1)

2009年(67)

我的朋友

分类:

2009-07-16 14:47:24

文章来源:http://gliethttp.cublog.cn[转载请声明出处]

当设置地址的setup包发送完之后
usb host主机会继续产生一个IN事务,进而进入这里,将setup包中设置的地址值,配置到usb从设备上--pdiusbd12
对于PDIUSBD12来说,当为OUT事务数据包时,只有包数据接收完毕之后,才会触发PDIUSBD12的中断,
当为IN事务时,一旦host发出IN事务的PID令牌值,PDIUSBD12会立即中断,mcu此时,把需要发送的数据送到USB总线即可.

如果此次操作是OUT事务操作,那么当数据全部传输完毕之后,host主机会再产生一个IN事务操作,
从机必须配合这个IN事务操作发送一个空数据包(实际51测试slave可以不用回发0字节的空数据包;但在at91rm9200下当没有待发的数据时,当出现IN事务时,at91rm9200固件驱动会发送0字节包来响应该IN事务)
如果此次操作是IN事务操作,那么当数据全部传输完毕之后,host主机会再产生一个OUT事务操作,
从机必须配合这个OUT事务操作返回正确ACK(ACK已经由usb控制器硬件自动完成)

所以从这里看,IN事务也好,OUT事务也好,他们都是host主机以逻辑为出发点"乱搞"出来的,[gliethttp]
对于不负责任的从机,可能端点0,1,2之类一旦发生数据中断,它就发数据,它不管当前发的数据是为IN事务服务的,还是为OUT事务服务的,
而对于负责任的从机,它会完全按照host提出来的IN、OUT事务的逻辑,配合IN、OUT事务,发送相应事务下的相应数据.

阅读(1556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~