RM新时代网站-首页

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

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

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

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

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

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

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

前言

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

控制寫(xiě)

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

image.png

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

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

這里硬件自動(dòng)NAK進(jìn)行流控, 為什么這里要硬件自動(dòng)NAK呢,這是為了避免持續(xù)的setup導(dǎo)致異常,因?yàn)橛绍浖袛喾?wù)中再進(jìn)行NAK比較慢,所以必須硬件做。所以驅(qū)動(dòng)編寫(xiě)一定要知道哪些是硬件做的哪些需要軟件做。

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

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

SetAddress沒(méi)有數(shù)據(jù)階段,前面的Setup數(shù)據(jù)流是HOST->DEV,所以狀態(tài)階段數(shù)據(jù)流是DEV->HOST,即HOST過(guò)來(lái)IN請(qǐng)求數(shù)據(jù),DEV返回0長(zhǎng)包。

image.png

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

以上幾點(diǎn)一些個(gè)人理解暫時(shí)不確定:

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

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

所以4這里 HOST再來(lái)IN請(qǐng)求時(shí)控制器就可以返回0長(zhǎng)包了

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

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

設(shè)備模式BULK OUT

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

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

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

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

如下以包長(zhǎng)為1的BULK OUT傳輸,DMA模式為例

image.png

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

設(shè)備模式BULK IN

如下以包長(zhǎng)為1的BULK IN傳輸,DMA模式為例。

image.png

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

設(shè)備模式Interrupt OUT

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

image.png

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

設(shè)備模式Isochronous IN

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

image.png

image.png

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

主機(jī)模式 Isochronous IN

以下以主機(jī)模式DMA方式的ISO IN傳輸為例

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

image.png

image.png

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

主機(jī)模式Slave操作方式Bulk Out傳輸

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

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

image.png

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

總結(jié)

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

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

    關(guān)注

    112

    文章

    16332

    瀏覽量

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

    關(guān)注

    31

    文章

    5336

    瀏覽量

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

    關(guān)注

    33

    文章

    8575

    瀏覽量

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

    關(guān)注

    60

    文章

    7936

    瀏覽量

    264474
  • 驅(qū)動(dòng)開(kāi)發(fā)

    關(guān)注

    0

    文章

    130

    瀏覽量

    12072
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    125
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-0x01開(kāi)篇介紹與新思DWC2 USB2.0控制器簡(jiǎn)介

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

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(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 ?9357次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(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ū)動(dòng)開(kāi)發(fā)-0x04 DWC2 USB2.0 IP 架構(gòu)介紹

    這一篇先對(duì)IP架構(gòu)進(jìn)行一些介紹,內(nèi)容比較多所以重點(diǎn)關(guān)注和軟件相關(guān)的內(nèi)容。后續(xù)編程具體涉及時(shí),可能再返回過(guò)來(lái)詳讀某一個(gè)部分。
    的頭像 發(fā)表于 05-12 12:50 ?4230次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(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ū)動(dòng)開(kāi)發(fā)-0x07 DWC2 USB2.0 IP 配置參數(shù)

    混淆,IP的配置參數(shù)固定之后就不能改了,就決定了IP所具有的能力。對(duì)于軟件開(kāi)發(fā)者來(lái)說(shuō)也要了解其具體的配置,因?yàn)橹挥兄喇?dāng)前IP的配置,知道支持哪些功能,哪些是軟件可以配置的哪些是硬件固
    的頭像 發(fā)表于 05-17 09:49 ?2285次閱讀

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

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

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

    本文轉(zhuǎn)自公眾號(hào)歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB復(fù)位詳解 (qq.com) 一.前言 ? ? ? ? ?上一篇我們?cè)敿?xì)
    的頭像 發(fā)表于 07-07 11:18 ?6.4w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>USB</b>復(fù)位詳解

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB連接詳解

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊(cè),規(guī)格書(shū),練習(xí)招式
    的頭像 發(fā)表于 07-07 08:46 ?3690次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>USB</b>連接詳解

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

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

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-設(shè)備類(lèi)驅(qū)動(dòng)框架

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

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

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解 (qq.com) 前言 如下寄存器DIEPxxx,對(duì)應(yīng)IN端點(diǎn),和發(fā)送數(shù)據(jù)相關(guān),這一篇先
    的頭像 發(fā)表于 07-16 16:42 ?1641次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-發(fā)送相關(guān)的寄存器DMA寄存器詳解

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-數(shù)據(jù)不能發(fā)送問(wèn)題分析案例

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

    RK3399平臺(tái)上USB控制器和PHY的連接方式和配置說(shuō)明

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

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

    背景之前適配 DWC2 USB IP 的時(shí)候,主要是基于 st 的 hal 庫(kù)來(lái)走的,當(dāng)時(shí)我就對(duì)他們的 hal 庫(kù)代碼不滿,只是無(wú)奈,迫于時(shí)間就沒(méi)重構(gòu),果不其然,usb bug 一堆,
    發(fā)表于 06-14 15:23

    無(wú)法讓USB主機(jī)正常工作是我做錯(cuò)了什么嗎?

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

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

    本文轉(zhuǎn)自公眾號(hào)系列文章,歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB包詳解 (qq.com) 一.前言 前面我們對(duì)SETUP完成標(biāo)志DOE
    的頭像 發(fā)表于 07-24 18:04 ?1569次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-抽絲剝繭再論切換到狀態(tài)階段標(biāo)志DOEPINTn.StsPhseRcvd
    RM新时代网站-首页