精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

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

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

本文轉(zhuǎn)自公眾號,歡迎關(guān)注)

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

前言

這部分以一些典型的傳輸為例,介紹控制器的處理過程。這部分內(nèi)容比較重要,對于時序的理解有助于軟件編寫,尤其了解整個過程的先后順序,邏輯,比如什么時候產(chǎn)生中斷,什么時候硬件做什么,什么時候軟件做什么,這些都是驅(qū)動編寫需要了解的。可以慢慢,細細品,后面編寫軟件調(diào)試過程還會結(jié)合寄存器狀態(tài),結(jié)合調(diào)試過程不斷加深理解。

控制寫

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

image.png

注意以上5個關(guān)鍵過程

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

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

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

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

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

image.png

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

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

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

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

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

然后5這里就產(chǎn)生發(fā)送完中斷(這里應(yīng)該是真正的總線上數(shù)據(jù)發(fā)送完)。

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

設(shè)備模式BULK OUT

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

比如IN指的是數(shù)據(jù)DEV->HOST

OUT指的是數(shù)據(jù)HOST->DEV。

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

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

image.png

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

設(shè)備模式BULK IN

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

image.png

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

設(shè)備模式Interrupt OUT

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

image.png

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

設(shè)備模式Isochronous IN

以下以設(shè)備模式DMA方式的ISO IN傳輸為例

image.png

image.png

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

主機模式 Isochronous IN

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

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

image.png

image.png

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

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

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

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

image.png

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

總結(jié)

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

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

    關(guān)注

    112

    文章

    16203

    瀏覽量

    177414
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5317

    瀏覽量

    120010
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8497

    瀏覽量

    150835
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7896

    瀏覽量

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

    關(guān)注

    0

    文章

    130

    瀏覽量

    12062
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    120
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。從linux的內(nèi)核源碼
    的頭像 發(fā)表于 05-09 10:09 ?9082次閱讀
    基于<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'>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驅(qū)動開發(fā)-0x04 DWC2 USB2.0 IP 架構(gòu)介紹

    這一篇先對IP架構(gòu)進行一些介紹,內(nèi)容比較多所以重點關(guān)注和軟件相關(guān)的內(nèi)容。后續(xù)編程具體涉及時,可能再返回過來詳讀某一個部分。
    的頭像 發(fā)表于 05-12 12:50 ?4118次閱讀
    基于<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'>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'>架構(gòu)</b><b class='flag-5'>介紹</b>

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

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

    基于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 ?5.2w次閱讀
    基于<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描述符詳解

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

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

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

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊,規(guī)格書,練習(xí)招式
    的頭像 發(fā)表于 07-07 08:46 ?3568次閱讀
    基于<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>連接詳解

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

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

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-設(shè)備類驅(qū)動框架 (qq.com) 一.前言 從軟件頂層,從數(shù)據(jù)流的角度來看
    的頭像 發(fā)表于 07-16 15:56 ?1280次閱讀
    基于<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,對應(yīng)IN端點,和發(fā)送數(shù)據(jù)相關(guān),這一篇先
    的頭像 發(fā)表于 07-16 16:42 ?1587次閱讀
    基于<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寄存器詳解

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

    本文轉(zhuǎn)自公眾號歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于驅(qū)動
    的頭像 發(fā)表于 08-08 09:43 ?2134次閱讀
    基于<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進行調(diào)試呢

    背景之前適配 DWC2 USB IP 的時候,主要是基于 st 的 hal 庫來走的,當(dāng)時我就對他們的 hal 庫代碼不滿,只是無奈,迫于時間就沒重構(gòu),果不其然,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驅(qū)動開發(fā)-抽絲剝繭再論切換到狀態(tài)階段標(biāo)志DOEPINTn.StsPhseRcvd

    本文轉(zhuǎn)自公眾號系列文章,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-USB包詳解 (qq.com) 一.前言 前面我們對SETUP完成標(biāo)志DOE
    的頭像 發(fā)表于 07-24 18:04 ?1484次閱讀
    基于<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