如題,請(qǐng)問(wèn)CH32V307高速USB的例程中,哪個(gè)是中斷傳輸?shù)睦樱?/p>
謝謝。
另,請(qǐng)教一下,在哪里將高速USB的傳輸間隔設(shè)置成125us,
謝謝。
如題,請(qǐng)問(wèn)CH32V307高速USB的例程中,哪個(gè)是中斷傳輸?shù)睦樱?/p>
謝謝。
另,請(qǐng)教一下,在哪里將高速USB的傳輸間隔設(shè)置成125us,
謝謝。
您好,CH32V307 USBHS例程中關(guān)于KM的鍵鼠例程均屬于中斷傳輸,若做設(shè)備數(shù)據(jù)傳輸?shù)拈g隔則由主機(jī)決定,倘若做主機(jī),則需要修改定時(shí)器的時(shí)間間隔,每125us發(fā)一次IN包即可。
@沁恒張工,謝謝。我是想用CH32V307做設(shè)備,使用中斷傳輸。PC和CH32V307進(jìn)行通訊。我測(cè)試了HIDKeyboardDevice例程,并且修改了配置描述符如下:
/*?USB配置描述符(高速)?*/ const?UINT8??MyCfgDescr_HS[?]?= { ????0x09,?0x02,?0x22,?0x00,?0x01,?0x01,?0x00,?0xC0,?0x32,/*?Config?Desc?*/ ????0x09,?0x04,?0x00,?0x00,?0x01,?0x03,?0x00,?0x00,?0x00,/*?Interface?Desc?*/ ????0x09,?0x21,?0x11,?0x01,?0x00,?0x01,?0x22,?RepDescSize,?0x00,/*?HID?Desc?*/ ????0x07,?0x05,?0x81,?0x03,?(UINT8)DEF_USB_HS_EP_SIZE,?(UINT8)(?DEF_USB_HS_EP_SIZE?>>?8?),?0x00, };
修改成了custom hid設(shè)備,
但實(shí)際測(cè)試的時(shí)候,發(fā)現(xiàn),還是被識(shí)別成了HID鍵盤(我想的是,應(yīng)該識(shí)別成一個(gè)HID Compilant Device)。并且,Ep1_Tx發(fā)送時(shí),還是只能發(fā)送8字節(jié)。
我看了USB2.0的微幀概念,知道可以每125us發(fā)送最大一包1024字節(jié)的數(shù)據(jù),并且,可以提供最多2次的增發(fā)(相當(dāng)于3072字節(jié)每125us)。 想實(shí)現(xiàn)這樣的通訊的話,應(yīng)該如何修改呢,請(qǐng)指點(diǎn)一下。謝謝。
如果您想實(shí)現(xiàn)的是HID的兼容性設(shè)備或自定義設(shè)備,需要將HID報(bào)表描述符Usage Page改為FF00-FFFF之間的任意數(shù)值即可,具體參數(shù)如圖所示:
此外需要將所有描述符中涉及端點(diǎn)傳輸字符個(gè)數(shù)的值改為1024個(gè)字符,需要注意的是描述符的字符數(shù)需要對(duì)應(yīng)修改。
@一帆風(fēng)順 謝謝指點(diǎn)。我做了如下修改,但bus hound抓包顯示,上位機(jī)在獲取配置描述符時(shí)返回bad parameter。能否百忙之中幫我看一下描述符配置哪里出了錯(cuò)。謝謝了。
#define?RepDescSize???????????28 #define?DEF_USB_HS_EP_SIZE?????????512????????????/*?端點(diǎn)高速模式大?。?024和512都不行)?*/ .... /*?USB配置描述符(高速)?*/ const?UINT8??MyCfgDescr_HS[?]?= { ????0x09,?0x02,?0x29,?0x00,?0x01,?0x01,?0x00,?0xA0,?0x32,/*?Config?Desc?*/ ????0x09,?0x04,?0x00,?0x00,?0x02,?0x03,?0x00,?0x00,?0x00,/*?Interface?Desc?*/ ????0x09,?0x21,?0x11,?0x01,?0x00,?0x01,?0x22,?RepDescSize,?0x00,/*?HID?Desc?*/ ????0x07,?0x05,?0x81,?0x03,?(UINT8)DEF_USB_HS_EP_SIZE,?(UINT8)(?DEF_USB_HS_EP_SIZE?>>?8?),?0x01, ????0x07,?0x05,?0x01,?0x03,?(UINT8)DEF_USB_HS_EP_SIZE,?(UINT8)(?DEF_USB_HS_EP_SIZE?>>?8?),?0x01, }; const?UINT8?MyReportDesc[]?= { ????0x06,?0x00,?0xFF,????????????//?(GLOBAL)?USAGE_PAGE?????????0xFF00?Vendor-defined ????0xA1,?0x01,??????????????????//?(MAIN)???COLLECTION?????????0x01?Application?(Usage=0x0:?Page=,?Usage=,?Type=)?<--?Warning:?USAGE?type?should?be?CA?(Application) ????0x15,?0x00,??????????????????//???(GLOBAL)?LOGICAL_MINIMUM????0x00?(0)?<--?Redundant:?LOGICAL_MINIMUM?is?already?0 ????0x26,?0xFF,?0x00,????????????//???(GLOBAL)?LOGICAL_MAXIMUM????0x00FF?(255) ????0x75,?0x08,??????????????????//???(GLOBAL)?REPORT_SIZE????????0x08?(8)?Number?of?bits?per?field ????0x85,?0x01,??????????????????//???(GLOBAL)?REPORT_ID??????????0x01?(1) ????0x96,?0x00,0x04,??????????????????//???(GLOBAL)?REPORT_COUNT???????0x40?(64)?Number?of?fields ????0x09,?0x01,??????????????????//???(LOCAL)??USAGE??????????????0xFF000001 ????0x81,?0x02,??????????????????//???(MAIN)???INPUT??????????????0x00000002?(64?fields?x?8?bits)?0=Data?1=Variable?0=Absolute?0=NoWrap?0=Linear?0=PrefState?0=NoNull?0=NonVolatile?0=Bitmap ????0x85,?0x02,??????????????????//???(GLOBAL)?REPORT_ID??????????0x02?(2) ????0x09,?0x01,??????????????????//???(LOCAL)??USAGE??????????????0xFF000001 ????0x91,?0x02,??????????????????//???(MAIN)???OUTPUT?????????????0x00000002?(64?fields?x?8?bits)?0=Data?1=Variable?0=Absolute?0=NoWrap?0=Linear?0=PrefState?0=NoNull?0=NonVolatile?0=Bitmap ????0xC0,????????????????????????//?(MAIN)???END_COLLECTION?????Application };
另:附上代碼,使用的是CH32V307EVT中的示例代碼。
您好,設(shè)備枚舉請(qǐng)參考附件HID報(bào)表描述符,數(shù)據(jù)傳輸部分請(qǐng)您自行實(shí)現(xiàn)。
謝謝張工,我試一下。
@沁恒張工,你好。你的程序我測(cè)試了。但有個(gè)問(wèn)題。調(diào)用一次Ep1_Tx函數(shù)后,USBHS_Endp1_Up_Flag一直為1(發(fā)送中)。usb貌似就卡住了。重新插拔usb接口(但板子不斷電),PC提示無(wú)法識(shí)別的設(shè)備。
哦。又試了一下。在moudriver的debug狀態(tài)下會(huì)出現(xiàn)這個(gè)問(wèn)題,但斷開(kāi)調(diào)試后,看上去正常了。但連續(xù)(調(diào)用兩次Ep1_Tx后,隔幾百毫秒再調(diào)兩次,這樣)調(diào)用幾次Ep1_Tx后,就又卡住了。
您好,測(cè)試USB收發(fā)不建議使用仿真,可以通過(guò)打印調(diào)試。如果出現(xiàn)卡死現(xiàn)象,請(qǐng)通過(guò)打印信息判斷程序死在什么位置,通過(guò)打印標(biāo)志位或數(shù)據(jù)長(zhǎng)度亦或是寄存器等信息確定程序卡死原因。
謝謝張工,你給的這個(gè)工程基本上是能通的。我再查一下卡死是什么原因。有消息再更新。謝謝。