在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

嵌入式USB開發 ? 來源:嵌入式Lee ? 作者:嵌入式Lee ? 2023-07-07 08:46 ? 次閱讀

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

基于DWC2的USB驅動開發-USB連接詳解 (qq.com)

一.前言

之前一直在閱讀手冊,規格書,練習招式,學習心法,從這一篇開始我們就要真刀實槍的干了,當然不是一味蠻干。驅動編寫,調試,實踐的過程會結合閱讀規格書,手冊,理論結合實踐,招式和心法要同步進行。

二.USB連接需要幾步?

進行USB連接需要幾步?我們參考把大象裝進冰箱需要幾步:第一步打開冰箱門,第二步把大象裝入冰箱,第三步關閉冰箱門,完成。USB連接同樣的簡單,第一步插上開發板USB接口電腦,第二步電腦識別到USB設備,第三步恭喜你獲得一個黃色告警對話框!完美完成!也許很不幸,你沒有獲得黃色告警對話框,那么就是失敗了,后面我們會詳細介紹怎么去分析調試。

b6607f12-1c5f-11ee-9c1d-dac502259ad0.png

三.USB連接原理

前面我們已經完成了USB連接的操作,實踐了師傅教的第一招黑虎掏心,but what?我干了什么?前面我們說過需要理論結合實踐,招式結合心法,招式已經嘗試了,但是到底是什么原理呢?到底是怎么做到的呢?那么就要從心法去探究,USB江湖的最基礎的心法,就是USB2.0的規格書。當然招式也有招式的拳譜劍譜,我們這里就對應的使用的USB控制器IP的規格書(這里是新思的DDC2)和PHY的規格書(microChip的USB334x)。

我們打開USB2.0規格書,翻到141頁看到如下圖,主機(或HUB)端D+和D-均由Rpd=15KΩ的電阻下拉,未接入設備時此時D+和D-都是0V。設備(或者下級HUB)端通過D+或D-上拉Rpu=1.5KΩ來區分是全速還是低速設備,全速設備D+上拉,低速設備D-上拉。設備端的上拉電阻和主機端下拉電阻分壓得到和未接設備時不一樣的電平,主機檢測該電平即可知道有設備插入,原理就是這么簡單,牛逼的武功也往往是很簡單,比如六脈神劍也就那么一彈手指。

b67a73fe-1c5f-11ee-9c1d-dac502259ad0.png

為什么是上拉1.5K呢,因為上拉電阻要保證分壓值不小于VIH(min),因為只有滿足該條件才能被識別為高,為什么這個電壓能識別為高呢,那就是硬件電氣特性決定的了,我喜歡死纏爛打的追問的伙伴,可以繼續深挖到收發器,晶體管,半導體.... ,如果能追到這一層的那么肯定是孤獨求敗級別的高手了,膜拜之。VIH在規格書中的要求如下至少要為2V(可以規格書中搜索找到)

b6d5c60a-1c5f-11ee-9c1d-dac502259ad0.png

除了上述要求,上拉電阻還要保證能夠在2.5μs的最小復位時間內將D+或D-從0V上拉至VIH(min),因為在復位結束時要進行總線狀態評估。

2.5uS的要求在如下表格中說明,即復位最短時間是2.5uS.

b6f2f69e-1c5f-11ee-9c1d-dac502259ad0.png

綜上要求,具有可拆卸電纜的設備使用1.5 k? ±5%電阻器連接到3.0 V和3.6 V之間的電壓源(VTERM),以滿足這些要求。帶有固定電纜的設備可以使用替代端接方式。但是,任何終端的Thevenin(戴維寧)電阻必須不小于900?.注:終端的Thevenin(戴維寧)電阻不包括主機/集線器上的15 k±5%的電阻。

上拉電阻器上的電壓源必須來源于USB電纜上提供的電源或由USB電纜上的電源控制,以便在移除VBUS時,上拉電阻器不會在其連接的數據線上提供電流。即VBUS斷開時上拉也應該斷開。

上述表中描述的是針對低速和高速設備連接檢測,高速呢,高速設備的連接檢測和全速一樣,只是后面速度枚舉有不同,這個先按下不表,后面再講解。

四.USB連接驅動

驅動編寫我們參考控制器IP的手冊,找到如下寄存器

手冊P529的5.4.48 DCTL,Offset: 0x804,bit1

b724077a-1c5f-11ee-9c1d-dac502259ad0.pngb7451d3e-1c5f-11ee-9c1d-dac502259ad0.png

b7999846-1c5f-11ee-9c1d-dac502259ad0.png

可以看到默認值是1,即默認是斷開上拉電阻的,注意這里的邏輯,這個bit表示斷開連接。

軟件寫0上拉電阻,這樣在DP或者DM上上拉電阻(根據速度而定,如何設置速度枚舉速度后面再講),這樣主機就可以檢測到了。

