2012-12-11 57 views
4

在使用FT232R USBtoRS232芯片進行某些測試時,應該能夠管理高達3Mbaud/s的速度,但我的實際速度只有38kbaud/s或3,8KB/s左右。實際波特率是115200還是更高?

我搜索了網頁,但找不到任何可比較的數據,以證明或防止此限制。

雖然我正在進一步研究這個問題,但我想知道,如果某人在這裏有可比較的數據。

我用我自己的代碼,並在這裏這個工具測試:

http://www.aggsoft.com/com-port-stress-test.htm

設置是115200 8N1 64Byte的數據包。

我本來期望的結果像這樣:

115200波特 - >有效11520字節/秒或11,52KB/s的

在921600波特 - > 92,16KB/s的

我需要確認11,2KB/s的最低速度,更好的速度在15-60KB/s左右。

基於數據表,這應該是沒有問題的 - 基於現實,我堅持在3,8KB/s - 至少現在至少。

編輯:

噢,我發現一個相當不錯的暗示 - 我TRANSFERRATE高度依賴於數據包的大小。因此,在使用64字節數據包的同時,我使用180Byte數據包以3,8 KB/s的速度傳輸數據,平均每秒大約11,26KB/s,並且主光源亮起,當我檢查速度爲1字節數據包時 - >大約64B/s!

向它添加一些數學 - > 11,52KB/s除以180等於64B/s。所以速度基本上與字節大小成比例。這是正確的嗎?爲什麼是這樣?

+0

該芯片的USB驅動程序將字節放入USB數據包的方式是一個強大的實現細節。發佈到electronics.stackexchange.com以查找曾使用此芯片的用戶。 –

+3

在串口中,沒有「數據包」,只有字節流。您看到的差異是由於API調用串行驅動程序的開銷導致的時間損失,而不是端口速度本身造成的。如果您使用少量數據撥打電話,則開銷較大。如果您打出一個能夠提供巨大緩衝區的呼叫,那麼串行硬件會保持已滿狀態,並將吞吐量最大化。 – TJD

+0

您將波特率等於*吞吐量*,但幾乎不可能實現數據通道的100%利用率。連接線的範圍。您實際上可以通過位寬來測量波特率。你不會看到任何「減速」,但看到字符幀之間的死或空閒時間。增加幀之間的死區時間就是你所說的「較慢的速度」,但它會降低吞吐量。 – sawdust

回答

5

您觀察到的結果是由於Serial over USB的工作方式。這是USB1.1芯片。 USB確實使用數據包進行傳輸,而不是連續數據流,例如串行數據。因此,您的設備將獲得一個時間片窗口,並由駕駛員有效利用此窗口。當您將數據包大小設置爲1時,每個USB數據包只能傳輸一個字節。要傳輸下一個字節,你必須等待輪到你。通常USB設備在設備端有一個緩衝區,可以在傳輸之間緩衝數據,從而保持輸出速率不變。當您將數據包大小設置得太低時,您的流量不足。 USB1.1上的時間片是10ms,只有每秒100個傳輸才能在所有設備之間共享。 當您發送「發送」電話時,您的所有數據將以一次傳輸完成,以保持交互式應用正常工作。最好使用最大傳輸大小以在USB設備上實現最佳性能。如果您有交互式應用程序,這並不總是可行的,但當您有數據傳輸應用程序時,這種情況通常是可能的