文章来源: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事务,发送相应事务下的相应数据.
阅读(1612) | 评论(0) | 转发(0) |