請教一個(gè)CDC例程中0len packet問題

在例程中\(zhòng)CH32V307EVT\EVT\EXAM\USB\USBHS\DEVICE\SimulateCDC\User\UART

下面對(duì)發(fā)送pack0加了一個(gè)條件判斷,需要等60mS??( DEF_UARTx_RX_TIMEOUT * 20 )才發(fā)送。

請問為什么要等2mS。不可以在( Uart.USB_Up_IngFlag == 0 )后立即發(fā)送嗎?


? ? /* Determine if a 0-length packet needs to be uploaded (required for CDC mode) */

? ? if( Uart.USB_Up_Pack0_Flag )

? ? {

? ? ? ? if( Uart.USB_Up_IngFlag == 0 )

? ? ? ? {

? ? ? ? ? ? if( Uart.USB_Up_TimeOut >= ( DEF_UARTx_RX_TIMEOUT * 20 ) )

? ? ? ? ? ? {


另外,為什么發(fā)送后立即設(shè)置Uart.USB_Up_IngFlag = 0; ?不應(yīng)該等應(yīng)答后在USBHS_IRQHandler( void )中清零嗎?


? ? ? 您好,程序中此部分對(duì)發(fā)送pack0加了一個(gè)超時(shí)判斷,是用來判斷是否需要上傳一個(gè)0長度的數(shù)據(jù)包;

? ? ? 對(duì)于批量傳輸,如果最后一個(gè)IN事務(wù)數(shù)據(jù)長度小于端點(diǎn)支持的最大包長度,主機(jī)就認(rèn)為數(shù)據(jù)已經(jīng)上傳完成,如果最后一個(gè)IN事務(wù)數(shù)據(jù)長度等于端點(diǎn)支持的最大包長度,則需要額外上傳一個(gè)0長度的數(shù)據(jù)包告訴主機(jī)數(shù)據(jù)上傳結(jié)束了;

? ? ? 因此在數(shù)據(jù)上傳時(shí)如果數(shù)據(jù)長度等于端點(diǎn)最大包長度,會(huì)將USB_Up_Pack0_Flag標(biāo)志置位,但不是USB_Up_Pack0_Flag為1就一定需要上傳額外的0長度數(shù)據(jù)包,有可能后面還有數(shù)據(jù)要上傳;所以增加超時(shí)判斷確認(rèn)數(shù)據(jù)上傳結(jié)束了,確實(shí)是需要額外上傳一個(gè)0長度的數(shù)據(jù)包;

image.png

? ? ? 然后就會(huì)執(zhí)行下面這一部分來額外上傳一個(gè)0長度的數(shù)據(jù)包,由于主機(jī)并不會(huì)對(duì)此數(shù)據(jù)包做做響應(yīng),所以在發(fā)送結(jié)束后

立即設(shè)置Uart.USB_Up_IngFlag = 0;

image.png



謝謝解答!


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

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