注意軟件操作這個bit時不要過于頻繁,一般留個10mS以上充足的間隔時間,大于上述手冊中的描述時間。

注意該位不受控制器軟件復位影響。

我們的驅動代碼如下,寄存器的操作封裝,參考之前的文章,為什么用宏不用結構體,也有專門的文章講解,可以去瞅瞅。

static void usb_dev_crtl_sft_discon(uint8_t dis)
{
  if (dis) {
    REG_OTG_DCTL |= DCTL_SOFT_DISCONN;
  } else {
    REG_OTG_DCTL &= ~(DCTL_SOFT_DISCONN);
  }
}

我們之前一直強調,要了解根本原理,不管學習招式還是學習心法,一定要追其核心根本原理。那么這個bit寫0就能上拉,到底是怎么實現的呢,

我們這里操作的是控制器即LINK,但是實際工作是由PHY去完成的,所以寫了這個bit之后,

LINK會通過PHY和LINK之間的UTMI或者ULPI接口告訴PHY,最終由PHY去完成這個上拉工作。于是乎我們去翻閱PHY的手冊這里是USB334x,看到如下圖,正是PHY將如下上拉電阻拉高來實現連接,至此我們已經了解了整個過程。

b7c3346c-1c5f-11ee-9c1d-dac502259ad0.png

從ULPI的規格書中還可以看到實際是通過PHY對應的寄存器相關位配置為不同的模式來控制的

wKgaomSnaxyAOQYPABeklvcYc58823.png

而UTMI接口中直接對應的是信號

wKgaomSna9-AIm-7ABSaMV_vOTI168.png

這里順便提一下,ULPI對UTMI引腳的縮減,實際就是通過將一些信號線直接控制轉為寄存器控制來達到的。

但是有好問者,會問那么LINK是怎么告訴PHY要去上拉電阻的呢,問得很好,高手總是從刨根問底開始的。這個就要了解UTMI和ULPI協議了,可以參考本系列文章,講解了ULPI協議,甚至講解了如何使用邏輯分析儀抓包ULPI,那么你就可以抓到ULPI接口上具體的數據,來調試分析了,比如最終沒能上拉,通過ULPI抓包可以確定是沒有發送到PHY還是PHY沒有執行,進一步縮小范圍。

https://mp.weixin.qq.com/s/e4MCpASUXW4oKzfYOdMRwg

https://mp.weixin.qq.com/s/7oTIgxvrui_ZdjCktFo87g

還有更細致的會問,那么這個上拉電阻是所有芯片都會有嗎,答案是否,有些芯片是沒有的,比如一些STM32MCU,這個時候需要外部提供上拉電路,使用IO控制。如下(網上隨便找的一張圖),USB_E來控制上拉。

b7e24d98-1c5f-11ee-9c1d-dac502259ad0.png

五.調試

上面我們如果能看到電腦彈出黃色告警的對話框,恭喜你,你已經練就了第一招黑虎掏心。如果不幸沒有彈出呢,那么我們就需要進行調試。那么就要派出示波器出來一展身手了。

我們直接使用示波器監控DP和DM的電平,查看初始是否都為0,然后connect后DP,DM是否對應的拉高,拉高的值是否符合要求達到了VIH(min)。如果沒有拉高則從以下方面去分析:

1.硬件檢查,使用萬用表測量DP DM到芯片的相應引腳是否聯通,測試DP,DM是否和地或者VCC短路。如果外置PHY則檢查PHY是否工作,通過時鐘等關鍵引腳判斷。

2.將DP DM配置為普通IO,翻轉IO使用示波器查看硬件連通性。強調下該方式是嵌入式一種常用的測試方法,用于確認IO到硬件上是否正常聯通,有時還可以使用IO做時序分析測試,即在一定的事件發生時翻轉IO,用示波器測量,這比使用軟件定時器和串口打印更精確。多個通道還可以可視化展現相位關系,簡單的一招確是調試的大招。

3.檢查DP DM是否按照芯片手冊配置為了對應的功能,包括輸入輸出模式,功能選擇等,有些芯片可能需要重映射。

4.檢查USB相關的初始化是否正確,包括時鐘使能,IO模塊使能,外設模塊使能,時鐘配置(比如48M時鐘源等),檢查模塊復位,模塊寄存器保護等?;刈x寄存器確認相應的寄存器是否確實配置成功,回讀總是必要的,可靠性編程中需要考慮,寫入不一定成功的,芯片也是有出錯概率的。

我這里針對DWC的IP,測試代碼如下,10mS進行一次斷開和連接使用示波器查看

 while(1)
  {
    usb_dev_crtl_sft_discon(0);
    iot_timer_delay_ms(10);
    usb_dev_crtl_sft_discon(1);
    iot_timer_delay_ms(10);
  }

我這里是高速模式,示波器測試DP波形(黃色)如下:

