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

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

3天內不再提示

基于DWC2的USB驅動開發(fā)-0x03 DWC2 USB2.0 IP 架構介紹之接口和協議時序

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-05-10 15:37 ? 次閱讀

本文轉自公眾號,歡迎關注)

基于DWC2的USB驅動開發(fā)-0x03 DWC2 USB2.0 IP 架構介紹之接口和協議時序 (qq.com)

前言

這部分以一些典型的傳輸為例,介紹控制器的處理過程。這部分內容比較重要,對于時序的理解有助于軟件編寫,尤其了解整個過程的先后順序,邏輯,比如什么時候產生中斷,什么時候硬件做什么,什么時候軟件做什么,這些都是驅動編寫需要了解的??梢月毤毱?,后面編寫軟件調試過程還會結合寄存器狀態(tài),結合調試過程不斷加深理解。

控制寫

如下以設備模式,DMA操作方式,16位utmi接口,SetAddress的Setup階段為例

image.png

注意以上5個關鍵過程

  1. 軟件使能OUT端口,設置好DMA,準備好接收數據。
  2. HOST發(fā)送Setup包過來,控制器收到并且硬件自動回復ACK。
  3. 控制器通過DMA將Setup包的內容搬運到系統(tǒng)memory。
  4. 然后控制器自動設置NAK位,NAK所有的IN和OUT端點,不再接收令牌包。

這里硬件自動NAK進行流控, 為什么這里要硬件自動NAK呢,這是為了避免持續(xù)的setup導致異常,因為由軟件中斷服務中再進行NAK比較慢,所以必須硬件做。所以驅動編寫一定要知道哪些是硬件做的哪些需要軟件做。

  1. 產生接收setup中斷, 軟件讀出setup內容進行解析,然后清除NAK位,重新使能端口進行接收。

如下是狀態(tài)階段

SetAddress沒有數據階段,前面的Setup數據流是HOST->DEV,所以狀態(tài)階段數據流是DEV->HOST,即HOST過來IN請求數據,DEV返回0長包。

image.png

  1. 軟件使能IN端點,配置DMA發(fā)送0長包。
  2. 控制器認為此時數據還未就緒所以NAK主機的IN請求。
  3. 控制器產生發(fā)送空中斷。
  4. HOST繼續(xù)IN請求,此時控制器準備好了數據,所以返回了0長包。
  5. 控制器產生發(fā)送完中斷,即0長包發(fā)送完通知軟件處理。

以上幾點一些個人理解暫時不確定:

為什么1已經使能了IN端點,配置好DMA了,2時間點在1的后面為什么還是NAK,這里應該是軟件DMA配置好,使能IN端點了,但是DMA還沒將0長數據包更新到TxFIFO(雖然0長包不需要復制負載數據但是還是有包頭包尾CRC等需要準備),所以此時還沒有數據可以發(fā)送到USB總線上去所以是NAK

3這里產生發(fā)送空中斷指的是緩沖區(qū)空,而不是指的總線數據發(fā)送完,所謂的緩沖區(qū)空即軟件可以繼續(xù)配置下一個DMA準備下一個DMA搬運了。此時數據已經就緒到TxFIFO隨時都可以發(fā)送到USB總線了。

所以4這里 HOST再來IN請求時控制器就可以返回0長包了

然后5這里就產生發(fā)送完中斷(這里應該是真正的總線上數據發(fā)送完)。

所以什么時候產生什么中斷是編程需要了解的非常重要。

設備模式BULK OUT

這里順便提一下USB中的IN和OUT是以HOST的角度去說的。

比如IN指的是數據DEV->HOST

OUT指的是數據HOST->DEV。

不管是設備端還是主機端都是這個角度說的。

如下以包長為1的BULK OUT傳輸,DMA模式為例

image.png

  1. 軟件設置好DMA,使能OUT端點.
  2. HOST發(fā)送一個1字節(jié)長的BULK OUT包,控制器因為已經就緒接收,所以ACK該包,接收的數據在接收緩沖區(qū)。
  3. 控制器通過DMA將接收緩沖區(qū)的數據搬運到系統(tǒng)memory。
  4. 控制器產生接收完成中斷。中斷中就可以對數據進行處理。

設備模式BULK IN

如下以包長為1的BULK IN傳輸,DMA模式為例。

image.png

  1. 此時發(fā)送FIFO中沒有數據,所以HOST來IN請求時,控制器返回NAK
  2. 控制器產生TXFIFO空中斷,表示TXFIFO中沒有數據了,可以準備發(fā)送數據了。
  3. 軟件配置好DMA和使能IN端點。
  4. 控制器通過DMA將數據從系統(tǒng)memory搬運到TXFIFO中。在完成搬運前都是NAK主機的IN。
  5. 完成數據搬運到FIFO,FIFO中有數據了,此時HOST再來IN,則控制器將緩沖區(qū)的數據發(fā)送到USB總線上去。
  6. 控制器產生發(fā)送完中斷。

