色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

USB發送數據時出現遲滯現象

jf_pJlTbmA9 ? 來源:STM32單片機 ? 作者:STM32單片機 ? 2023-09-27 15:19 ? 次閱讀

問題描述

客戶反饋,使用STM32F446的高速USB外設,即USB_OTG_HS外設,且使用內置全速PHY。客戶的產品USB用做device,自定義HID類,當連接帶UOS操作系統的HOST時,會發現當前數據并沒有成功發送,但是會發送上一次的數據,即發送數據出現”遲滯”現象。但在Windows下卻沒有出現此類問題。另外,客戶同時還使用了STM32F446上的USB_OTG_FS外設,且此外設做同樣的事一切正常,目前此問題只出現在USB_OTG_HS外設上。

問題查找

剛開始猜測是長度問題,即發送最大包長需要再發送一次空包。但客戶反饋他們的發送長度為62個字節。于是去客戶現場使用USB協議分析儀采數分析,發現一切通信正常。

通過查看客戶演示重現問題的過程,發現在正常時是一切OK的,只在進行USB拔插時才發送問題。應用程序不斷發送數據的過程中拔掉USB線,然后再次插上,在此過程中應用程序一直嘗試發送數據。當USB線重新連接上且重新枚舉成功后,“遲滯”現象則重現了,即每次應用程序調用發送接口實現發送的是上一次嘗試發送的內容。

調試客戶的程序,發現當USB線拔掉后,應用程序還會往USB IP對應的發送FIFO內寫入數據,這其實是不對的。按理USB線拔掉后USB的狀態應該恢復到默認狀態,

即pdev->dev_state=USBD_STATE_DEFAULT. 但實際上,通過調試發現此狀態在USB線拔掉后是suspend狀態。

那么為什么會是這樣的呢?

于是立即想到Vbus sensing功能。馬上與客戶硬件工程師核對,原來客戶產品的USB_OTG_HS的Vbus_sensing腳是懸空的,并沒有連接Vbus,但是客戶的USB_OTG_FS外設卻又是連接了。于是客戶的產品兩個USB口,同樣的工作,一個USB口 正常,另一個USB口卻會出現問題。

問題分析

差異找到了,接下來就是分析由此如何造成問題的。

由于USB_OTG_HS并沒有真正實現Vbus sensing功能(因為沒有硬件連接),于是當USB線斷開時,應用程序并不能準確地檢測到斷開事件(Disconnected),只會出現suspend,應用程序是無法直接的區分真正的suspend和USB線斷開連接的。當應用程序有數據需要通過USB口發送時,如果當前是suspend狀態,那么它會首先喚醒USB總線然后再發送數據:

wKgZomUD9KyANPBjAACsn3HAJuw283.jpg Figure1

而這樣發送遠程喚醒信號時,device本身會產生一個resume中斷,于是在resume中斷回調函數內:

wKgaomUD9K6ADFqNAACEkPrHpQ8150.jpg Figure 2

如上所示,程序會將dev_state錯誤地恢復到上一次狀態,即正常狀態USBD_STATE_CONFIGURED, 如此一來,程序就錯誤地往USB IP的內的發送FIFO寫入數據了,即使此時由于USB線已經斷開而導致無法真正發送成功,但USB IP的內置發送FIFO此時是有了數據的。

通過調試,查看OTG_DTXFSTS1寄存器相應端點1對應的發送FIFO的剩余空間可知,這個時候的發送FIFO的確實有數據的。接下來是USB線插上重新枚舉,那么為什么USB重新枚舉后還會再現問題呢?通過設置斷點發現,在USB成功重新枚舉過后,通過OTG_DTXFSTS1寄存器指示,發送FIFO內容并沒有清空,于是在接下來發送數據時,永遠都是實際上發送的是上一次寫入到FIFO中的數據。

問題解決

▼于是解決方法就很容易找到了▼

在USB重新枚舉過后在合適的地方將端點1對應的發送FIFO清空一下即可。

wKgZomUD9K-AS0fOAAAX9lrdlyk157.png Figure 3

問題總結

在客戶的這個案子中,由于USB_OTG_FS連接了VBUS SENSING腳,當USB線拔掉后,會產生正確的disconnect中斷,USB device的狀態也會正確地切換到default狀態,從而過濾掉應用程序想要發送的數據,因此并不會出現類似問題,因此,在客戶的產品設計中,建議硬件千萬不要忘了連接vbus引腳,即使在想省IO引腳的情況下,這樣容易造成對軟件的開發諸多不便.

在USB的狀態處于非configured狀態時,最好不要往發送FIFO寫入數據,應用程序應該想辦法將這些數據過濾掉。

來源:STM32單片機

審核編輯:湯梓紅

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

    關注

    6042

    文章

    44617

    瀏覽量

    637618
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151707
  • usb
    usb
    +關注

    關注

    60

    文章

    7979

    瀏覽量

    265608
  • STM32
    +關注

    關注

    2271

    文章

    10923

    瀏覽量

    357100
