usb学习笔记3

来源:互联网 发布:淘宝网纸箱 编辑:程序博客网 时间:2024/05/12 18:16

usb的包。

usb传输是以包为单位的。包又可以细分为域。usb包前面有一个同步域,这个是有usb芯片负责维护的,编程人员不必关心这个域。包标示符PID是每个包都有的,并以pid来标示包的类型,包可以分为令牌包,数据包,握手包,特殊包。


令牌包包括IN,OUT,SOF,SETUP.这个包个人感觉比较重要。作用如下:

IN用来通知设备要向host输入一个数据包。

OUT则相反,用来通知设备,host将要输出一个数据包。

SETUP,与IN 相似,但要比in要有很多的限制。如只能想控制节点输入,后面只能跟data0数据包。

SOF 在每帧开始时发送,没有什么可以多解释的。


数据包:

包括data0,和data1,没有什么可以解释的,就往后面写数据呗,格式如下:


握手包:

包括ACK ,NAK,STALL .

ACK 标示正确的接收了数据。

NAK 标示没有数据需要返回。

STALL 标示设备无法执行请求,或者端点已经挂起。这是一种错误的状态。



上面介绍的只是usb1.1的包的分类其实在usb2.0中海油很多其他的包,如特殊包,我估计我不会用到它们,所以没有在这里列举。



usb的各个包的组合形成事务。事务就是一个过程。

usb规定了4中传输类型。包括:批量传输,等时传输,中断传输,控制传输。

由于usb手柄所产生的数据具有不可测,数据量小的特性,因此采用中断传输。

中断传输与单片机的中断不同,而是一种“保证查询频率的传输,中断端点在端点描述符中药报告他的查询间隔,host负责保证在小于这个时间间隔的范围内安排一次传输。由这个定义可以看出,中断传输实际上就是相当于单片机中的轮询。有过鼠标编程经验的人都会知道一个现象,如果用windows的mouse_move来画一个图,画出来的不是一条直线,而是一个个孤立的点,这实际上就是由于时间间隔很大造成的。






原创粉丝点击