0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于DWC2的USB驅(qū)動開發(fā)-PING協(xié)議詳解

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-07-23 16:18 ? 次閱讀

本文轉(zhuǎn)自公眾號,歡迎關注
基于DWC2的USB驅(qū)動開發(fā)-PING協(xié)議詳解 (qq.com)

一. 前言

這里先介紹下PING協(xié)議的背景和原理,我們不一上來就介紹PING包格式和協(xié)議,因為只有知其然知其所以然才能加深理解,任何事務都是有其出現(xiàn)的歷史背景的,不會憑空而生,所以理解背后產(chǎn)生的背景和原理很重要。

全/低速的批量/控制傳輸OUT事務,如果設備沒有就緒,則可以NAK表示端點不接受數(shù)據(jù),主機可以稍后重發(fā)。以上過程存在一個問題,就是OUT數(shù)據(jù)之后設備NAK,OUT數(shù)據(jù)這部分時間會占用總線,如果設備一直未就緒一直NAK,主機一直重發(fā)將會大量占用總線。

高速設備旨在提高傳輸帶寬,所以對這種帶寬的浪費是不能容忍的,必須優(yōu)化。

優(yōu)化的思想其實很樸素,既然重發(fā)浪費帶寬,那么就先“問一下”,先“問一下”設備準備好了沒,只有收到設備回復準備好了再發(fā)數(shù)據(jù),這樣“問一下”這句話很短占用帶寬不多,浪費較少。這個問一下就對應的PING包。

只在高速設備才支持PING,且只有控制傳輸和批量傳輸支持,且都是針對OUT。

控制傳輸OUT(數(shù)據(jù)和狀態(tài)階段,SETUP階段不支持PING)

批量傳輸OUT的數(shù)據(jù)階段。

二.PING包格式

Ping包的ID為0100B,和令牌包格式一樣

圖片

圖片

如下是一個實例

圖片

三.PING協(xié)議過程和實例

Ping的響應是硬件做的,因為設備需要接收主機連續(xù)的PING,如果軟件處理會來不及。

那么硬件怎么知道回主機的PING包回ACK還是NAK呢,這就是看軟件有沒有配置好DMA并設置CTL寄存器的EPena置位,如果軟件已經(jīng)配置好了則硬件回ACK,并自動接收后面的OUT數(shù)據(jù),并通過DMA搬運到用戶空間,反之則NAK。

過程如下:

1.主機OUT數(shù)據(jù),設備返回了NAK

2.主機收到NAK,知道設備沒就緒,于是發(fā)PING

3.設備收到PING之后如果還未就緒則NAK,否則則ACK

4.主機按照描述符中的bInterval時間間隔重新發(fā)PING,直到設備ACK,設備ACK后發(fā)數(shù)據(jù)。

5.設備收到主機OUT的數(shù)據(jù)如果還可以繼續(xù)接收后面的數(shù)據(jù)則ACK,否則則發(fā)NYET。注意雖然前面PING設備ACK了,這里設備還是有可能NAK。

  1. 主機如果收到設備的ACK則繼續(xù)發(fā)后面的數(shù)據(jù),如果收到NYET則表示本次OUT數(shù)據(jù)成功,但是設備不能接收后續(xù)數(shù)據(jù),發(fā)后面的數(shù)據(jù)前重復上面的PING過程,如果主機收到NAK則說明本次數(shù)據(jù)設備沒有接收,需要重新PING然后重發(fā)本次數(shù)據(jù)。

總結一下就是對于OUT數(shù)據(jù)設備可能有三種響應

ACK:本次接收了,還可以繼續(xù)接收后面的。

NYET:本次接收了,不能繼續(xù)接收。

NAK:本次未接收。

上述說明的設備對PING ACK了,但是對后面的數(shù)據(jù)OUT又NAK了的情況,是不正常的現(xiàn)象,設備都告訴主機準備好了,后面又沒有接收數(shù)據(jù)。

高速的批量/控制端點在其端點描述符中需要指定其最大NAK速率。每個bInterval 時間間隔內(nèi),端點最多允許NAK一次。如果端點的描述符bInterval為0則表示端點從不會NAK。

