如何減少無線 USB 網(wǎng)絡(luò)應(yīng)用中的數(shù)據(jù)包丟失
出處:維庫(kù)電子市場(chǎng)網(wǎng) 發(fā)布于:2023-09-04 10:55:56
然而,對(duì)于新興的無線 USB 連接來說,情況有所不同。由于無線介質(zhì)中可能發(fā)生沖突,因此將應(yīng)用程序從有線 USB 遷移到無線 USB 時(shí)必須小心。
本文解決了有線和無線 USB 中都可能出現(xiàn)的問題。但由于無線介質(zhì)中丟失數(shù)據(jù)包的可能性要大得多,因此該問題在無線 USB中比在有線 USB中更容易發(fā)生。問題是“丟失一個(gè)數(shù)據(jù)包的危險(xiǎn)”。
當(dāng)開發(fā)人員忽視這一問題時(shí),即使丟失一個(gè)數(shù)據(jù)包也可能會(huì)導(dǎo)致嚴(yán)重問題。本文旨在幫助無線 USB 開發(fā)人員了解該問題并為實(shí)施解決方案提供一些線索。
首先詳細(xì)描述問題,然后分析為什么它在無線 USB 中成為問題,而在有線 USB 中不是問題。在文章的,將為解決這個(gè)問題提供一些線索。
當(dāng)發(fā)生
這種情況時(shí),當(dāng)設(shè)備需要向主機(jī)發(fā)送完整的數(shù)據(jù)緩沖區(qū),并且主機(jī)為傳輸中的一個(gè)數(shù)據(jù)包(或突發(fā)中的幾個(gè)數(shù)據(jù)包)發(fā)送的握手在空中被破壞或丟失時(shí),就會(huì)出現(xiàn)此特殊問題。
由于主機(jī)必須發(fā)送少次數(shù)的握手,因此設(shè)備端可能看不到那些包括一批數(shù)據(jù)包(或突發(fā)中的幾個(gè)數(shù)據(jù)包)的握手的微調(diào)度管理命令(MMC)。
在這種情況下,設(shè)備必須將這部分?jǐn)?shù)據(jù)保留在緩沖區(qū)中,直到它看到握手(如果有)以保持?jǐn)?shù)據(jù)完整性。這種情況會(huì)導(dǎo)致實(shí)現(xiàn)中出現(xiàn)問題,如上圖 1 所示。
在這種情況下,設(shè)備不會(huì)引發(fā)任何中斷或任何事件來向高層軟件指示主機(jī)已正確接收數(shù)據(jù)。事實(shí)上,不應(yīng)該,因?yàn)樵O(shè)備認(rèn)為本次傳輸中的一部分?jǐn)?shù)據(jù)尚未成功傳輸?shù)街鳈C(jī)端,主機(jī)可能會(huì)再次輪詢數(shù)據(jù)。
如果高層協(xié)議的狀態(tài)機(jī)(例如類驅(qū)動(dòng)程序)需要這種顯式的握手/中斷才能進(jìn)入下一個(gè)階段,那么整個(gè)狀態(tài)機(jī)將被卡住。這將導(dǎo)致死鎖情況,并且整個(gè)設(shè)備實(shí)現(xiàn)將無法處理這種情況。
請(qǐng)記住,丟失一個(gè)數(shù)據(jù)包的問題在無線 USB 中并不常見,在有線 USB 中也可能發(fā)生。設(shè)計(jì)人員在設(shè)計(jì)有線 USB 設(shè)備時(shí)也必須注意這一點(diǎn)。不同之處在于,無線介質(zhì)的可靠性遠(yuǎn)低于有線介質(zhì)。
與有線 USB 相比,數(shù)據(jù)包經(jīng)常丟失,而有線 USB 幾乎不會(huì)丟失數(shù)據(jù)包。如果設(shè)計(jì)者忽略了這個(gè)問題,在有線系統(tǒng)中發(fā)現(xiàn)這個(gè)問題的機(jī)會(huì)非常低,但在無線 USB 中發(fā)現(xiàn)這個(gè)問題的機(jī)會(huì)相當(dāng)高。讓我們舉一個(gè)實(shí)際的例子。在大容量存儲(chǔ)設(shè)備實(shí)現(xiàn)的情況下,以下序列總是發(fā)生多次:
CBW—BULKOUT—31 字節(jié)
數(shù)據(jù)級(jí)—BULK IN
或 BULK OUT—
數(shù)據(jù)包大小的多個(gè)事務(wù)
CSW – IN—13 字節(jié)
特別是,對(duì)于大容量存儲(chǔ),當(dāng)設(shè)備未檢測(cè)到 IN – 13 字節(jié)的握手時(shí),可能會(huì)出現(xiàn)此問題。上面的圖 2中顯示了一些痕跡 來說明這個(gè)問題。
在下面的圖3中,無線USB數(shù)據(jù)包291是來自主機(jī)的MMC,其中包括WdtCTA,用作對(duì)先前的In數(shù)據(jù)包(無線USB數(shù)據(jù)包288)的確認(rèn)。只有當(dāng)設(shè)備接收到該MMC時(shí),它才能聲明特定的數(shù)據(jù)包。
主機(jī)已收到數(shù)據(jù)包。在這種特殊情況下,設(shè)備無法聲明 CSW 數(shù)據(jù)包已成功傳送到主機(jī),直到收到數(shù)據(jù)包 291 中嵌入的確認(rèn)。但是,如果該數(shù)據(jù)包在空中丟失怎么辦?從這個(gè)特定的主機(jī)實(shí)現(xiàn)中,我們可以看到它只會(huì)發(fā)送帶有確認(rèn)的 MMC 。在無線世界中,丟失該數(shù)據(jù)包的可能性不可忽視。
在一些為大容量存儲(chǔ)編寫的傳統(tǒng) USB 類驅(qū)動(dòng)程序中,類驅(qū)動(dòng)程序內(nèi)部的狀態(tài)機(jī)僅在收到狀態(tài)完成事件時(shí)才會(huì)被觸發(fā)(在大多數(shù)情況下,它是來自設(shè)備控制器的中斷或來自較低級(jí)別堆棧的事件)。
更具體地說,在大容量存儲(chǔ)狀態(tài)機(jī)中,類驅(qū)動(dòng)程序總是期望 IN 管道完成接收 13 字節(jié)的 CSW,然后再進(jìn)行進(jìn)一步的操作,例如,將狀態(tài)機(jī)移至 CBW 階段并對(duì)設(shè)備控制器進(jìn)行編程以在輸出管。
如果 CSW 的 ACK 被破壞,盡管它實(shí)際上是由無線 USB 主機(jī)接收的,但主機(jī)端和設(shè)備端的類驅(qū)動(dòng)程序狀態(tài)機(jī)之間將會(huì)出現(xiàn)不匹配。主機(jī)會(huì)將類狀態(tài)機(jī)移至 CBW 階段,并且如果發(fā)現(xiàn)特定的 OUT 管道處于活動(dòng)狀態(tài),則隨時(shí)準(zhǔn)備發(fā)送 CBW。
但不幸的是,OUT管道使能操作通常是由設(shè)備類狀態(tài)機(jī)的CBW階段中的某些軟件操作觸發(fā)的。這意味著總線上不會(huì)發(fā)送任何用于 EPxOUT 的 DN_EPRdy 來指示管道處于活動(dòng)狀態(tài)。同時(shí),設(shè)備類狀態(tài)機(jī)將保持在 CSW 階段,等待 CSW 完成(設(shè)備無法知道主機(jī)已接收到 CSW 數(shù)據(jù)包,除非已從設(shè)備安排了進(jìn)一步的傳輸)。由于這種不匹配,產(chǎn)生了死鎖。
上一篇:USB 調(diào)試技巧
下一篇:JTAG連接器
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 簡(jiǎn)述計(jì)算機(jī)總線的分類2025/9/4 17:12:23
- 深度剖析三進(jìn)線兩母聯(lián)供電系統(tǒng)設(shè)計(jì)方案2025/9/3 10:37:39
- 匯流排是什么匯流排好還是線接好2025/8/28 17:13:00
- 安森美 USB - C 電池充電器解決方案2025/8/28 15:45:10
- I2C 總線加上拉電阻的必要性2025/8/25 16:42:09