博客專欄

EEPW首頁 > 博客 > USB系列之第四章:端點類型

USB系列之第四章:端點類型

發(fā)布人:電子資料庫 時間:2022-09-02 來源:工程師 發(fā)布文章
終結(jié)點類型

通用串行總線規(guī)范定義了四種傳輸/端點類型,

    • 控制權(quán)轉(zhuǎn)讓

    • 中斷傳輸

    • 同步傳輸

    • 批量傳輸



控制權(quán)轉(zhuǎn)讓
  • 控制傳輸通常用于命令和狀態(tài)操作。它們對于設(shè)置一個使用控制傳輸執(zhí)行所有枚舉功能的USB設(shè)備來說是必不可少的。它們通常是突發(fā)性的隨機數(shù)據(jù)包,由主機發(fā)起并盡最大努力傳遞。低速設(shè)備中控制傳輸?shù)臄?shù)據(jù)包長度必須為8字節(jié),高速設(shè)備允許的數(shù)據(jù)包大小為8、16、32或64字節(jié),全速設(shè)備的數(shù)據(jù)包大小必須為64字節(jié)。一個控制傳輸可以有三個階段。

    • 這個設(shè)置階段是發(fā)送請求的位置。這包括三個包。首先發(fā)送包含地址和終結(jié)點編號的設(shè)置令牌。接下來發(fā)送數(shù)據(jù)包,并且始終具有data0的PID類型,并包含安裝程序包詳細說明了請求的類型。稍后我們將詳細介紹設(shè)置包。最后一個數(shù)據(jù)包是用于確認成功接收或指示錯誤的握手。如果函數(shù)成功地接收到設(shè)置數(shù)據(jù)(CRC和PID等OK),它將以ACK響應(yīng),否則它將忽略數(shù)據(jù)并不發(fā)送握手數(shù)據(jù)包。函數(shù)不能發(fā)出暫?;騈AK數(shù)據(jù)包以響應(yīng)設(shè)置數(shù)據(jù)包。

    • 可選的數(shù)據(jù)階段由一個或多個輸入或輸出傳輸組成。設(shè)置請求指示此階段要傳輸?shù)臄?shù)據(jù)量。如果超過最大數(shù)據(jù)包大小,數(shù)據(jù)將以多個傳輸方式發(fā)送,每個傳輸都是除最后一個數(shù)據(jù)包之外的最大數(shù)據(jù)包長度。根據(jù)數(shù)據(jù)傳輸?shù)姆较颍瑪?shù)據(jù)階段有兩種不同的場景。在:當主機準備好接收控制數(shù)據(jù)時,它會發(fā)出一個IN令牌。如果函數(shù)接收到帶錯誤的IN令牌,例如PID與反向的PID位不匹配,那么它將忽略數(shù)據(jù)包。如果令牌被正確地接收到,設(shè)備可以用包含要發(fā)送的控制數(shù)據(jù)的數(shù)據(jù)包、指示端點發(fā)生錯誤的暫停包或向主機指示端點正在工作但暫時沒有要發(fā)送的數(shù)據(jù)的NAK包進行應(yīng)答。輸出:當主機需要向設(shè)備發(fā)送一個控制數(shù)據(jù)包時,它發(fā)出一個OUT令牌,后跟一個包含控制數(shù)據(jù)作為有效載荷的數(shù)據(jù)包。如果OUT令牌或數(shù)據(jù)包的任何部分損壞,則函數(shù)將忽略該包。如果函數(shù)的端點緩沖區(qū)為空,并且它已將數(shù)據(jù)記錄到端點緩沖區(qū)中,它將發(fā)出一個ACK,通知主機它已成功接收到數(shù)據(jù)。如果端點緩沖區(qū)由于前一個包的處理而不是空的,那么函數(shù)將返回一個NAK。但是,如果端點出現(xiàn)錯誤,并且其停止位已設(shè)置,則返回暫停。

    • 狀態(tài)階段報告整個請求的狀態(tài),此狀態(tài)再次因傳輸方向而變化。狀態(tài)報告始終由函數(shù)執(zhí)行。


      • 在:如果主機在數(shù)據(jù)階段發(fā)送令牌以接收數(shù)據(jù),則主機必須確認成功接收此數(shù)據(jù)。這是通過主機發(fā)送一個輸出令牌和一個零長度的數(shù)據(jù)包來完成的。該函數(shù)現(xiàn)在可以在握手階段報告其狀態(tài)。ACK表示函數(shù)已完成命令現(xiàn)在可以接受另一個命令。如果在處理此命令期間發(fā)生錯誤,則函數(shù)將發(fā)出暫停。但是,如果函數(shù)仍在處理中,它將返回NAK,指示主機稍后重復(fù)狀態(tài)階段。

      • 輸出:如果主機在數(shù)據(jù)階段發(fā)送令牌來傳輸數(shù)據(jù),則該函數(shù)將響應(yīng)于in令牌發(fā)送一個零長度包來確認數(shù)據(jù)的成功接收。但是,如果發(fā)生錯誤,它應(yīng)該發(fā)出暫停,或者如果它仍然忙于處理數(shù)據(jù),它應(yīng)該發(fā)出NAK,要求主機稍后重試狀態(tài)階段。


