吴忠躺衫网络科技有限公司

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

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

3天內不再提示

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

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

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

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

前言

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

控制寫

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

image.png

注意以上5個關鍵過程

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

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

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

如下是狀態階段

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

image.png

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

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

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

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

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

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

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

設備模式BULK OUT

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

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

OUT指的是數據HOST->DEV。

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

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

image.png

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

設備模式BULK IN

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

image.png

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

設備模式Interrupt OUT

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

image.png

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

設備模式Isochronous IN

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

image.png

image.png

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

主機模式 Isochronous IN

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

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

image.png

image.png

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

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

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

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

image.png

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

總結

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

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

    關注

    112

    文章

    16447

    瀏覽量

    179462
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121172
  • 接口
    +關注

    關注

    33

    文章

    8692

    瀏覽量

    151921
  • usb
    usb
    +關注

    關注

    60

    文章

    7980

    瀏覽量

    266099
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12112
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    151
收藏 人收藏

    評論

    相關推薦

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-0x01開篇介紹與新思
    的頭像 發表于 05-08 18:10 ?4800次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</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驅動開發-0x02 DWC2 USB2.0 IP功能特征介紹

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。從linux的內核源碼
    的頭像 發表于 05-09 10:09 ?9852次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</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驅動開發-0x04 DWC2 USB2.0 IP 架構介紹

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

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

    基于DWC2USB驅動開發-IAD描述符詳解

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

    基于DWC2USB驅動開發-USB復位詳解

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

    基于DWC2USB驅動開發-USB連接詳解

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

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

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

    基于DWC2USB驅動開發-設備類驅動框架

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

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

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

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

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

    新思 DWC2 的參考手冊從哪里可以下載

    最近在學習STM32F4 USB驅動,有看到 dwc2驅動的代碼,但是沒有手冊用來參考,ST手冊上寄存器不全,從網上看到有下面兩個手冊,但是一直找不到下載的資源 《DesignWar
    發表于 01-22 11:32

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

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

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

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

    基于DWC2USB驅動開發-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd

    本文轉自公眾號系列文章,歡迎關注 基于DWC2USB驅動開發-USB包詳解 (qq.com) 一.前言 前面我們對SETUP完成標志DOE
    的頭像 發表于 07-24 18:04 ?1706次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd
    德州扑克怎么玩| 百家乐官网注册开户送彩金| 百家乐官网冲动| 百家乐国际娱乐城| 威尼斯人娱乐城信誉怎么样| 沅陵县| 澳门百家乐官网娱乐平台| 澳门百家乐是怎样赌| 大发888.com| 注册百家乐官网送彩金| 百家乐视频二人麻将| 百家乐园36bol在线| 娱乐城注册送体验金| 百家乐官网闲9点| 百家乐赌博代理荐| 足球赌博网站| 百家乐官网押注方法| 百家乐算号软件| 大发888棋牌官网| 百家乐官网优博娱乐城| 百家乐太阳城| 大发888坑人么| 百家乐官网高科技出千工具| 博E百百家乐的玩法技巧和规则| 大发888备用网址大全| 水晶百家乐官网筹码| 新东方百家乐的玩法技巧和规则| 六合彩网址大全| 怎么赢百家乐官网的玩法技巧和规则| 现金百家乐信誉| 平原县| 百家乐路单破解软件| 任你博| 新葡京百家乐现金网| 大发888游戏网页版| 百家乐官网赌场赌场网站| 百家乐怎么玩会| 百家乐官网赌博规律| 百家乐押注最多是多少| 昌邑市| 澳门百家乐下三路|