設備模式Interrupt OUT

以下以設備模式,DMA操作,中斷OUT傳輸252字節(jié)數據。和BULK OUT類似。

image.png

  1. 軟件配置好DMA和使能OUT端點。
  2. 控制器接收HOST發(fā)送的數據到接收緩沖區(qū),并ACK。
  3. 控制器通過DMA將接收緩沖區(qū)的數據搬運到系統(tǒng)memory。
  4. 產生接收完成中斷。軟件可以處理數據了。

設備模式Isochronous IN

以下以設備模式DMA方式的ISO IN傳輸為例

image.png

image.png

  1. SOF令牌,ISO的傳輸以SOF微幀為單位進行。
  2. 控制器產生SOF中斷。
  3. 軟件設置好DMA使能IN端點。
  4. IN端點使能后,控制器開始通過DMA將系統(tǒng)memory的數據搬運到發(fā)送FIFO中去。
  5. 下一個SOF到來并產生SOF中斷
  6. 本次SOF的HSOT的IN請求,設備的FIFO中已經準備好數據所以可以發(fā)送到總線上去給HOST。
  7. 產生發(fā)送完中斷。

主機模式 Isochronous IN

以下以主機模式DMA方式的ISO IN傳輸為例

應用程序必須在傳輸之前安排一個(微)幀的傳輸。

image.png

image.png

  1. 控制器產生SOF中斷。
  2. 軟件配置好通道信息以準備接收下一個微幀的數據。
  3. 下一個SOF中斷。
  4. 控制發(fā)送IN請求并接收設備返回的數據。
  5. 控制器將接收到的數據通過DMA搬運到系統(tǒng)memory中。
  6. 控制器產生接收完成中斷。

主機模式Slave操作方式Bulk Out傳輸

以主機模式 Slave操作方式 Bulk Out傳輸1個字節(jié)數據為例。

Slave模式需要CPU通過AHB總線去寫數據到發(fā)送FIFO,而不是DMA自動搬運。

image.png

  1. 控制初始化配置好BULK OUT的通道。
  2. 軟件將數據寫入TXFIFO中。
  3. 控制器發(fā)送TXFIFO中的數據。
  4. 發(fā)送完產生中斷。

總結

以上以各種典型的傳輸時序圖為例介紹了控制器的處理過程,把這部分放在開始寫代碼之前也是為了先有一個大概的整體了解,才能確定程序的框架流程如何設計。

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

    關注

    112

    文章

    16361

    瀏覽量

    178046
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120363
  • 接口
    +關注

    關注

    33

    文章

    8598

    瀏覽量

    151156
  • usb
    usb
    +關注

    關注

    60

    文章

    7945

    瀏覽量

    264657
  • 驅動開發(fā)

    關注

    0

    文章

    130

    瀏覽量

    12077
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    133
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    基于DWC2USB驅動開發(fā)-0x04 DWC2 USB2.0 IP 架構介紹

    這一篇先對IP架構進行一些介紹,內容比較多所以重點關注和軟件相關的內容。后續(xù)編程具體涉及時,可能再返回過來詳讀某一個部分。
    的頭像 發(fā)表于 05-12 12:50 ?4247次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>0x</b>04 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b> <b class='flag-5'>IP</b> <b class='flag-5'>架構</b><b class='flag-5'>介紹</b>

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

    混淆,IP的配置參數固定之后就不能改了,就決定了IP所具有的能力。對于軟件開發(fā)者來說也要了解其具體的配置,因為只有知道當前IP的配置,知道支持哪些功能,哪些是軟件可以配置的哪些是硬件固
    的頭像 發(fā)表于 05-17 09:49 ?2303次閱讀

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

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

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

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

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發(fā)-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊,規(guī)格書,練習招式
    的頭像 發(fā)表于 07-07 08:46 ?3713次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>連接詳解

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

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

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

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

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發(fā)-發(fā)送相關的寄存器DMA寄存器詳解 (qq.com) 前言 如下寄存器DIEPxxx,對應IN端點,和發(fā)送數據相關,這一篇先
    的頭像 發(fā)表于 07-16 16:42 ?1658次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>-發(fā)送相關的寄存器DMA寄存器詳解

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

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

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

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

    如何對基于hal庫的DWC2 USB IP進行調試呢

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

    無法讓USB主機正常工作是我做錯了什么嗎?

    bus registered, assigned bus number 3[ 2.986093] dwc2 49000000.usb-otg: irq 51, io mem 0x
    發(fā)表于 12-02 06:06

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

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