控制權(quán)轉(zhuǎn)移:全局
  • 現(xiàn)在這些是怎么組合起來的呢?例如,主機希望在枚舉期間請求設(shè)備描述符。發(fā)送的數(shù)據(jù)包如下所示。主機將發(fā)送設(shè)置令牌,告訴函數(shù)以下數(shù)據(jù)包是設(shè)置數(shù)據(jù)包。地址字段將保存主機請求描述符的設(shè)備的地址。端點編號應(yīng)為零,指定默認管道。然后主機將發(fā)送一個DATA0包。這將有一個8字節(jié)的有效負載設(shè)備描述符請求如USB規(guī)范第9章所述。USB功能然后確認安裝包已正確讀取,沒有錯誤。如果收到的數(shù)據(jù)包已損壞,設(shè)備將忽略此數(shù)據(jù)包。主機將在短時間延遲后重新發(fā)送數(shù)據(jù)包。1安裝令牌同步PID地址終點CRC5EOP公司地址和終結(jié)點編號2數(shù)據(jù)0包同步PID數(shù)據(jù)0CRC16型EOP公司設(shè)備描述符請求三。 Ack握手同步PIDEOP公司設(shè)備確認。安裝程序包以上三個數(shù)據(jù)包代表第一個USB事務(wù)。USB設(shè)備現(xiàn)在將解碼接收到的8個字節(jié),并確定它是否是設(shè)備描述符請求。然后,設(shè)備將嘗試發(fā)送裝置描述元,這將是下一個USB事務(wù)。1象征性地同步PID地址終點CRC5EOP公司地址和終結(jié)點編號2數(shù)據(jù)1包同步PID數(shù)據(jù)1CRC16型EOP公司設(shè)備描述符的前8個字節(jié)三。 Ack握手同步PIDEOP公司主機確認數(shù)據(jù)包1象征性地同步PID地址終點CRC5EOP公司地址和終結(jié)點編號2數(shù)據(jù)0包同步PID數(shù)據(jù)0CRC16型EOP公司最后4個字節(jié)填充三。 Ack握手同步PIDEOP公司主機確認數(shù)據(jù)包在本例中,我們假設(shè)最大有效負載大小為8字節(jié)。主機現(xiàn)在可以向主機發(fā)送此令牌的數(shù)據(jù)。由于最大數(shù)據(jù)包大小為8字節(jié),因此必須將12字節(jié)的設(shè)備描述符拆分成塊來發(fā)送。除最后一個事務(wù)外,每個塊必須是8字節(jié)。主機確認我們發(fā)送的每個數(shù)據(jù)包。一旦發(fā)送了設(shè)備描述符,狀態(tài)事務(wù)就會隨之發(fā)生。如果事務(wù)成功,主機將發(fā)送一個零長度的數(shù)據(jù)包,指示整個事務(wù)成功。然后,函數(shù)對這個零長度數(shù)據(jù)包進行響應(yīng),指示其狀態(tài)。1輸出令牌同步PID地址終點CRC5EOP公司地址和終結(jié)點編號2數(shù)據(jù)1包同步PID數(shù)據(jù)1CRC16型EOP公司零長度數(shù)據(jù)包三。 Ack握手同步PIDEOP公司設(shè)備確認。整個交易

