GD32F4 USB HOST 與 CH340通信,主機(jī)端多次接收時(shí)接收數(shù)據(jù)不全。

目前在做GD32F4主機(jī)端與CH340通信的項(xiàng)目,實(shí)現(xiàn)數(shù)據(jù)的穩(wěn)定收發(fā)就行。目前枚舉成功,USB通信一發(fā)一收沒啥問題,但涉及到多收的時(shí)候出現(xiàn)問題。包長為32字節(jié)

主機(jī)端現(xiàn)象為:接收到前兩次數(shù)據(jù)(前兩次傳輸?shù)淖止?jié)數(shù)均小于32字節(jié)),但再接收第三次傳輸時(shí)(第三傳輸約為170字節(jié)),基本只接收到第三次傳輸?shù)牡谝话鼣?shù)據(jù),后續(xù)一直沒收到。(接收數(shù)據(jù)圖如下:其中167表示后面有167個(gè)字節(jié))。

想了解:啥原因造成了主機(jī)接收數(shù)據(jù)不全,有無可能是CH340那端數(shù)據(jù)丟失了導(dǎo)致主機(jī)端數(shù)據(jù)沒收全,或者是其它原因等

郵箱:個(gè)人信息保護(hù),已隱藏? ? ? ? 謝謝

QQ圖片20230418143157.jpg

您好,如上現(xiàn)象大概率是因?yàn)閁SB從批量端點(diǎn)讀取串口數(shù)據(jù)的時(shí)候,DATA0和DATA1沒有翻轉(zhuǎn)導(dǎo)致。您可以先檢查下此部分代碼。


你好,昨天你所說的可能為DATA0和DATA1翻轉(zhuǎn),我檢查了這部分代碼,猜測應(yīng)該不是這原因。

理由1:數(shù)據(jù)PID的翻轉(zhuǎn),我把翻轉(zhuǎn)代碼寫在了ACK中斷里面,當(dāng)觸發(fā)ACK中斷時(shí),數(shù)據(jù)PID翻轉(zhuǎn)。

理由2:在只進(jìn)行一對一收發(fā)調(diào)試的時(shí)候,數(shù)據(jù)接收和發(fā)送是沒出錯(cuò)的。


我對第一條消息我再補(bǔ)充一些現(xiàn)象(最近測的)

  1. 在傳輸完成中斷(TF)處打斷點(diǎn),在接收第三次傳輸時(shí),只能接收傳輸?shù)牡谝话?2字節(jié)數(shù)據(jù)

  2. 在傳輸完成中斷(TF)不處打斷點(diǎn),可以接收完整的第三次傳輸數(shù)據(jù)(182字節(jié)),但主機(jī)不會觸發(fā)接收完成中斷

  3. 如果我把接收的前兩次傳輸?shù)臄?shù)據(jù)從buff中清除(即收到就清除),再接收第三次傳輸?shù)臄?shù)據(jù),完整接收且可以觸發(fā)接收完成中斷。


望再看看,期待回復(fù),感謝


你好,給你的郵箱發(fā)送了一個(gè)我們CH32F103操作CH340的例程,我實(shí)測了一下多包接收沒有問題,你這邊可以對比看一下。


好的,感謝,已收到


你好,想問下當(dāng)CH340有數(shù)據(jù)需要發(fā)送的時(shí)候,主機(jī)端是不是應(yīng)該及時(shí)的接收?

??????????想問下 CH340的USB緩存區(qū)大小和USART緩存區(qū)大???


測試過程:先把數(shù)據(jù)發(fā)給CH340,之后再調(diào)用主機(jī)端的接收函數(shù),讓主機(jī)發(fā)送IN包,從CH340接收數(shù)據(jù)。

現(xiàn)象:當(dāng)數(shù)據(jù)少于64字節(jié)時(shí),主機(jī)可以完成接收。當(dāng)數(shù)據(jù)超過64字節(jié)時(shí),主機(jī)最多接收到64字節(jié),之后CH340一直返回NAK。


猜測:CH340的USB數(shù)據(jù)緩存區(qū)大小是不是64字節(jié)且當(dāng)緩存區(qū)滿的時(shí)候會阻塞。第三次數(shù)據(jù)傳輸數(shù)據(jù)沒收全的原因可能是主機(jī)端沒能及時(shí)的接收,測得當(dāng)主機(jī)接收無干擾的時(shí)候,三次傳輸?shù)臄?shù)據(jù)都能接收完成


謝謝


您好,對于CH340的數(shù)據(jù)端點(diǎn)的讀取是需要一直循環(huán)讀取的,因?yàn)椴淮_定UART數(shù)據(jù)是什么時(shí)候會到來。最好是創(chuàng)建一個(gè)獨(dú)立的接收緩沖區(qū)用于緩存該USB數(shù)據(jù),然后業(yè)務(wù)上需要讀取時(shí),從該緩沖區(qū)去取。


您好,目前我這邊項(xiàng)目遇到一些問題,GD主機(jī)端與CH340通訊的過程中,經(jīng)常會出現(xiàn)主機(jī)端接收不到數(shù)據(jù)或者主機(jī)端數(shù)據(jù)沒發(fā)出去的現(xiàn)象,問題點(diǎn)目前還沒找到。想問一些問題,如下:

????1.想問有無F4操作CH340的例程,或者適合移植到F4的主機(jī)端操作CH340的例程,有的話能否發(fā)我,謝謝。

