基于DWC2的USB驱动开发-PING协议详解 (digilent usb device驱动)
整理分享基于DWC2的USB驱动开发-PING协议详解 (digilent usb device驱动),希望有所帮助,仅作参考,欢迎阅读内容。
内容相关其他词:dwc3usb驱动,dwc3驱动,dwc usb,dwc3usb驱动,dwc3usb驱动,wdf usb驱动开发指南,usbcrw驱动,dwc3驱动,内容如对您有帮助,希望把内容链接给更多的朋友!
如下是一个实例三.PING协议过程和实例Ping的响应是硬件做的,因为设备需要接收主机连续的PING,如果软件处理会来不及。那么硬件怎么知道回主机的PING包回ACK还是NAK呢,这就是看软件有没有配置好DMA并设置CTL寄存器的EPena置位,如果软件已经配置好了则硬件回ACK,并自动接收后面的OUT数据,并通过DMA搬运到用户空间,反之则NAK。过程如下:1.主机OUT数据,设备返回了NAK2.主机收到NAK,知道设备没就绪,于是发PING3.设备收到PING之后如果还未就绪则NAK,否则则ACK4.主机按照描述符中的bInterval时间间隔重新发PING,直到设备ACK,设备ACK后发数据。5.设备收到主机OUT的数据如果还可以继续接收后面的数据则ACK,否则则发NYET。注意虽然前面PING设备ACK了,这里设备还是有可能NAK。主机如果收到设备的ACK则继续发后面的数据,如果收到NYET则表示本次OUT数据成功,但是设备不能接收后续数据,发后面的数据前重复上面的PING过程,如果主机收到NAK则说明本次数据设备没有接收,需要重新PING然后重发本次数据。总结一下就是对于OUT数据设备可能有三种响应ACK:本次接收了,还可以继续接收后面的。NYET:本次接收了,不能继续接收。NAK:本次未接收。上述说明的设备对PINGACK了,但是对后面的数据OUT又NAK了的情况,是不正常的现象,设备都告诉主机准备好了,后面又没有接收数据。高速的批量/控制端点在其端点描述符中需要指定其最大NAK速率。每个bInterval时间间隔内,端点最多允许NAK一次。如果端点的描述符bInterval为0则表示端点从不会NAK。如果在数据阶段之后发生超时,主机必须返回到PING阶段。转回PING状态不会影响事务数据阶段的datatoggle状态。以下是一个实例过程(1)主机OUT数据,设备NAK了,表示设备不能接收(2)主机看到设备NAK,不能接收,于是进入PING状态。注意上面主机不会一上来就PING,因为这个时候还不知道设备能不能接收,所以先不管三七二十一发一把再说,万一设备能接受呢。只有主机确认设备不能接收,即设备NAK之后才会进入PING状态。(3)设备一直NAK则主机一直PING(4)设备终于ACK了主机的PING,表示可以接收数据了。这里的ACK是设备的硬件做的,所以在此之前设备的软件配置好了DMA并置位了DOEP的CTL寄存器的EPena位。(5)主机OUT数据,设备也接受了,回了ACK,至此数据的OUT阶段总算成功了。第(5)步设备实际还有可能回NAK,表示未接收,回NYET表示本包接收但是不能接收下一包。四.总结以上介绍了高速数据阶段的PING协议,了解了过程和背景,对于驱动开发人员尤其要了解哪些是硬件做的,哪些是软件做的,分别在什么阶段什么时机做。本文来自互联网收集整理,由家电维修技术小编精心转载,更多相关文章请到维修交流:汤梓红