RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

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

一. 前言

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

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

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

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

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

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

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

二.PING包格式

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

圖片

圖片

如下是一個實例

圖片

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

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

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

過程如下:

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

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

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

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

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

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

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

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

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

NAK:本次未接收。

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

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

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

以下是一個實例過程

圖片

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

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

圖片

(3)設(shè)備一直NAK則主機(jī)一直PING

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

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

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

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

四. 總結(jié)

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

審核編輯:湯梓紅

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

    關(guān)注

    60

    文章

    7936

    瀏覽量

    264454
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3614

    瀏覽量

    93685
  • Ping
    +關(guān)注

    關(guān)注

    0

    文章

    69

    瀏覽量

    15974
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5032

    瀏覽量

    97371
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68519
  • 單板計算機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    15627
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32851
  • 驅(qū)動開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    130

    瀏覽量

    12072
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    125
收藏 人收藏

    評論

    相關(guān)推薦

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

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-0x01開篇介紹與新思DWC2 USB2
    的頭像 發(fā)表于 05-08 18:10 ?4582次閱讀
    基于<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 ?9356次閱讀
    基于<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ā)者來說也要了解其具體的配置,因為只有知道當(dāng)前IP的配置,知道支持哪些功能,哪些是軟件可以配置的哪些是硬件固定了無法配置的,等等這些,后面寫驅(qū)動才心中有數(shù)。 配置相關(guān)
    的頭像 發(fā)表于 05-17 09:49 ?2285次閱讀

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

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-IAD描述符詳解 (qq.com) 一.? 前言 IAD描述符用于一個設(shè)備功能關(guān)聯(lián)多
    的頭像 發(fā)表于 06-27 08:45 ?12.3w次閱讀
    基于<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復(fù)位詳解

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

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

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-USB連接詳解 (qq.com) 一.前
    的頭像 發(fā)表于 07-07 08:46 ?3689次閱讀
    基于<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è)備枚舉為全速設(shè)備問題案例分析

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-高速設(shè)備枚舉為全速設(shè)備問題案例分析 (qq.com) 一.前言 ? 本文分享一個高速設(shè)備被枚舉為全速的問題。 ? ? 高速設(shè)備速
    的頭像 發(fā)表于 07-10 17:12 ?1396次閱讀
    基于<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è)備枚舉為全速設(shè)備問題案例分析

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

    本篇來詳細(xì)分析下UVC的處理單元相關(guān)的內(nèi)容,同樣的我們理論結(jié)合實踐來進(jìn)行。
    的頭像 發(fā)表于 07-13 09:42 ?2157次閱讀
    基于<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ā)-設(shè)備類驅(qū)動框架

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

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

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

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

    不管什么通訊協(xié)議,比如UART,SPI,USB等等,不管是并口還是串口,不管是同步還是異步,我們從抽象的角度去看,其本質(zhì)都是一樣的。都是先定義物理信號,物理信號可能是差分,單端,電流驅(qū)動電壓驅(qū)
    的頭像 發(fā)表于 07-23 17:11 ?2574次閱讀
    基于<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)自公眾號歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于驅(qū)動
    的頭像 發(fā)表于 08-08 09:43 ?2268次閱讀
    基于<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對應(yīng)的控制器是DWC2USB2.0 OTG使用的是Synopsys 方案,即使用DWC2控制器同時實現(xiàn)Host和Device功能,
    發(fā)表于 05-12 17:46

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

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

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

    本文轉(zhuǎn)自公眾號系列文章,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-USB詳解 (qq.com)
    的頭像 發(fā)表于 07-24 18:04 ?1568次閱讀
    基于<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)階段標(biāo)志DOEPINTn.StsPhseRcvd
    RM新时代网站-首页