解決STM32使用smsc的部分USB phy時無法枚舉為HS的問題

来源:https://www.cnblogs.com/-fcy-/archive/2022/04/11/16128744.html
-Advertisement-
Play Games

解決過程 在使用stm32H743+外置USB2.0高速phy(smsc USB3343)過程中,發現設備無法被枚舉為hs模式,而是一直被枚舉為fs。測試速度,如下: 16:24:24.672288:開始測試單片機向上位機發送數據…… 16:24:25.671740:結束測試,速度約為 831.48 ...


解決過程

在使用stm32H743+外置USB2.0高速phy(smsc USB3343)過程中,發現設備無法被枚舉為hs模式,而是一直被枚舉為fs。測試速度,如下:

16:24:24.672288:開始測試單片機向上位機發送數據……
16:24:25.671740:結束測試,速度約為 831.488K Byte/s

16:24:25.672746:開始測試單片機接收上位機的數據……
16:24:26.673512:結束測試,速度約為 727.04K Byte/s

可見速度確實為fs速度。使用USBlyzer軟體查看,也能看到設備處於fs模式。測速方法鏈接

CubeMX生成項目後,檢查了stm32的各種寄存器,設置都正常。示波器查看USB枚舉波形,看不到高速設備的握手過程,看不到chirp K信號。自己解決不了問題,百度也找不到解決方案。。。於是谷歌了大半天,終於找到問題的原因以及解決方法。

首先自己查看H743晶元手冊,找到了OTG_DCFG寄存器中,一個名為XCVRDLY的寄存器位,手冊中描述如下:

直覺認為這應該就是問題關鍵點。到谷歌搜索,看到該鏈接中提到,新的smsc USB phy很多都沒法在stm32上使用,還給出了列表:

Preliminary data suggests the following:

MANUF   PART            LPM?    WORKING?
ST      STULPI01        NO      YES
SMSC    USB3300         NO      YES
SMSC    USB3320         NO      YES
NXP     ISP1705         NO      YES
SMSC    USB3340         YES     NO
SMSC    USB3343         YES     NO
SMSC    USB3330         YES     NO

我使用的USB3343赫然在列!下麵有人說:

I have now had confirmation from ST that there is a bug in the STM32F207 devices as I have described, which means that they can't enumerate at HS with LPM-capable PHYs. I don't know which devices the bug applies to, but I guess all STM32F2xx and F4xx families at least. I expect this will be confirmed in the Errata documents at some point, but note that it isn't yet.

這裡有點擔心這問題還沒解決,不過該回答是2018年的,應該已經修複了。繼續搜索:

該鏈接中提到,在賽靈思fpga上使用usb3340,修改XCVRDLY寄存器即可解決問題

該鏈接中說,在很多地方修改XCVRDLY也沒法解決問題。這讓我有點害怕。還是繼續搜索看看

最終,在該鏈接中找到瞭解決問題的方法——GitHub永遠是程式員的家(/≧▽≦)/

解決方法

鏈接中寫到:

Solution
As mentioned, solution is to enable XCVRDLY in DCFG register. Tested and working with STM32F446 and USB3343 PHY by setting this bit in set_speed function.

也即解決問題的方法:

在stm32h7xx_ll_usb.c中,找到USB_SetDevSpeed函數,在其中修改XCVRDLY寄存器位的值為1。最終,整個函數如下:

HAL_StatusTypeDef USB_SetDevSpeed(USB_OTG_GlobalTypeDef *USBx, uint8_t speed)
{
  uint32_t USBx_BASE = (uint32_t)USBx;
  USBx_DEVICE->DCFG |= (1u << 14);
  USBx_DEVICE->DCFG |= speed;
  
  return HAL_OK;
}

編譯下載到電路板,再到USBlyzer中查看,設備成功被枚舉為HS:

再次測速,速度符合預期,結果如下:

09:20:01.196515:開始測試單片機向上位機發送數據……
09:20:02.196626:結束測試,速度約為 13355.008K Byte/s

09:20:02.196626:開始測試單片機接收上位機的數據……
09:20:03.196547:結束測試,速度約為 7899.136K Byte/s

大功告成了,,一半!接下來就是輕鬆的調參優化速度環節啦!

更新:速率已達到23MBps左右,但仍未達到預期,有大佬能告知原因麽?

Have you LBCCed today?
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先,本文假設您已經使用 MDIX 設置了一個項目。此外,它推測您瞭解模型-視圖-視圖模型 (MVVM) 模式。但是,DialogHost也可以在沒有 MVVM 的情況下使用。 小試牛刀DialogHost Dialog是Material Design In XAML中非常重要且強大的一個控制項,首先 ...
  • 本文地址源碼 MassTransit是一個面向.net的免費開源分散式應用程式框架。 MassTransit使得創建應用程式和服務變得很容易,這些應用程式和服務利用基於消息的、鬆散耦合的非同步通信來獲得更高的可用性、可靠性和可伸縮性。 MassTransit 8.x版本。 實現簡單發佈訂閱 添加Nug ...
  • 執行周期 1. SetParametersAsync 2. OnInitializedAsync(調用兩次) 和 OnInitialized; 3. OnParametersSetAsync 或 OnParametersSet; 4. OnAfterRenderAsync 和 OnAfterRend ...
  • 熟悉C#開發的朋友們都應該知道,使用C#語言編寫的程式在編譯之後生成的文件被稱做為程式集,這其中又分為dll(類庫)和exe(可執行程式)兩種類型,而程式集當中的內容其實就CIL(Common Intermediate Language,公共中間語言)。CIL最初是隨著.NET由微軟一起發佈的,因此 ...
  • 大家好,好久沒有輸出博文了,一是因為比較忙,另外一個原因是最近主要的精力是在給 AgileConfig 添加一個新的功能:服務註冊與發現。 先說說為什麼會添加這個功能。我自己的項目是用 Consul 來做為服務註冊發現組件的。自從我上線了 AgileConfig 做為配置中心後,我就很少去 Cons ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 Docker概述 Docker學習鏈接 官網鏈接:Home - Docker Docker與虛擬機比較 虛擬化技術 容器技術不是模擬的一個完整的操作系統。 比較Docker 和虛擬機技術不同 傳統虛擬機,虛擬出一臺硬體,運行完整的操作系統。 容器 ...
  • 首先,先上結構圖,請對照代碼理解。 (一)什麼是任務切換? 任務切換就是在就緒列表裡面尋找優先順序最高的就緒任務,然後執行該任務。 (二)任務什麼時候切換? 1)、當執行系統調用的時候,進行任務切換。 2)、當發生滴答定時器(systick)中斷的時候,進行任務切換。 情況1:執行系統調用時 所謂的系 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、環境準備 1、鏡像包 CentOS-7.9-x86_64-DVD-2009.iso ubuntu-18.04.6-server-amd64.iso 2、VMware 二、鏡像下載 阿裡雲:developer.aliyun.com/mirror ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...