新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于Azure USBx 開發USB_OTG_HS MSC 應用的幾個問題

        基于Azure USBx 開發USB_OTG_HS MSC 應用的幾個問題

        作者: 時間:2023-11-13 來源:ST 收藏

        1. 前言

        本文引用地址:http://www.104case.com/article/202311/452790.htm

        某客戶在使用 開發一款智能手表時,需要使用USB_OTG_HS 實現USBStorage 功能。建議客戶參考“STM32U575I-EVApplicationsUSBXUx_Device_MSC”例程來實現。但是,客戶抱怨參考U575 的例程也無法調試通過,程序在USB_CoreInit()無法初始化成功。在支持解決了客戶初始化失敗的問題后,客戶反饋仍然無法調通 的MSC storage 程序。

        本文主要介紹使用 開發 應用時的幾個問題點,詳細配置和移植過程,讀者可自行參考本文附件中的工程源碼。

        2. 問題調研與驗證

        客戶在使用STM32CubeMX 生成 工程時采用的默認RCC 時鐘樹配置如下:

        1699853918340650.png

        外設初始化失敗,筆者在J_DK 板上也得到了同樣的結果。

        1699853943855726.png

        3. 問題分析與解決辦法

        USB初始化失敗的問題既然能夠穩定復現,那么問題應該比較好找,經過查看DS13633 和RM0456對于STM32U599的USB_OTG_HS外設有如下相關描述。

        1699853969409017.png

        根據文檔描述,也就是說USB_OTG_HS這個IP Core工作于60MHZ,它是由OTG_HS_PHY Clock提供的,為了保證其精度必須使用外部晶振HSE,且OTG_HS_PHY的時鐘頻率僅支持16/19.2/20/24/26/32這幾個頻率大小。

        在STM32CubeMX里將USB_OTG_HS時鐘重新配置如下:

        1699853996130403.png

        重新生成代碼,下載測試可以看到USB_OTG_HS已經能夠成功初始化了。

        1699854018963766.png

        1699854044156358.png

        到這一步看起來似乎問題應該解決了。然后,事實并非如此,下載程序插上USB后,Windows仍然沒有出現任何提示。其實,STM32CubeMX生成 USBx 應用時,只生成了相應的用戶層級框架,并不是直接就可以工作的,application層的部分接口還需要用戶去完成的。

        但是,在STM32Cube_FW_U5_V1.2.0及以上的版本中,ST提供了幾乎覆蓋了所有常見USBx各種USB類的例程,它們分布在不同型號的ST開發版上的,這些例程是可以相互交叉參考的。客戶USB_OTG_HS MSC storage參考的例程是STM32U575I-EVApplicationsUSBXUx_Device_MSC。

        查看STM32U599J_DK板原理圖,使用STM32CubeMX配置后發現,ST所有開發板的USB_OTG_FS/HS接口都是使能了TypeC-PD功能的,而客戶板子上是沒有使能TypeC-PD,直接按照USB_OTG_HS Device Only模式接的。

        1699854072997568.png

        通過單步調試和代碼跟蹤,最終發現USBx里面使用了TypeC CC引腳來檢測Device是否插入,當檢測到有Device插入或拔出時,發出設備狀態信息USB_Device_State_Msg的消息隊列,通知USBx Device線程入口函數app_ux_device_thread_entry(),并做相應的USB啟動和停止。客戶的板子和STM32CubeMx里面并沒有使能USB Type C-PD自然無法成功啟動USB服務。

        如下圖所示。

        1699854100818520.png

        既然問題是由于USB TypeC-PD引起,找到原因就不能解決那么問題了。只需要在USB_OTG_HS外設初始化后,直接啟動USB服務,代碼修改如下。

        1699854131577574.png

        經測試,經修改后程序工作正常。

        4. 小結

        筆者后期在STM32U599J_DK板上進行測試,發現STM32U599的USB_OTG_HS外設時鐘(OTG HS Clock Mux),對于頻率及時鐘源具有較強的選擇性,強烈建議OTG HS Clock Mux選擇HSE(16MHZ)作為時鐘。

        參考文獻

        1699854163761489.png

        文檔中所用到的工具及版本

        STM32CubeMX 6.8.0/IAR 9.32

        LAT中的附件

        STM32U599_DK_Threadx_USBx_Demo.zip

        版本歷史

        1699854187846491.png




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 屯门区| 武义县| 丹东市| 余江县| 海原县| 涟源市| 南和县| 文成县| 东兰县| 萨嘎县| 外汇| 平和县| 上饶县| 吉水县| 安庆市| 镶黄旗| 屏边| 巴青县| 上栗县| 梅河口市| 车致| 萨嘎县| 社旗县| 临沭县| 额济纳旗| 安西县| 柳河县| 名山县| 元江| 光泽县| 宾阳县| 盘山县| 东平县| 西畴县| 吉木乃县| 呼伦贝尔市| 中宁县| 财经| 离岛区| 遵化市| 耿马|