RM新时代网站-首页

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

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

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

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

嵌入式USB開(kāi)發(fā) ? 來(lái)源:嵌入式USB開(kāi)發(fā) ? 作者:嵌入式USB開(kāi)發(fā) ? 2023-07-24 18:04 ? 次閱讀

本文轉(zhuǎn)自公眾號(hào)系列文章,歡迎關(guān)注
基于DWC2的USB驅(qū)動(dòng)開(kāi)發(fā)-USB包詳解 (qq.com)

一.前言

前面我們對(duì)SETUP完成標(biāo)志DOEPINTn.SetUp進(jìn)行了詳細(xì)的分析,該標(biāo)志用于表明SETUP階段的完成,數(shù)據(jù)階段(無(wú)數(shù)據(jù)階段則是狀態(tài)階段)的開(kāi)始。我們知道控制傳輸有三個(gè)階段SETUP階段,數(shù)據(jù)階段,狀態(tài)階段,現(xiàn)在我們知道了什么時(shí)候由SETUP階段轉(zhuǎn)數(shù)據(jù)階段,那么什么時(shí)候數(shù)據(jù)階段轉(zhuǎn)狀態(tài)階段呢? 這個(gè)問(wèn)題就引出了我們繼續(xù)這篇文章的分析。

我們發(fā)現(xiàn)本系列文章很多都是自然而然地問(wèn)題引出的,然后針對(duì)問(wèn)題去查找答案,以此來(lái)進(jìn)行USB的學(xué)習(xí)和開(kāi)發(fā),相信這種狀態(tài)是一種很好的狀態(tài),甚至很多人會(huì)有意猶未竟,追劇的感覺(jué),解決一個(gè)問(wèn)題又冒出一個(gè)問(wèn)題,又促使繼續(xù)深挖,搞技術(shù)就是要如此。

二.DOEPINTn.StsPhseRcvd

之前我們就講了手冊(cè)中的如下表格,對(duì)應(yīng)的不同的控制傳輸?shù)臓顟B(tài),但是當(dāng)時(shí)還是云里霧里不甚理解,上一篇我們抽絲剝繭了解了Setup的含義,這一篇繼續(xù)來(lái)分析StsPhseRcvd,把每一個(gè)bit的精確含義理解了,再來(lái)理解這個(gè)表格就容易了。

還是老規(guī)矩我們先來(lái)看手冊(cè)的描述

定義就是StsPhseRcvd表示控制傳輸切換到了狀態(tài)階段。

只有Scatter Gather DMA模式,控制OUT端點(diǎn)有,順便提一下本系列文章沒(méi)有單獨(dú)說(shuō)明則都是針對(duì)Scatter Gather DMA模式。

下面也說(shuō)明了本標(biāo)志產(chǎn)生的條件是:控制器接收了控制寫傳輸?shù)臄?shù)據(jù)階段,主機(jī)發(fā)過(guò)來(lái)的所有數(shù)據(jù),并搬運(yùn)到了緩沖區(qū)中(注意并不是用戶空間中,搬運(yùn)到用戶空間還需要XferCompl來(lái)指明,即上述Case D和Case E的區(qū)別)。表明主機(jī)由數(shù)據(jù)階段切換到了狀態(tài)階段。

該中斷后設(shè)備程序可以進(jìn)行狀態(tài)階段的響應(yīng)了。

這里順便提一下控制器處理時(shí)DOEPINTn.StsPhseRcvd優(yōu)先級(jí)高于DOEPINTn.Setup。

以上的說(shuō)明還是不夠精確,還是協(xié)議層面的描述,比如數(shù)據(jù)階段切換到狀態(tài)階段到底是對(duì)應(yīng)的具體的哪個(gè)節(jié)點(diǎn)呢,對(duì)應(yīng)的是誰(shuí)發(fā)了什么包之后呢?

編程手冊(cè)中如下有描述,實(shí)際是數(shù)據(jù)OUT階段之后,設(shè)備收到了IN令牌之后置該位。

是不是很熟悉,原來(lái)和Setup的置位原理是差不多的,也是設(shè)備端延遲確認(rèn)。