中斷傳輸
  • 任何有過微控制器中斷請求經(jīng)驗的人都知道中斷是設(shè)備產(chǎn)生的。但是在USB下,如果一個設(shè)備需要主機的注意,它必須等到主機輪詢它之后才能報告它需要緊急關(guān)注!

    • 中斷傳輸

      • 保證延遲

      • 流管-單向

      • 錯誤檢測和下一周期重試。

  • 中斷傳輸通常是非周期性的、小設(shè)備“啟動”的通信,需要有限的延遲。中斷請求由設(shè)備排隊,直到主機輪詢USB設(shè)備請求數(shù)據(jù)。

    • 低速設(shè)備的最大數(shù)據(jù)負載大小為8字節(jié)。

    • 全速設(shè)備的最大數(shù)據(jù)負載大小為64字節(jié)。

    • 高速設(shè)備的最大數(shù)據(jù)負載大小為1024字節(jié)。

  • 上圖顯示了中斷輸入和中斷輸出事務(wù)的格式。

    • 在:主機將定期輪詢中斷端點。此輪詢速率在中指定端點描述符稍后會介紹。每次投****都需要主機發(fā)送一個IN令牌。如果IN令牌已損壞,則函數(shù)將忽略數(shù)據(jù)包并繼續(xù)監(jiān)視總線以查找新令牌。如果某個中斷已被設(shè)備排隊,則函數(shù)將在接收到IN令牌時發(fā)送一個包含與中斷相關(guān)的數(shù)據(jù)的數(shù)據(jù)包。在主機上成功接收后,主機將返回ACK。但是,如果數(shù)據(jù)損壞,主機將不返回任何狀態(tài)。另一方面,如果主機用IN令牌輪詢中斷端點時不存在中斷條件,則函數(shù)通過發(fā)送NAK來通知此狀態(tài)。如果此終結(jié)點上發(fā)生錯誤,則將發(fā)送一個暫停以答復(fù)in令牌。

    • 輸出:當主機想要發(fā)送設(shè)備中斷數(shù)據(jù)時,它發(fā)出一個OUT令牌,后跟一個包含中斷數(shù)據(jù)的數(shù)據(jù)包。如果OUT令牌或數(shù)據(jù)包的任何部分損壞,則函數(shù)將忽略該包。如果函數(shù)的端點緩沖區(qū)為空,并且它已將數(shù)據(jù)記錄到端點緩沖區(qū)中,它將發(fā)出一個ACK,通知主機它已成功接收到數(shù)據(jù)。如果端點緩沖區(qū)由于前一個包的處理而不是空的,那么函數(shù)將返回一個NAK。但是,如果端點因此發(fā)生錯誤,并且其停止位已設(shè)置,則返回暫停。


同步傳輸
  • 等時轉(zhuǎn)移是連續(xù)和周期性的。它們通常包含對時間敏感的信息,例如音頻或視頻流。如果音頻流中的數(shù)據(jù)存在延遲或重試,則可能會出現(xiàn)一些包含故障的不穩(wěn)定音頻。節(jié)拍可能不再同步。然而,如果一個包或幀時不時地被丟棄,它就不太可能被偵聽器注意到。

    • 同步傳輸提供

      • 保證訪問USB帶寬

      • 有限延遲

      • 流管-單向

      • 通過CRC進行錯誤檢測,但不進行重試或保證傳輸。

      • 僅限全速和高速模式

      • 沒有數(shù)據(jù)切換

  • 中指定了最大大小的數(shù)據(jù)負載端點描述符等時端點。對于全速設(shè)備,最大可達1023字節(jié),對于高速設(shè)備,最大可達1024字節(jié)。由于最大數(shù)據(jù)有效負載大小將影響總線的帶寬要求,因此最好指定一個保守的有效負載大小。如果您使用的是大型有效負載,那么指定一系列 替代接口具有不同的等時有效載荷大小。如果在枚舉過程中,由于帶寬限制,主機無法啟用首選的同步終結(jié)點,則它需要依靠某些東西,而不僅僅是完全失敗。在等時端點上發(fā)送的數(shù)據(jù)可能小于預(yù)先協(xié)商的大小,并且可能在每個事務(wù)的長度上有所不同。上圖顯示了一個同步進出事務(wù)的格式。等時事務(wù)沒有握手階段,無法報告錯誤或暫停/暫停條件。

