CH567單片機(jī)USB設(shè)備模式同步傳輸長度問題

RT,現(xiàn)在使用USB的同步傳輸,UEP_T_LEN寄存器寫入長度4,使用全速設(shè)備實(shí)際發(fā)送長度為4*16=64字節(jié),使用高速設(shè)備實(shí)際發(fā)送長度為4*64=256字節(jié),整了幾天,一直解決不了,有人能幫忙看下么,謝謝。

? ? ? ?現(xiàn)在發(fā)送的數(shù)據(jù)用BUSHOUND驗(yàn)證是正確的,只是長度成倍數(shù)補(bǔ)零,導(dǎo)致數(shù)據(jù)不可使用。


相關(guān)初使化:

USB_CTRL(USB1) = bUC_CLR_ALL;? ? ? ?//清空中斷標(biāo)志和FIFO

USB_CTRL(USB1) = UCST_FS | bUC_INT_BUSY |bUC_DMA_EN;? //設(shè)備模式,高速

USB_SUSPEND(USB1) = 0;? ? ? ? ? ? //不掛起

USB_DEV_AD(USB1) = 0x00;? ? ? ? ? ? ? //設(shè)備地址0

USB_INT_FG(USB1) = 0xff;? ? ? ? ? ? ? //清除中斷標(biāo)志

USB_INT_EN(USB1) = bUIE_FIFO_OV | bUIE_TRANSFER | bUIE_BUS_RST;

UEP_MOD(USB1, EP1) = 0;

UEP_MOD(USB1, EP2) = 0;


UEP_DMA(USB1, EP0) = (xx_uint32_t)Ep0Buffer;

UEP_DMA(USB1, EP1) = (xx_uint32_t)Ep1Buffer;

UEP_TX_CTRL(USB1, EP2) = UEP_T_RES_NAK;

UEP_RX_CTRL(USB1, EP2) = UEP_R_RES_NAK;


打開端點(diǎn):

? ??if(type == EP_ATTR_ISOC)

{

UEP_TX_CTRL(USB1, ep) |= bUEP_T_RES_NO;

}


? ? if(ep > EP0)

? ? {

? ? UEP_MOD(USB1, ep) |= bUEP_TX_EN(ep);


#if USE_DOUBLE_BUFFER

? ? UEP_MOD(USB1, ep) |= bUEP_BUF_MOD(ep);

#endif

? ? }


發(fā)送數(shù)據(jù):

#if USE_DOUBLE_BUFFER

if(ep == EP_DOUBLE_BUFFER)

{

p += ((UEP_TX_CTRL(USB1, ep) & MASK_UEP_T_TOG) > 0) * EP_IN_OFFSET; // 切換雙緩沖

}

#endif


xx_memcpy(p, buf, len);

????????UEP_T_LEN(USB1, ep) = 4;

????????UEP_TX_CTRL(USB1, ep) = ((UEP_TX_CTRL(USB1, ep) & ~MASK_UEP_T_RES)) | UEP_T_RES_ACK;


這是使用全速設(shè)備發(fā)送的,前4個(gè)字節(jié)是對的,后面補(bǔ)了很多零

image.png

這是使用高速設(shè)備發(fā)送的,前4個(gè)字節(jié)是對的,后面補(bǔ)了很多零

image.png

使用端點(diǎn)2上傳的話,上傳長度與UEP2_T_LENx有關(guān)。修改這個(gè)寄存器的值,可以決定上傳長度。


目前便是使用UEP2_T_LENx控制發(fā)送數(shù)據(jù)長度的,但電腦實(shí)際接收的數(shù)據(jù)長度是其16倍。

假設(shè)UEP2_T_LENx=4,電腦接收數(shù)據(jù)長度為64,前4字節(jié)是正確的,后面全部是0


同樣解決了嗎?一樣原因,我們采用ch32v307,? 長度設(shè)置后進(jìn)行同步傳輸,數(shù)據(jù)長度乘以128,如果傳4字節(jié),前面準(zhǔn)確,后面也全是0


您好,該貼已回復(fù)你

http://www.findthetime.net/bbs/thread-110725-1.html

?


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

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