情況是這樣的,我們用stm32做了和電腦上位機的通訊。通訊方式是HID方式。但是有個非常奇怪情況就是
上位機和下位機連接,使用完畢后關閉上位機。這個程序中一切都是正常的。
但是!!有時關閉后,再過了半小時再打開上位機這時候雖然能連接下位機,但是收發資料都不行了。這時候重啟電腦
或者重新插拔下USB都能恢復正常。
而且只要每次打開上位機和 上一次關閉之間的間隔不要太長就不會出現這種問題。非常奇怪!
這個問題很頭疼 而且是偶發的有時候間隔2個小時也不會出問題。不知道大家有沒有碰到過這種情況
uj5u.com熱心網友回復:
會不會是suspend 了,可以抓包看看uj5u.com熱心網友回復:
大佬 什么是suspend 呀 ?因為這塊電路板是外包公司做的,現在雙方都在找原因。我對嵌入式底層不了解
suspend是指電路板的CPU把usb掛起了嗎?那怎樣才能防止不被掛起呢?
uj5u.com熱心網友回復:
這么說stm32程式不是你們寫的,那就不好解決了,上層只能通過 Bus Hound 監聽總線資料,看是上層沒發出去,還是底層沒回。
掛起是USB設備實作的,和主機沒關系。
uj5u.com熱心網友回復:
我做的這東東,通訊時直接插拔usb只是暫停而已,插上又恢復了,你是不是沒做出錯處理啊,uj5u.com熱心網友回復:
不是的 我沒有插拔USB 只是第一次把上位機的軟體關閉了。 后面重新再打開就有概率無法收發了。 但是如果兩次打開之間的時間只要不太長就不會有問題
1 打開上位機-關閉上位機 等待5分鐘 打開上位機-關閉上位機 等待5分鐘 打開上位機-關閉上位機
2 打開上位機-關閉上位機 等待30分鐘 打開上位機-關閉上位機 等待30分鐘 打開上位機-關閉上位機
序列1不管重復多少次都不會有問題。因為閑置時間短
序列2就有概率出問題
uj5u.com熱心網友回復:
大佬 USB設備是值電路板上的哪個器件嗎?還是啥?
uj5u.com熱心網友回復:
USB通訊,PC端是USB主機(Host),下位機端是USB設備(Device),這里就是STM32電路板,MCU里有USB外設,通過編程實作各種USB功能,比如這里的HID通訊,所以問題主要在設備端,主機做不了什么事,只能監聽總線上的資料uj5u.com熱心網友回復:
USB通訊,PC端是USB主機(Host),下位機端是USB設備(Device),這里就是STM32電路板,MCU里有USB外設,通過編程實作各種USB功能,比如這里的HID通訊,所以問題主要在設備端,主機做不了什么事,只能監聽總線上的資料
大佬能幫我分析分析啥原因嗎
我們現象是這樣的1 打開上位機-關閉上位機 等待5分鐘 打開上位機-關閉上位機 等待5分鐘 打開上位機-關閉上位機
2 打開上位機-關閉上位機 等待30分鐘 打開上位機-關閉上位機 等待30分鐘 打開上位機-關閉上位機
序列1不管重復多少次都不會有問題。因為閑置時間短
序列2就有概率出問題,然后把USB插拔一下就可以了,或者重啟電腦也能解決(重啟電腦 不會重啟電路板的電源)
關鍵這個bug重現難度大 這次我連續兩天都沒出問題。還有我們的設備是雙向通訊的電路板向PC端發訊息 PC端也會向下位機發訊息
uj5u.com熱心網友回復:
雙向通訊也是分主從的,主機發送,從機回傳,從機不能主動發送給主機,沒有實物不好具體分析,不過你用bus hound可以監測主機到底有沒有把資料發出去,從機有沒有回傳,就能知道問題出在哪了uj5u.com熱心網友回復:
雙向通訊也是分主從的,主機發送,從機回傳,從機不能主動發送給主機,沒有實物不好具體分析,不過你用bus hound可以監測主機到底有沒有把資料發出去,從機有沒有回傳,就能知道問題出在哪了
今天 我截到資料包是這樣的
uj5u.com熱心網友回復:
就這些嗎,感覺沒有列舉成功,程式中能打開嗎,或者看看設備管理器轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/7843.html
標籤:單片機/工控
上一篇:ADS7924 IIC通信問題