同樣的是因?yàn)镺UT數(shù)據(jù)階段,設(shè)備回了ACK之后,主機(jī)收沒(méi)收到ACK,設(shè)備并不知道,主機(jī)下一步是不是需要重新OUT還是進(jìn)入狀態(tài)階段設(shè)備也不知道,所以只能等主機(jī)發(fā)了IN才知道主機(jī)切換到了狀態(tài)階段。

如下所示

這里我們還是同樣的會(huì)有一個(gè)疑問(wèn),為什么只有控制寫的OUT端點(diǎn)有這個(gè)標(biāo)志,為什么控讀IN端點(diǎn)沒(méi)有?

前面我們知道判斷Setup完成的標(biāo)志是,設(shè)備在SETUP后收到了OUT或者IN,

如果收到了OUT則表示SETUP階段完成,開(kāi)始控制寫數(shù)據(jù)階段,

如果收到了IN則表示SETUP階段完成,可能是開(kāi)始讀數(shù)據(jù)階段或無(wú)數(shù)據(jù),直接進(jìn)入狀態(tài)階段。因?yàn)槭?a href="http://m.hljzzgx.com/v/tag/1751/" target="_blank">硬件判斷的對(duì)于IN存在兩種情況,所以硬件實(shí)際不好判斷 ,所以交給軟件去判斷。

所以對(duì)于這幾種模式軟件操作流程如下:

所以對(duì)于控制讀操作,SETUP完成后,軟件就需要同時(shí)準(zhǔn)備好OUT描述符以接收狀態(tài)包,同時(shí)準(zhǔn)備IN描述符以發(fā)送數(shù)據(jù)。數(shù)據(jù)和狀態(tài)同時(shí)處理。

SETUP階段 -> 數(shù)據(jù)和狀態(tài)

對(duì)于控制寫操作,SETUP完成后,軟件準(zhǔn)備OUT描述符以接收數(shù)據(jù),StsPhseRcvd中斷后再準(zhǔn)備IN描述符發(fā)送狀態(tài)包。數(shù)據(jù)階段和狀態(tài)階段分開(kāi)處理。

SETUP階段-> 數(shù)據(jù)階段 -> 狀態(tài)階段

對(duì)于無(wú)數(shù)據(jù)控制傳輸

SETUP完成后,準(zhǔn)備IN描述符準(zhǔn)備發(fā)送狀態(tài)包。

SETUP階段- -> 狀態(tài)階段

三.DOEPINTn.XferCompl/DIEPINTn.XferCompl

分別表示IN和OUT描述符已經(jīng)被DMA處理,即RxFIFO的內(nèi)容搬運(yùn)到了用戶空間,或者用戶空間數(shù)據(jù)搬運(yùn)到了TxFIFO。

注意這里DMA處理完和實(shí)際總線上數(shù)據(jù)發(fā)送和接收是兩碼事。

比如對(duì)于IN端點(diǎn),XferCompl完成,只是表示用戶數(shù)據(jù)搬運(yùn)到了TxFIFO中,

下一次IN令牌,硬件才從TxFIFO中取出數(shù)據(jù)發(fā)送到總線上去。

這里注意如果TxFIFO中還有殘留的之前的數(shù)據(jù),則本次搬運(yùn)到TxFIFO的數(shù)據(jù)還不會(huì)發(fā)送,要等后續(xù)的IN才會(huì)發(fā)送。

所以一般這里需要先Flush掉TxFIFO,保證下一次IN發(fā)送的就是本次的數(shù)據(jù)。

四. **DIEPINTn.INTknTX****FEmp /DOEPINTn.OUTTknEPdis **

五.驅(qū)動(dòng)編寫注意事項(xiàng)

設(shè)備軟件必須等到StsPhseRcvd中斷即主機(jī)發(fā)了IN才能切換到狀態(tài)階段,準(zhǔn)備IN描述符準(zhǔn)備發(fā)0長(zhǎng)包。因?yàn)槿绻鳈C(jī)不發(fā)IN則主機(jī)可能還在數(shù)據(jù)階段,此時(shí)設(shè)備并不能確認(rèn)下一包就是IN。

同樣的因?yàn)樵O(shè)備確認(rèn)有滯后,實(shí)際是在IN令牌后才能進(jìn)該中斷,確認(rèn)主機(jī)進(jìn)入了狀態(tài)階段,所以對(duì)于該IN硬件是自動(dòng)NAK的,

