解決STM32使用smsc的部分USB phy(如USB3343)時無法枚舉為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永遠是程式員的家(/≧▽≦)/

總結一下,STM32的庫函數還是不夠細緻,像這樣一個寄存器,在H7的庫函數中根本沒有巨集定義,只能自己手動操作寄存器位。且STM32對USB phy的相容還不夠充分,需要在CubeMX生成代碼基礎上額外設置,才能跑通。

解決方法

鏈接中寫到:

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
更多相關文章
  • 1. 前言 上一篇文章我們瞭解了bombardier,並知道了bombardier.yml與開源項目bombardier的關係,接下來的文章我們瞭解一下wrk、wrk2,並對比一下它們與bombardier的關係 2. 認識wrk wrk是一種現代 HTTP 基準測試工具,能夠在單個多核 CPU 上 ...
  • 1.舉例 為了方便加深理解,我準備先講解一個例子來映襯出CLS的主要作用。 每個國家在成立之後肯定會於他國之間建立外交關係從而進行一些貿易往來,剛開始可能只會存在與一兩個國家達成了合作,所以只會與少數的國家進行貿易往來。在進行貿易往來前為了溝通順暢,國家之間交流的語言必須要一致,這個時候通常的方式是 ...
  • 本文對Metalama中的切麵進行簡介及以WPF中的 INotifyPropertyChanged 為例,展示如何利用Metalama簡化INotifyPropertyChanged 的實現 ...
  • 1.OrDefault 方法的預設值 Enumerable.FirstOrDefault 方法返回一個序列的第一個元素,如果沒有找到,則返回一個預設值。在 .NET 6 中,你可以覆蓋該方法的預設值。同樣,你還可以覆蓋 SingleOrDefault 和 LastOrDefault 方法的預設值。 ...
  • bat文件是dos下的批處理文件。批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名為 .bat 或 .cmd。 ...
  • Stratis 捲管理文件系統 介紹 紅帽的 Stratis 是新一代的存儲管理解決方案,稱為捲管理文件系統。可以通過它創建文件系統及調整其大小時以動態、透明的方式來管理捲層。 Stratis 以管理物理存儲池的服務形式運行,並透明地為所創建的文件系統創建和管理捲。由於 Stratis 使用現有的存 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、Zabbix 簡介 Zabbix 可以用來監控各種網路參數,來保證伺服器和系統的安全運行。並且 Zabbix 還提供了靈活的通知機制,以此來讓系統管理員快速定位/解決存在的各種問題。是一個基於 Web 界面提供的分散式系統監控以及網路監控功能 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 準備工作 virtualBox可在官網下載,Ubuntu鏡像可在 阿裡雲下載,選擇對應電腦位數的鏡像。 開始安裝 1、點擊“新建”按鈕 1.1 設置好安裝目錄、系統類型、系統版本 1.2 分配記憶體 ​ 可以根據實際情況,且後期可以更改 1.3 默 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...