博客專欄

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

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

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

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

        作者:魚鷹Osprey

        ID   :emOsprey

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

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

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

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

        1.png

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

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

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

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

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

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

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

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

        2.png

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

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

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

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

        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。



        關鍵詞: 單片機

        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 绥江县| 酉阳| 亚东县| 邢台县| 溧阳市| 高平市| 介休市| 平安县| 乌拉特前旗| 绥化市| 五大连池市| 湄潭县| 盖州市| 呼和浩特市| 革吉县| 东平县| 张掖市| 同心县| 阿拉善右旗| 樟树市| 金塔县| SHOW| 大安市| 北安市| 勃利县| 原平市| 通辽市| 昌平区| 红原县| 枝江市| 邵阳市| 呼和浩特市| 喀喇沁旗| 阿克陶县| 沅陵县| 九龙城区| 莱芜市| 武乡县| 芦溪县| 贵定县| 林甸县|