? ? 2.想問下USB主機(jī)端接收函數(shù)能不能不用輪詢方式接收,而使用中斷的方式去接收?


感謝。


您好,目前提供的F103操作的例程是可以參考的,邏輯上都是類似的。有條件的話可以抓取下USB通訊過程(USB或邏輯分析儀),這樣邏輯上會清楚些。


您好,F(xiàn)103例程我看了,使用的是DMA進(jìn)行數(shù)據(jù)的搬運(yùn),而在GD的例程中使用的是FIFO主機(jī)通道進(jìn)行數(shù)據(jù)的傳輸。兩種傳輸應(yīng)該是有些區(qū)別的,在GD中需要使能通道才能觸發(fā)通道中斷,而且每次傳輸完都會通道除能,下次傳輸還需再次使能通道,而在F103中我看到的是直接操作寄存器,就可以知道數(shù)據(jù)傳輸?shù)臓顩r,無GD的使能除能這些步驟。(見解有限,如不對,請見諒)。

????想問有無主機(jī)通道的例程,謝謝。


您好,F(xiàn)103例程我看了,使用的是DMA進(jìn)行數(shù)據(jù)的搬運(yùn),而在GD的例程中使用的是FIFO主機(jī)通道進(jìn)行數(shù)據(jù)的傳輸。兩種傳輸應(yīng)該是有些區(qū)別的,在GD中需要使能通道才能觸發(fā)通道中斷,而且每次傳輸完都會通道除能,下次傳輸還需再次使能通道,而在F103中我看到的是直接操作寄存器,就可以知道數(shù)據(jù)傳輸?shù)臓顩r,無GD的使能除能這些步驟。(見解有限,如不對,請見諒)。

????想問有無主機(jī)通道的例程,謝謝。


您好,F(xiàn)103例程我看了,使用的是DMA進(jìn)行數(shù)據(jù)的搬運(yùn),而在GD的例程中使用的是FIFO主機(jī)通道進(jìn)行數(shù)據(jù)的傳輸。兩種傳輸應(yīng)該是有些區(qū)別的,在GD中需要使能通道才能觸發(fā)通道中斷,而且每次傳輸完都會通道除能,下次傳輸還需再次使能通道,而在F103中我看到的是直接操作寄存器,就可以知道數(shù)據(jù)傳輸?shù)臓顩r,無GD的使能除能這些步驟。(見解有限,如不對,請見諒)。

????想問有無主機(jī)通道的例程,謝謝。


您好,F(xiàn)103例程我看了,使用的是DMA進(jìn)行數(shù)據(jù)的搬運(yùn),而在GD的例程中使用的是FIFO主機(jī)通道進(jìn)行數(shù)據(jù)的傳輸。兩種傳輸應(yīng)該是有些區(qū)別的,在GD中需要使能通道才能觸發(fā)通道中斷,而且每次傳輸完都會通道除能,下次傳輸還需再次使能通道,而在F103中我看到的是直接操作寄存器,就可以知道數(shù)據(jù)傳輸?shù)臓顩r,無GD的使能除能這些步驟。(見解有限,如不對,請見諒)。

????想問有無主機(jī)通道的例程,謝謝。


您好,F(xiàn)103例程我看了,使用的是DMA進(jìn)行數(shù)據(jù)的搬運(yùn),而在GD的例程中使用的是FIFO主機(jī)通道進(jìn)行數(shù)據(jù)的傳輸。兩種傳輸應(yīng)該是有些區(qū)別的,在GD中需要使能通道才能觸發(fā)通道中斷,而且每次傳輸完都會通道除能,下次傳輸還需再次使能通道,而在F103中我看到的是直接操作寄存器,就可以知道數(shù)據(jù)傳輸?shù)臓顩r,無GD的使能除能這些步驟。(見解有限,如不對,請見諒)。

????想問有無主機(jī)通道的例程,謝謝。


您好,F(xiàn)103例程我看了,使用的是DMA進(jìn)行數(shù)據(jù)的搬運(yùn),而在GD的例程中使用的是FIFO主機(jī)通道進(jìn)行數(shù)據(jù)的傳輸。兩種傳輸應(yīng)該是有些區(qū)別的,在GD中需要使能通道才能觸發(fā)通道中斷,而且每次傳輸完都會通道除能,下次傳輸還需再次使能通道,而在F103中我看到的是直接操作寄存器,就可以知道數(shù)據(jù)傳輸?shù)臓顩r,無GD的使能除能這些步驟。(見解有限,如不對,請見諒)。

????想問有無主機(jī)通道的例程,謝謝。


您好,F(xiàn)103例程我看了,使用的是DMA進(jìn)行數(shù)據(jù)的搬運(yùn),而在GD的例程中使用的是FIFO主機(jī)通道進(jìn)行數(shù)據(jù)的傳輸。兩種傳輸應(yīng)該是有些區(qū)別的,在GD中需要使能通道才能觸發(fā)通道中斷,而且每次傳輸完都會通道除能,下次傳輸還需再次使能通道,而在F103中我看到的是直接操作寄存器,就可以知道數(shù)據(jù)傳輸?shù)臓顩r,無GD的使能除能這些步驟。(見解有限,如不對,請見諒)。

????想問有無主機(jī)通道的例程,謝謝。


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

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