久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專欄

EEPW首頁 > 博客 > 魚鷹:探究 USB2.0 的真實傳輸速度是多少?

魚鷹:探究 USB2.0 的真實傳輸速度是多少?

發布人:魚鷹談單片機 時間:2021-11-21 來源:工程師 發布文章

來源:公眾號【魚鷹談單片機】

作者:魚鷹Osprey

ID   :emOsprey

今天魚鷹簡單聊聊 STM32F103 USB 外設實際傳輸速度的問題。

103 的外設號稱 USB 2.0,但實際上是全速的 USB 2.0,即傳輸 1 bit 數據的速度是 12Mbit/s,類似串口波特率 115200 的概念。

但是我們知道串口協議本身也是有開銷的,比如 1 bit 起始位,1 bit 停止位,這都是必須的,否則接收方就無法正確接收。

下圖是 8 位數據情況下的傳輸波形圖(來源STM32官方手冊)

1.png

所以上述情況下,115200 波特率換算字節單位,實際傳輸速度為 11.52KB/s ,注意這里的 B 是大寫,代表字節 Byte,小 b 代表位 bit,這里面的區別很大,別被忽悠了。

比如 10 M 網速寬帶,一般說的是 bit 單位,所以實際傳輸大概在 1 MB 左右。

說回 USB 的話題,STM32F103 搭載的 USB 外設支持 2.0 協議,但是 2.0 協議也分兩種,一種是 全速 版本,即 USB1.1 , 12 Mb/s,另外一種是 高速 版本,480 Mb/s,而 103 只支持全速模式。

F4系列在增加外部 USB PHY 芯片才可以達到高速,否則也只能以全速的方式工作。

那么 F103 的 USB 真實傳輸速度可以達到多少呢?

首先說說為什么想得到這個值,有些產品要求速率很高,必須 1 s 傳輸 1 M字節的傳輸速度(1 MB/s)才行,但為了降成本,使用了 103 的芯片,認為全速 12 Mb/s 的速度怎么也夠了吧,殊不知,這里的速度單位是 bit,還沒考慮 USB 協議的開銷。

所以當你絞盡腦汁優化代碼,你都無法達到這個目標,因為它的理論值只有 12/8 = 1.5 MB/s ,可能你會說,這也夠了啊?

但是 USB 本身是有協議開銷的,就像串口有開始、停止位一樣,USB 也有令牌包、數據包、CRC校驗之類的開銷,還有一次傳輸事務的結束,一般會間隔一小段時間再進行下一次傳輸,還有協議中也會 1 ms 發送一次幀號。

2.png

上圖是魚鷹弄的 USB 雙緩沖傳輸波形(一個白塊代表了一次傳輸事務),我們可以看到,每傳輸一個數據包之后都會停頓一段時間,而每一次事務里面也不全包含了用戶數據,這些用戶數據被封裝在 USB 協議包里面。

所以,對于用戶來說,實際傳輸速度遠遠不到 1.5 MB/s,估計就 1 MB/s(最為理想情況下,即不浪費每一次 IN  OUT 令牌包的機會,另外 USB 總線上只有一個設備需要傳輸數據才可能達到),而如果在數據傳輸過程中,還加入了上層協議,比如 模擬 U 盤,里面會加入協議,速度就更低了。

所以,為了盡可能達到接近 1 MB/s 的用戶數據傳輸速度,可以使用如下方式:批量傳輸 + 雙緩沖 + 環形緩沖(比如 SD 卡的數據可以在 USB 傳輸時同步寫入 FIFO 中)。盡可能的利用帶寬。

在魚鷹測試模擬 U 盤的性能時,發現傳輸速度可以穩定在 700 KB /s 以上(單向)。而如果沒有 U 盤協議本身開銷和加大代碼優化(即不浪費 IN 、OUT 令牌包),估計能到 900 KB/s,剛好模擬串口就沒有多少協議開銷,到時候可以測試一波數據。

*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



關鍵詞: 單片機

相關推薦

技術專區

關閉