<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > USB系列之第四章:端點(diǎn)類(lèi)型

USB系列之第四章:端點(diǎn)類(lèi)型

發(fā)布人:電子資料庫 時(shí)間:2022-09-02 來(lái)源:工程師 發(fā)布文章
終結點(diǎn)類(lèi)型

通用串行總線(xiàn)規范定義了四種傳輸/端點(diǎn)類(lèi)型,

    • 控制權轉讓

    • 中斷傳輸

    • 同步傳輸

    • 批量傳輸



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

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

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

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


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

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


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

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

    • 中斷傳輸

      • 保證延遲

      • 流管-單向

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

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

    • 低速設備的最大數據負載大小為8字節。

    • 全速設備的最大數據負載大小為64字節。

    • 高速設備的最大數據負載大小為1024字節。

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

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

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


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

    • 同步傳輸提供

      • 保證訪(fǎng)問(wèn)USB帶寬

      • 有限延遲

      • 流管-單向

      • 通過(guò)CRC進(jìn)行錯誤檢測,但不進(jìn)行重試或保證傳輸。

      • 僅限全速和高速模式

      • 沒(méi)有數據切換

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

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

    • 批量傳輸

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

      • 通過(guò)CRC進(jìn)行錯誤檢測,保證交貨。

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

      • 流管-單向

      • 僅限全速和高速模式

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

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

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

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


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



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

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>