批量傳輸
  • 批量傳輸可用于大批量突發(fā)數(shù)據(jù)。此類示例可以包括發(fā)送到打印機的打印作業(yè)或從掃描儀生成的圖像。批量傳輸在數(shù)據(jù)有效載荷上以CRC16字段的形式提供糾錯功能,并提供錯誤檢測/重新傳輸機制,以確保無誤地傳輸和接收數(shù)據(jù)。批量傳輸將在所有其他事務(wù)被分配后使用總線上未分配的空閑帶寬。如果總線忙著同步和/或中斷,那么大量數(shù)據(jù)可能會慢慢地通過總線。因此,批量傳輸只能用于不受時間影響的通信,因為不能保證延遲。

    • 批量傳輸

      • 用于傳輸大量突發(fā)數(shù)據(jù)。

      • 通過CRC進行錯誤檢測,保證交貨。

      • 不能保證帶寬或最小延遲。

      • 流管-單向

      • 僅限全速和高速模式

  • 批量傳輸僅由全速和高速設(shè)備支持。對于全速端點,最大批量數(shù)據(jù)包大小為8、16、32或64字節(jié)長。對于高速端點,最大數(shù)據(jù)包大小可以達到512字節(jié)長。如果數(shù)據(jù)負載低于最大數(shù)據(jù)包大小,則不需要用零填充。當批量傳輸傳輸了所請求的確切數(shù)據(jù)量、傳輸了小于最大端點大小的數(shù)據(jù)包或傳輸了零長度的數(shù)據(jù)包時,就認為完成了批量傳輸。上圖顯示了批量輸入和輸出事務(wù)的格式。

    • 在:當主機準備好接收大容量數(shù)據(jù)時,它會發(fā)出一個IN令牌。如果函數(shù)接收到帶錯誤的IN令牌,則忽略該包。如果令牌被正確地接收到,函數(shù)可以用包含要發(fā)送的大容量數(shù)據(jù)的數(shù)據(jù)包進行應(yīng)答,或者用一個指示端點發(fā)生錯誤的暫停包或一個NAK包來向主機指示該端點正在工作,但臨時沒有要發(fā)送的數(shù)據(jù)。

    • 輸出:當主機想向函數(shù)發(fā)送一個大容量數(shù)據(jù)包時,它會發(fā)出一個OUT令牌,后跟一個包含該大容量數(shù)據(jù)的數(shù)據(jù)包。如果OUT令牌或數(shù)據(jù)包的任何部分損壞,則函數(shù)將忽略該包。如果函數(shù)的端點緩沖區(qū)為空,并且它已將數(shù)據(jù)記錄到端點緩沖區(qū)中,它將發(fā)出一個ACK,通知主機它已成功接收到數(shù)據(jù)。如果端點緩沖區(qū)由于處理前一個數(shù)據(jù)包而不是空的,那么函數(shù)將返回一個NAK。但是,如果它的端點設(shè)置為暫停,則返回一個位。

帶寬管理
  • 主機負責管理總線的帶寬。在配置同步和中斷端點時以及在總線的整個運行過程中,這是在枚舉時完成的。規(guī)范對總線進行了限制,允許在全速總線上為周期性傳輸(中斷和等時)分配不超過90%的任何幀。在高速總線上,這一限制被降低到不超過80%的微幀可用于周期性傳輸。因此,您可以很快看到,如果您有一個高度飽和的總線周期性傳輸,剩下的10%用于控制傳輸,一旦這些被分配,批量傳輸將獲得剩余的部分。


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: USB 端點

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