所以中斷服務(wù)函數(shù)中軟件除了EPEna之外還要CNAK,以在后續(xù)IN中硬件根據(jù)新設(shè)置的IN描述符響應(yīng)狀態(tài)包(0長(zhǎng)包)。

注意IN端點(diǎn),及時(shí)Flush掉TxFIFO,保證下一次IN,傳輸?shù)氖潜敬卧O(shè)置的IN描述符對(duì)應(yīng)的數(shù)據(jù)。

六.總結(jié)

以上對(duì)DOEPINTn.StsPhseRcvd進(jìn)行了詳細(xì)的解析,和Setup原理基本類似,同時(shí)也介紹了其他一些相關(guān)中斷位。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7936

    瀏覽量

    264454
  • 驅(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)篇介紹與新思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ū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-0x01開(kāi)篇介紹與新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0控制器簡(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)核源碼驅(qū)動(dòng)中就帶
    的頭像 發(fā)表于 05-09 10:09 ?9355次閱讀
    基于<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>-0x02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP功能特征介紹

    基于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è)接口,可以用于實(shí)現(xiàn)組合設(shè)備。 二.參考文檔
    的頭像 發(fā)表于 06-27 08:45 ?12.2w次閱讀
    基于<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ī)格書,練習(xí)招式
    的頭像 發(fā)表于 07-07 08:46 ?3689次閱讀
    基于<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è)備類驅(qū)動(dòng)框架

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

    不管什么通訊協(xié)議,比如UART,SPI,USB等等,不管是并口還是串口,不管是同步還是異步,我們從抽象的角度去看,其本質(zhì)都是一樣的。都是先定義物理信號(hào),物理信號(hào)可能是差分,單端,電流驅(qū)動(dòng)電壓驅(qū)動(dòng)等等
    的頭像 發(fā)表于 07-23 17:11 ?2573次閱讀
    基于<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ā)-抽絲剝繭SETUP完成標(biāo)志DOEPINTn.SetUp

    Setup是DOEPINTn寄存器中的一個(gè)標(biāo)志,用于表示Setup階段是否完成。
    的頭像 發(fā)表于 07-24 15:57 ?1825次閱讀
    基于<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'>抽絲剝繭</b><b class='flag-5'>再</b><b class='flag-5'>論</b>SETUP完成<b class='flag-5'>標(biāo)志</b><b class='flag-5'>DOEPINTn</b>.SetUp

    基于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 ?2268次閱讀
    基于<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ō)明

    判斷切換為何種模式,ID腳的電平變化觸發(fā)控制器ID腳中斷,然后由軟件切換到對(duì)應(yīng)模式。目前使用兩種驅(qū)動(dòng)版本,一個(gè)是upstream 版,驅(qū)動(dòng)dwc2
    發(fā)表于 05-12 17:46

    如何實(shí)現(xiàn)rk3288 otg模式切換的設(shè)計(jì)呢

    的電平來(lái)切換模式的,OTG_ID 腳電平變化觸發(fā)控制器的ID腳中斷,然后由軟件來(lái)切換模式。由這個(gè)描述,可以認(rèn)為之前修改思路是可以的。二、軟件是如何切換的?rk3288的SDK中提供了兩套驅(qū)動(dòng)
    發(fā)表于 05-24 10:54

    如何對(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

    抽絲剝繭系列——一個(gè)T拓?fù)?/a>

    槽要吐,文章還是要寫的。大家知道,做一些layout guide是信號(hào)完整性工程師的基本工作之一,layout guide可以說(shuō)是一些SI規(guī)則的物理體現(xiàn)。 抽絲剝繭系列一次解謎經(jīng)歷 抽絲剝繭系列
    發(fā)表于 12-26 20:59 ?876次閱讀
    <b class='flag-5'>抽絲剝繭</b>系列——一個(gè)T拓?fù)? />    </a>
</div>                </div>            </div><!-- .main-wrap -->
        </article>

        <aside class=

    精選推薦

    更多
    • 文章
    • 資料
    • 帖子

    推薦專欄

    更多
      RM新时代网站-首页