收藏 人收藏

    評論

    相關推薦

    ESP32-S3 USB CDC虛擬串口發送數據失敗的原因?

    最近在使用ESP32-S3的USB CDC虛擬串口時,發現USB在熱插拔之后發送數據出現了問題,USB
    發表于 06-06 06:50

    STM32 USB數據接收與數據發送

    PMA中讀取出來,放到用戶自己緩沖區中。接著設置端點接收狀態有效,因為當接收數據后,端點就會被關閉。最后置位接收帶數據標志。 發送比接收簡單多了看看下面的代碼就知道了。/*** @brief通過
    發表于 11-13 14:08

    stm32 L476 SPI讀取nandflash數據通過USB CDC發送進到USB發送忙狀態

    發送到上位機的時候總是發著發著就進到USB發送忙的狀態,追蹤了一下,在不使用SPI讀取nandflash數據,直接循環發送數組中固定
    發表于 11-12 08:44

    GPRS發送數據重新嚴重丟失現象

    弱弱的問一下,我用GPRS發送數據,大概300字節左右,頻率1Hz,但是就收的數據有嚴重的丟失現象,我想用把沒有發出去的數據先存起來,等到能
    發表于 03-08 06:35

    GPRS數據發送出現丟包現象

    大家好,我STM32通過SIM900A的GPRS給服務器發數據,為什么會出現如下丟包現象,是不是GPRS發送會有一個緩存,每次發送完我要清一
    發表于 04-17 06:36

    SIM900A的GPRS數據發送出現沒有send ok現象

    各位,目前在開發STM32+SIM900A,因為用的是UDP協議,發現一個問題:發送一組數據的時候,模塊一般會回“send ok”,但是會出現沒有send ok現象,一旦沒有這個
    發表于 06-06 04:36

    can總線通信出現奇怪現象

    目前在測試 nxp芯片can總線通信功能時出現一奇怪現象,在波特率為20k時,節點a以15ms時間間隔連續發送64幀數據過程中節點b發送一幀
    發表于 08-17 21:11

    請問為什么PDMA發送數據被替換的現象會發生?

    為什么PDMA發送數據被替換的現象會發生?
    發表于 12-21 06:46

    TMS320C6748:USB CPPI DMA發送多組數據緩存長度為4M的數據發送第2組數據時會出現死機的現象!!!!

    實現第一條數據長度為4M數據緩存時,可以直接進行發送,當第二次在發送4M數據時就會出現死機的
    發表于 08-06 16:46

    TMS320C6748:硬件USB 開啟CPPI DMA,多次發送長度為4M的數據緩存,出現死機的現象!!!!!!

    實現第一條數據長度為4M數據緩存時,可以直接進行發送,當第二次在發送4M數據時就會出現死機的
    發表于 08-09 14:24

    CH582發送數據量大時,出現丟包現象的原因是什么?

    藍牙每次只能發20字節左右的數據,連續發送幾百字節,會出現丟包現象。加大連接間隔等參數,仍存在丟包;造成的原因有哪些?
    發表于 08-02 07:04

    為什么用DMA發送串口數據時會出現數據覆蓋的現象呢?

    大神好。我在用DMA發送串口數據時會出現數據覆蓋的現象我用這種方式打開并配置串口DAM:g_uart2obc = rt_device_fin
    發表于 01-10 18:18

    怎么避免無刷電機在工作的時候出現遲滯換向?

    怎么避免無刷電機在工作的時候出現遲滯換向
    發表于 10-10 06:25

    電站的出力特性和響應遲滯“拖尾現象”產生的原因

    風光儲聯合電站集合了風電、光伏和儲能單元等不同種類電源,其有功協調控制是電站運行的關鍵技術。實際運行中出現了有功控制的響應遲滯拖尾現象,即電站有功指令下達后,各類型電源響應時間參差不齊,整體呈現拖尾
    發表于 01-02 14:43 ?11次下載
    電站的出力特性和響應<b class='flag-5'>遲滯</b>“拖尾<b class='flag-5'>現象</b>”產生的原因

    stm32 usb 主機發送 pid in的原理和實現方法

    中,我們將深入探討STM32 USB主機發送PID IN的原理和實現方法。 首先,讓我們來了解一下USB協議中的PID(Packet Identifier)。PID是USB
    的頭像 發表于 12-20 15:56 ?1422次閱讀
    主站蜘蛛池模板: 伊人久久中文字幕久久cm | 袖珍人与大黑人性视频 | 樱桃视频高清免费观看在线播放 | 免费看毛片网 | 捆绑调教网站 | 校花在公车上被内射好舒 | 亚洲精品国产精品精 | 亚洲 欧美 制服 校园 动漫 | 产传媒61国产免费 | 吉吉影音先锋av资源 | 亚洲国产第一区二区三区 | 国产亚洲色婷婷久久精品99 | xxxx18动漫| 国产免费69成人精品视频 | 女教师苍井空体肉女教师S242 | yellow片高清视频免费看 | 日韩专区亚洲国产精品 | 伊人久久综合影院 | 在线免费观看毛片 | 蜜柚视频在线观看全集免费观看 | 久久精品九九亚洲精品天堂 | 国产成人精品电影在线观看 | 欧美巨大巨粗黑人性AAAAAA | 我年轻漂亮的继坶2中字在线播放 | 日本亚洲精品无码区国产电影 | 久久视频这只精品99re6 | av淘宝 在线观看 | 亚洲国产区中文在线观看 | 成人毛片在线播放 | 精品极品三大极久久久久 | 久久在精品线影院精品国产 | 99精品日韩| 国产精品国产三级国产专区53 | 久久综合网久久综合 | 99在线视频免费观看视频 | 亚洲绝美精品一区二区 | 动漫美女被吸奶 | 亚洲AV精品无码成人 | 久久999视频 | 闺蜜撬开我的腿用黄瓜折磨我 | poronovideos动物狗猪 |