請(qǐng)問(wèn)CH32V307高速USB中斷傳輸參考哪個(gè)例子?

如題,請(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ù)如圖所示:

微信截圖_20220920104728.png

此外需要將所有描述符中涉及端點(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中的示例代碼。

icon_rar.gifHIDKeyboardDevice.zip



您好,設(shè)備枚舉請(qǐng)參考附件HID報(bào)表描述符,數(shù)據(jù)傳輸部分請(qǐng)您自行實(shí)現(xiàn)。

emobile_2022-09-22_10-54-19.png

icon_rar.gifHIDCompliantVendorDefined.zip



謝謝張工,我試一下。


@沁恒張工,你好。你的程序我測(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è)工程基本上是能通的。我再查一下卡死是什么原因。有消息再更新。謝謝。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频