如果在數(shù)據(jù)階段之后發(fā)生超時,主機必須返回到PING階段。轉(zhuǎn)回PING狀態(tài)不會影響事務數(shù)據(jù)階段的data toggle 狀態(tài)。

以下是一個實例過程

圖片

(1)主機OUT數(shù)據(jù),設備NAK了,表示設備不能接收

(2)主機看到設備NAK,不能接收,于是進入PING狀態(tài)。注意上面主機不會一上來就PING,因為這個時候還不知道設備能不能接收,所以先不管三七二十一發(fā)一把再說,萬一設備能接受呢。只有主機確認設備不能接收,即設備NAK之后才會進入PING狀態(tài)。

圖片

(3)設備一直NAK則主機一直PING

(4)設備終于ACK了主機的PING,表示可以接收數(shù)據(jù)了。

這里的ACK是設備的硬件做的,所以在此之前設備的軟件配置好了DMA并置位了DOEP的CTL寄存器的EPena位。

(5)主機OUT數(shù)據(jù),設備也接受了,回了ACK,至此數(shù)據(jù)的OUT階段總算成功了。

第(5)步設備實際還有可能回NAK,表示未接收,回NYET表示本包接收但是不能接收下一包。

四. 總結

以上介紹了高速數(shù)據(jù)階段的PING協(xié)議,了解了過程和背景,對于驅(qū)動開發(fā)人員尤其要了解哪些是硬件做的,哪些是軟件做的,分別在什么階段什么時機做。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    7846

    瀏覽量

    263288
  • 編程
    +關注

    關注

    88

    文章

    3543

    瀏覽量

    93464
  • Ping
    +關注

    關注

    0

    文章

    68

    瀏覽量

    15911
  • 開發(fā)板
    +關注

    關注

    25

    文章

    4834

    瀏覽量

    96821
  • 代碼
    +關注

    關注

    30

    文章

    4694

    瀏覽量

    68075
  • 單板計算機
    +關注

    關注

    0

    文章

    74

    瀏覽量

    15599
  • 編譯
    +關注

    關注

    0

    文章

    646

    瀏覽量

    32737
  • 驅(qū)動開發(fā)

    關注

    0

    文章

    130

    瀏覽量

    12054
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    116
收藏 人收藏

    評論

    相關推薦

    基于DWC2USB驅(qū)動開發(fā)-0x01開篇介紹與新思DWC2 USB2.0控制器簡介

    本文轉(zhuǎn)自公眾號,歡迎關注 基于DWC2USB驅(qū)動開發(fā)-0x01開篇介紹與新思DWC2 USB2
    的頭像 發(fā)表于 05-08 18:10 ?4370次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-0x01開篇介紹與新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0控制器簡介

    基于DWC2USB驅(qū)動開發(fā)-0x02 DWC2 USB2.0 IP功能特征介紹

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。從linux的內(nèi)核源碼驅(qū)動中就帶
    的頭像 發(fā)表于 05-09 10:09 ?8728次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-0x02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP功能特征介紹

    基于DWC2USB驅(qū)動開發(fā)-0x07 DWC2 USB2.0 IP 配置參數(shù)

    混淆,IP的配置參數(shù)固定之后就不能改了,就決定了IP所具有的能力。對于軟件開發(fā)者來說也要了解其具體的配置,因為只有知道當前IP的配置,知道支持哪些功能,哪些是軟件可以配置的哪些是硬件固定了無法配置的,等等這些,后面寫驅(qū)動才心中有數(shù)。 配置相關
    的頭像 發(fā)表于 05-17 09:49 ?2031次閱讀

    基于DWC2USB驅(qū)動開發(fā)-IAD描述符詳解

    本文轉(zhuǎn)自公眾號,歡迎關注 基于DWC2USB驅(qū)動開發(fā)-IAD描述符詳解 (qq.com) 一.? 前言 IAD描述符用于一個設備功能關聯(lián)多
    的頭像 發(fā)表于 06-27 08:45 ?5w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-IAD描述符<b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-USB復位詳解

    本文轉(zhuǎn)自公眾號歡迎關注 基于DWC2USB驅(qū)動開發(fā)-USB復位詳解 (qq.com) 一.前言
    的頭像 發(fā)表于 07-07 11:18 ?4.9w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>復位<b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-USB連接詳解

    本文轉(zhuǎn)自公眾號,歡迎關注 基于DWC2USB驅(qū)動開發(fā)-USB連接詳解 (qq.com) 一.前
    的頭像 發(fā)表于 07-07 08:46 ?3404次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>連接<b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-高速設備枚舉為全速設備問題案例分析

    本文轉(zhuǎn)自公眾號,歡迎關注 基于DWC2USB驅(qū)動開發(fā)-高速設備枚舉為全速設備問題案例分析 (qq.com) 一.前言 ? 本文分享一個高速設備被枚舉為全速的問題。 ? ? 高速設備速
    的頭像 發(fā)表于 07-10 17:12 ?1220次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-高速設備枚舉為全速設備問題案例分析

    基于DWC2USB驅(qū)動開發(fā)-UVC的處理單元詳解

    本篇來詳細分析下UVC的處理單元相關的內(nèi)容,同樣的我們理論結合實踐來進行。
    的頭像 發(fā)表于 07-13 09:42 ?1936次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-UVC的處理單元<b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-設備類驅(qū)動框架

    本文轉(zhuǎn)自公眾號,歡迎關注 基于DWC2USB驅(qū)動開發(fā)-設備類驅(qū)動框架 (qq.com) 一.前言 從軟件頂層,從數(shù)據(jù)流的角度來看
    的頭像 發(fā)表于 07-16 15:56 ?1209次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-設備類<b class='flag-5'>驅(qū)動</b>框架

    基于DWC2USB驅(qū)動開發(fā)-發(fā)送相關的寄存器DMA寄存器詳解

    本文轉(zhuǎn)自公眾號,歡迎關注 基于DWC2USB驅(qū)動開發(fā)-發(fā)送相關的寄存器DMA寄存器詳解 (qq.com) 前言 如下寄存器DIEPxxx,
    的頭像 發(fā)表于 07-16 16:42 ?1506次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-發(fā)送相關的寄存器DMA寄存器<b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-USB詳解

    不管什么通訊協(xié)議,比如UART,SPI,USB等等,不管是并口還是串口,不管是同步還是異步,我們從抽象的角度去看,其本質(zhì)都是一樣的。都是先定義物理信號,物理信號可能是差分,單端,電流驅(qū)動電壓驅(qū)
    的頭像 發(fā)表于 07-23 17:11 ?2317次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>包<b class='flag-5'>詳解</b>

    基于DWC2USB驅(qū)動開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例

    本文轉(zhuǎn)自公眾號歡迎關注 基于DWC2USB驅(qū)動開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于驅(qū)動
    的頭像 發(fā)表于 08-08 09:43 ?1973次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-數(shù)據(jù)不能發(fā)送問題分析案例

    RK3399平臺上USB控制器和PHY的連接方式和配置說明

    。USB2.0 OTG對應的控制器是DWC2。USB2.0 OTG使用的是Synopsys 方案,即使用DWC2控制器同時實現(xiàn)Host和Device功能,
    發(fā)表于 05-12 17:46

    如何對基于hal庫的DWC2 USB IP進行調(diào)試呢

    背景之前適配 DWC2 USB IP 的時候,主要是基于 st 的 hal 庫來走的,當時我就對他們的 hal 庫代碼不滿,只是無奈,迫于時間就沒重構,果不其然,usb bug 一堆,隨意舉例,這還
    發(fā)表于 06-14 15:23

    基于DWC2USB驅(qū)動開發(fā)-抽絲剝繭再論切換到狀態(tài)階段標志DOEPINTn.StsPhseRcvd

    本文轉(zhuǎn)自公眾號系列文章,歡迎關注 基于DWC2USB驅(qū)動開發(fā)-USB詳解 (qq.com)
    的頭像 發(fā)表于 07-24 18:04 ?1348次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-抽絲剝繭再論切換到狀態(tài)階段標志DOEPINTn.StsPhseRcvd