USB 接口
首先看一看 USB 的接口,當(dāng)你看到這些接口時(shí),你應(yīng)該知道,哦,那是 USB 接口。
不然學(xué)完了 USB,USB 接口都不認(rèn)識(shí)那就很尷尬了。
看到這些接口是不是很熟悉?
常用的接口有 Type A 接口,這個(gè)接口一般直接插在電腦上的,Type B 接口比較少見,目前比較常見的是 Mini-B、Micro-B 接口,前者在 MP3 之類的設(shè)備中比較常見,當(dāng)然在我們工程師中的調(diào)試器中也經(jīng)常使用,后者多用于手機(jī)等設(shè)備,不過目前大部分手機(jī)接口用 Type-C 接口代替了:
(圖片來源于網(wǎng)絡(luò))
這種接口可以正反插,并且能提供比其它接口更大的電流,速度更快,所以今天可以看到越來越多的設(shè)備開始支持 Type-C 了。
我們可以看看這些接口內(nèi)部的引腳分布情況(不包含 Type-C 接口,這個(gè)接口引腳很多):
第四引腳在某些接口中可能沒有,其他引腳都是存在的。
Vbus 和 GND 兩個(gè)硬件用于供電,提供恒定的 4.4 ~5.25 V 電源(當(dāng) USB 為設(shè)備提供 5.25 V 電源時(shí),數(shù)據(jù)線工作在 3.3 V),當(dāng)設(shè)備使用總線供電時(shí),將由這兩根引腳提供所需電源,當(dāng)然總線提供的電流比較有限,所以如果說總線不足以提供足夠的電源,那么就需要使用外部供電。
D-、D+兩個(gè)引腳用于數(shù)據(jù)傳輸,類似串口的 Tx、Rx 數(shù)據(jù)線,不同的是,USB 采用差分方式傳輸,使用雙絞線,并且在線上傳輸?shù)臄?shù)據(jù)編碼遠(yuǎn)比串口的復(fù)雜,這個(gè)將在下節(jié)介紹。
這里需要注意一下線的顏色,一般的廠家生產(chǎn) USB 數(shù)據(jù)線時(shí)會(huì)按照標(biāo)準(zhǔn)來生產(chǎn),但是有些廠家卻不一定,紅色不一定是電源,黑色不一定就是地,使用的時(shí)候需要注意確認(rèn)。
標(biāo)準(zhǔn)的 USB 數(shù)據(jù)線外部一般會(huì)有屏蔽線包裹,防止外部干擾,但是有些廠家偷工減料,可能并沒有屏蔽線,甚至連 D-、D+數(shù)據(jù)線都沒有,只提供電源線。
(圖片來源于網(wǎng)絡(luò),外層白色包裹為屏蔽線)
因?yàn)椴捎貌罘謧鬏?,并且只有兩個(gè)引腳,所以總線為半雙工傳輸,即同一時(shí)刻只能發(fā)送或接收。同時(shí) USB 采用一主多從模式,即 USB 網(wǎng)絡(luò)中只有一個(gè)主機(jī),其他都是從機(jī),也就是設(shè)備。
USB 歷史版本
USB 經(jīng)過多年的發(fā)展,經(jīng)歷了多個(gè)版本,初始版本 1.0,于 1996 年完成,支持低速(LS)模式(1.5Mb/s)和全速(FS)模式(12Mb/s)。
USB1.1 規(guī)范于 1998 年面世,改進(jìn)了 1.0,但速度上沒有改變。
USB2.0 在 2000 年問世,增加了新的速度模式,即高速(HS)模式,最高支持 480 Mb/s。
USB3.0 在 2008 年發(fā)布,傳輸速率 5Gb/s。
這些版本保持向后兼容的特性,即 USB3.0 的主機(jī)接口可以接入 USB 1.0、2.0 的設(shè)備,但是受到設(shè)備本身的速度影響,所以最終的速度由低版本速度決定。
通過數(shù)據(jù)(D+或 D-)線上的上拉電阻的位置,主機(jī)可以識(shí)別低速設(shè)備和全速設(shè)備,而高速設(shè)備會(huì)在之后移除上拉電阻。
在 STM32F103 中,支持 USB 2.0 接口 ,但是只支持全速模式下的 2.0,即最大速度只有 12 Mb/s,換算到字節(jié)的話,只有 1.5 MB/s,除去 USB 本身的協(xié)議開銷的話(類似串口中的起始位、結(jié)束位開銷,但 USB 比這個(gè)復(fù)雜的多),最大有效數(shù)據(jù)帶寬差不多在 1.2 MB/s(我們接下來要學(xué)習(xí)的就是全速模式)。
所以不要認(rèn)為 USB2.0 的接口一定支持高速模式。
在 STM32F4 中,USB 開始支持高速模式,并且支持 OTG,這個(gè)模式使得 USB 設(shè)備既可以當(dāng)做主機(jī)也可以當(dāng)設(shè)備使用。
現(xiàn)在的手機(jī)一般都支持 OTG,即通過一根轉(zhuǎn)接線,即可將 U 盤之類的設(shè)備插入手機(jī)中使用,所以當(dāng)你的手機(jī)觸摸屏壞了,別著急,插上無線鼠
標(biāo)鍵盤套餐,照樣玩手機(jī)。
當(dāng)然這只是應(yīng)急使用,真正來說,沒誰會(huì)隨身帶著鼠標(biāo)鍵盤的。
HUB 與 USB 拓?fù)浣Y(jié)構(gòu)
除了常見的設(shè)備外,在 USB 網(wǎng)絡(luò)中,還有一種特殊的設(shè)備,即 HUB(集線器),這種設(shè)備只有一個(gè)作用,就是將一個(gè) USB 接口分成多個(gè) USB 接口(最多 7 個(gè))使用,這樣即使你的電腦只有一個(gè) USB 接口,通過 HUB,你也可以實(shí)現(xiàn)多個(gè)設(shè)備的連接。
HUB 對(duì)于用戶而言是透明的(即用戶在使用時(shí)不用特別去操作它),而為了實(shí)現(xiàn)這種透明,HUB 所做的工作要比上述復(fù)雜的多,具體可以找相關(guān)資料,魚鷹有時(shí)間也會(huì)研究一下這種特殊的設(shè)備。
?
上圖是 USB 連接圖,可以看到,通過 HUB,一個(gè) USB 網(wǎng)絡(luò)中可以連接非常多的設(shè)備(最多 127 個(gè),由 USB 設(shè)備 7 位地址決定),并且由于集線器的時(shí)間和電纜傳播的延遲,最多只能連接五個(gè) HUB,在層次上表現(xiàn)為上圖的 7 層(在全速和高速設(shè)備中,最大線纜長(zhǎng)度為 5 m,低速設(shè)備限制為 3 m)。
USB 網(wǎng)絡(luò)中的所有設(shè)備(包括 HUB)都有一個(gè)地址,范圍 0~127,地址 0 是所有設(shè)備在接入 USB 網(wǎng)絡(luò)時(shí)使用的默認(rèn)地址,當(dāng)設(shè)備完成枚舉后,即可擁有新的 USB 設(shè)備地址,之后所有的通信都將采用新地址通信。也就是說, USB 設(shè)備的地址是動(dòng)態(tài)的,類似網(wǎng)絡(luò)的 IP 地址。
USB 層次結(jié)構(gòu)
下面再來看看 USB 層次結(jié)構(gòu):
在開發(fā)時(shí),由于我們主要是軟件開發(fā),所以主要的關(guān)注對(duì)象是上面兩層,而底層的實(shí)現(xiàn)一般來說都是由硬件自動(dòng)完成的,比如 STM32 就幫我們實(shí)現(xiàn)了這一層,我們只需要獲取底層的數(shù)據(jù)然后進(jìn)行相應(yīng)的處理即可。
但是為了更好、更全面的理解 USB,這一層的內(nèi)容魚鷹也會(huì)在下一節(jié)進(jìn)行介紹。