這段時間學習LPC11Uxx系列的USB-HID,研究官方的USB庫文件和HID文件發(fā)現(xiàn)對于hiduser里面的GetReport和SetReport只在端點0的響應函數(shù)中有調用,采用USB抓包工具 Bus Hound發(fā)送指令時也可發(fā)現(xiàn),如果選擇HID-Compliant Device,只能發(fā)送控制類的指令,而對于實際的數(shù)據(jù)傳輸需要另外配置端點進行傳輸。
USB 的傳輸事務類型可在端點描述符中配置,不同的端點可以配置成不同類型的傳輸事務,但端點0默認是控制傳輸,上電連接USB即可啟用,不需要配置。
HID設備類一般配置數(shù)據(jù)傳輸端點為中斷傳輸,由于USB不支持硬件中斷,所以USB的中斷傳輸實際上是主機在一定的時間不斷地主動輪詢設備檢查其是否有數(shù)據(jù)需要傳輸,對此有3個重要參數(shù)需要在端點描述符中進行配置:
傳輸類型
輪詢時間間隔
每次傳輸?shù)淖畲髷?shù)據(jù)包大小
/* Endpoint, HID Interrupt In */USB_ENDPOINT_DESC_SIZE, /* bLength */USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */HID_EP_IN, /* bEndpointAddress */USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */WBVAL(0x0040), /* wMaxPacketSize */0x20, /* 16ms */ /* bInterval (輪詢時間間隔)*//* Endpoint, HID Interrupt Out */USB_ENDPOINT_DESC_SIZE, /* bLength */USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */HID_EP_OUT, /* bEndpointAddress */USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes(傳輸類型) */WBVAL(0x0040), /* wMaxPacketSize(傳輸數(shù)據(jù)包的最大大?。?nbsp;*/0x20, /* 16ms */ /* bInterval */0 /* bLength */
USB中斷傳輸事務流程圖
對于IN事務,每次輪詢時間間隔內,主機主動發(fā)送IN令牌(包括設備地址和端點號),然后切換到接收數(shù)據(jù)狀態(tài),等待設備發(fā)送數(shù)據(jù),如果設備有數(shù)據(jù)要返回,則把一個數(shù)據(jù)包放到總線上。
對于OUT事務,當主機發(fā)送數(shù)據(jù)時,USB設備會進入中斷函數(shù),根據(jù)地址和端點號信息調用相應的端點響應事件函數(shù),從而進行相關的處理。