<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

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

嵌入式USB開發 ? 來源:嵌入式USB開發 ? 作者:嵌入式USB開發 ? 2023-07-24 18:04 ? 次閱讀

本文轉自公眾號系列文章,歡迎關注
基于DWC2的USB驅動開發-USB包詳解 (qq.com)

一.前言

前面我們對SETUP完成標志DOEPINTn.SetUp進行了詳細的分析,該標志用于表明SETUP階段的完成,數據階段(無數據階段則是狀態階段)的開始。我們知道控制傳輸有三個階段SETUP階段,數據階段,狀態階段,現在我們知道了什么時候由SETUP階段轉數據階段,那么什么時候數據階段轉狀態階段呢? 這個問題就引出了我們繼續這篇文章的分析。

我們發現本系列文章很多都是自然而然地問題引出的,然后針對問題去查找答案,以此來進行USB的學習和開發,相信這種狀態是一種很好的狀態,甚至很多人會有意猶未竟,追劇的感覺,解決一個問題又冒出一個問題,又促使繼續深挖,搞技術就是要如此。

二.DOEPINTn.StsPhseRcvd

之前我們就講了手冊中的如下表格,對應的不同的控制傳輸的狀態,但是當時還是云里霧里不甚理解,上一篇我們抽絲剝繭了解了Setup的含義,這一篇繼續來分析StsPhseRcvd,把每一個bit的精確含義理解了,再來理解這個表格就容易了。

還是老規矩我們先來看手冊的描述

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

只有Scatter Gather DMA模式,控制OUT端點有,順便提一下本系列文章沒有單獨說明則都是針對Scatter Gather DMA模式。

下面也說明了本標志產生的條件是:控制器接收了控制寫傳輸的數據階段,主機發過來的所有數據,并搬運到了緩沖區中(注意并不是用戶空間中,搬運到用戶空間還需要XferCompl來指明,即上述Case D和Case E的區別)。表明主機由數據階段切換到了狀態階段。

該中斷后設備程序可以進行狀態階段的響應了。

這里順便提一下控制器處理時DOEPINTn.StsPhseRcvd優先級高于DOEPINTn.Setup。

以上的說明還是不夠精確,還是協議層面的描述,比如數據階段切換到狀態階段到底是對應的具體的哪個節點呢,對應的是誰發了什么包之后呢?

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

是不是很熟悉,原來和Setup的置位原理是差不多的,也是設備端延遲確認。

同樣的是因為OUT數據階段,設備回了ACK之后,主機收沒收到ACK,設備并不知道,主機下一步是不是需要重新OUT還是進入狀態階段設備也不知道,所以只能等主機發了IN才知道主機切換到了狀態階段。

如下所示

這里我們還是同樣的會有一個疑問,為什么只有控制寫的OUT端點有這個標志,為什么控讀IN端點沒有?

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

如果收到了OUT則表示SETUP階段完成,開始控制寫數據階段,

如果收到了IN則表示SETUP階段完成,可能是開始讀數據階段或無數據,直接進入狀態階段。因為是硬件判斷的對于IN存在兩種情況,所以硬件實際不好判斷 ,所以交給軟件去判斷。

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

所以對于控制讀操作,SETUP完成后,軟件就需要同時準備好OUT描述符以接收狀態包,同時準備IN描述符以發送數據。數據和狀態同時處理。

SETUP階段 -> 數據和狀態

對于控制寫操作,SETUP完成后,軟件準備OUT描述符以接收數據,StsPhseRcvd中斷后再準備IN描述符發送狀態包。數據階段和狀態階段分開處理。

SETUP階段-> 數據階段 -> 狀態階段

對于無數據控制傳輸

SETUP完成后,準備IN描述符準備發送狀態包。

SETUP階段- -> 狀態階段

三.DOEPINTn.XferCompl/DIEPINTn.XferCompl

分別表示IN和OUT描述符已經被DMA處理,即RxFIFO的內容搬運到了用戶空間,或者用戶空間數據搬運到了TxFIFO。

注意這里DMA處理完和實際總線上數據發送和接收是兩碼事。

比如對于IN端點,XferCompl完成,只是表示用戶數據搬運到了TxFIFO中,

下一次IN令牌,硬件才從TxFIFO中取出數據發送到總線上去。

這里注意如果TxFIFO中還有殘留的之前的數據,則本次搬運到TxFIFO的數據還不會發送,要等后續的IN才會發送。

所以一般這里需要先Flush掉TxFIFO,保證下一次IN發送的就是本次的數據。

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

五.驅動編寫注意事項

設備軟件必須等到StsPhseRcvd中斷即主機發了IN才能切換到狀態階段,準備IN描述符準備發0長包。因為如果主機不發IN則主機可能還在數據階段,此時設備并不能確認下一包就是IN。

同樣的因為設備確認有滯后,實際是在IN令牌后才能進該中斷,確認主機進入了狀態階段,所以對于該IN硬件是自動NAK的,

所以中斷服務函數中軟件除了EPEna之外還要CNAK,以在后續IN中硬件根據新設置的IN描述符響應狀態包(0長包)。

注意IN端點,及時Flush掉TxFIFO,保證下一次IN,傳輸的是本次設置的IN描述符對應的數據。

六.總結

以上對DOEPINTn.StsPhseRcvd進行了詳細的解析,和Setup原理基本類似,同時也介紹了其他一些相關中斷位。

審核編輯 黃宇

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

    關注

    59

    文章

    7457

    瀏覽量

    258998
  • 驅動開發
    +關注

    關注

    0

    文章

    129

    瀏覽量

    12017
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    104
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-IAD描述符詳解 (qq.com) 一.? 前言 IAD描述符用于一個設備功能關聯多個接口,可以用于實現組合設備。 二.參考文檔
    的頭像 發表于 06-27 08:45 ?1.3w次閱讀
    基于<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 ?1.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 ?2367次閱讀
    基于<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 ?814次閱讀
    基于<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 ?708次閱讀
    基于<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 ?940次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-發送相關的寄存器DMA寄存器詳解

    基于DWC2USB驅動開發-USB包詳解

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

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

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

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

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

    判斷切換為何種模式,ID腳的電平變化觸發控制器ID腳中斷,然后由軟件切換到對應模式。目前使用兩種驅動版本,一個是upstream 版,驅動dwc2
    發表于 05-12 17:46

    如何實現rk3288 otg模式切換的設計呢

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

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

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

    抽絲剝繭系列——一個T拓撲

    槽要吐,文章還是要寫的。大家知道,做一些layout guide是信號完整性工程師的基本工作之一,layout guide可以說是一些SI規則的物理體現。 抽絲剝繭系列一次解謎經歷 抽絲剝繭系列
    發表于 12-26 20:59 ?810次閱讀
    <b class='flag-5'>抽絲剝繭</b>系列——一個T拓撲
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>