b80fff72-1c5f-11ee-9c1d-dac502259ad0.png

六.總結

以上可以看出USB連接原理很簡單,就是一個上拉電阻,就好比將大象裝進冰箱一樣簡單。招式雖簡單,但是其背后的心法,原理確很重要,細節也很重要。這就是為什么喬峰使出黑虎掏心如此威力巨大,而一些綠林大漢使出來確平平無奇,這是心法和招式理解是否達到了爐火純晴的地步的區別。USB連接也是如此,只是知道上拉,還是知道LINK的寄存器如何配置,還是知道LINK和PHY如何通訊告訴PHY去上拉,甚至知道如何去抓包確認,還是知道上拉電阻為什么是1.5K有什么要滿足的條件,還是知道芯片不帶上拉如何去外置上拉等等,都是對應不同的級別。看來一招USB連接,一招黑虎掏心也可以分為18級,只有練到最高級爐火純青才能所向披靡,遇BUG解BUG,遇fault殺fault。

審核編輯 黃宇

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

    關注

    60

    文章

    8053

    瀏覽量

    269030
  • USB驅動
    +關注

    關注

    1

    文章

    137

    瀏覽量

    20528
  • 驅動開發
    +關注

    關注

    0

    文章

    133

    瀏覽量

    12207
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    205
收藏 人收藏

    評論

    相關推薦

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-0x01開篇介紹與新思DWC2 USB2
    的頭像 發表于 05-08 18:10 ?5161次閱讀
    基于<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 ?1.1w次閱讀
    基于<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 ?40.1w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-IAD描述符<b class='flag-5'>詳解</b>

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

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

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-高速設備枚舉為全速設備問題案例分析 (qq.com) 一.前言 ? 本文分享一個高速設備被枚舉為全速的問題。 ? ? 高速設備速
    的頭像 發表于 07-10 17:12 ?1662次閱讀
    基于<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 ?1533次閱讀
    基于<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,
    的頭像 發表于 07-16 16:42 ?1960次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-發送相關的寄存器DMA寄存器<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-USB詳解

    不管什么通訊協議,比如UART,SPI,USB等等,不管是并口還是串口,不管是同步還是異步,我們從抽象的角度去看,其本質都是一樣的。都是先定義物理信號,物理信號可能是差分,單端,電流驅動電壓驅動等等
    的頭像 發表于 07-23 17:11 ?2984次閱讀
    基于<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>包<b class='flag-5'>詳解</b>

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

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-數據不能發送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于驅動
    的頭像 發表于 08-08 09:43 ?2760次閱讀
    基于<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

    無法讓USB主機正常工作是我做錯了什么嗎?

    cdc_ncm[ 1.793050] dwc2 49000000.usb-otg: mapped PA 49000000 to VA 7975fc9b[ 1.793872] ehci_hcd: USB 2.0
    發表于 12-02 06:06

    基于DWC2USB驅動開發-高速設備速度握手詳解

    前面我們分析了USB連接和復位的過程, 也知道低速和全速/高速的USB設備分別是上拉DM和DP,主機通過不同的上拉區分接的是低速還是全速/高速設備的。但是怎么區分全速和高速呢? 這就需要額外的一些握手過程,本篇就來詳細介紹該過程
    的頭像 發表于 07-08 08:40 ?3396次閱讀
    基于<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驅動開發-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd

    本文轉自公眾號系列文章,歡迎關注 基于DWC2USB驅動開發-USB詳解 (qq.com)
    的頭像 發表于 07-24 18:04 ?1926次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd
    主站蜘蛛池模板: 天天射网 | www.黄色免费 | 人人澡人人澡碰人人看软件 | qyule亚洲精品 | 色老头性xxxx老头视频 | 久久99精品国产麻豆宅宅 | 四虎免费大片aⅴ入口 | 人人揉揉香蕉大免费不卡 | 怡红院亚洲怡红院首页 | 禁h粗大太大好爽好涨受不了了 | 夜夜爽爽 | 中国女人a毛片免费全部播放 | 久久综合影视 | 天天做天天爱天天综合网 | 男女爱爱视频免费 | 视频一区二区不卡 | 四虎影视色费永久在线观看 | 久久激情五月 | 日本三级香港三级人妇99视 | 手机看片99 | 免费看吻胸亲嘴激烈网站 | 日本高清色视频在线观看免费 | 成年香蕉大黄美女美女 | 亚洲免费观看视频 | 五月婷婷深爱 | 最色网站| 丁香五六月婷婷 | 日本大片免费观看视频 | 奇米四色7777 | seetube18日本第一次 | 国产三a级日本三级日产三级 | 性猛交毛片| 日本免费黄色片 | 国产成人三级 | 人人爽影院 | 男人j进入女人j在线视频 | 亚洲v视频 | 999国产精品 | 亚洲一级视频在线观看 | 尻美女视频| 51vv福利视频在线精品 |