史勝輝:USB工程師技術(shù)路線分析(附圖書推薦)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
作者簡(jiǎn)介
史勝輝,在MTK工作了11年,一直在基帶芯片的USB驅(qū)動(dòng)領(lǐng)域做開(kāi)發(fā)和驗(yàn)證。從最開(kāi)始做USB2.0/3.0 IP驗(yàn)證和驅(qū)動(dòng)開(kāi)發(fā)到后面帶領(lǐng)團(tuán)隊(duì)做上層協(xié)議驅(qū)動(dòng)開(kāi)發(fā),以及跟硬件設(shè)計(jì)部門合作開(kāi)發(fā)全新的USB硬件加速器。
USB是個(gè)比較復(fù)雜的協(xié)議,對(duì)于剛接觸USB 驅(qū)動(dòng)的同學(xué)來(lái)說(shuō),經(jīng)常看了很久但是一直有中被在門外晃蕩的感覺(jué)。作為USB驅(qū)動(dòng)領(lǐng)域工作了很多年的我,為剛剛接觸USB 或者對(duì)USB 感興趣的新同學(xué)推薦一些學(xué)習(xí)書籍,希望能幫助其入門。
第一本要推薦的必然是 《Linux設(shè)備驅(qū)動(dòng)程序》(第4版),把它稱作Linux驅(qū)動(dòng)開(kāi)發(fā)的工程師的居家旅行的必備之器一點(diǎn)不過(guò)。里面詳細(xì)的介紹了Linux 設(shè)備驅(qū)動(dòng)的架構(gòu),而且有完整的實(shí)例程序,是非常值得推薦的一本書。
看完這本書后,基本對(duì)Linux 設(shè)備驅(qū)動(dòng)框架都已經(jīng)了解了,這個(gè)時(shí)候再配合Linux USB API(https://www.kernel.org/doc/html/v5.19-rc8/usb/index.html) 看USB驅(qū)動(dòng)程序就簡(jiǎn)單多了。
對(duì)于USB 協(xié)議來(lái)說(shuō) 從USB1.1->USB2.0->USB3.2Gen1->USB3.2Gen2X1->USB3.2Gen2X2->USB4 發(fā)展歷程很長(zhǎng),每個(gè)協(xié)議都很多。不建議新同學(xué)直接抱著USB 協(xié)議書啃,時(shí)間太久而且還不好懂。
USB2.0 是非常值得學(xué)習(xí)的,因?yàn)樽鳛閁SB協(xié)會(huì)的一大經(jīng)典之作,當(dāng)前通用性最強(qiáng),而且是后面的IP的基礎(chǔ)。直接讀協(xié)議的話,會(huì)比較枯燥,而且中間的邏輯關(guān)系很難拎出來(lái)。
作為過(guò)來(lái)人,推薦直接學(xué)習(xí)《USB 2.0 System Architecture - MindShare》, 里面的邏輯關(guān)系和關(guān)鍵知識(shí)點(diǎn)講的都很到位。無(wú)論是對(duì)于新人還是老手,都是值得去讀的。當(dāng)然它的篇幅有限,無(wú)法想U(xiǎn)SB 協(xié)議書那樣詳盡。
所以看完上面這個(gè)后,還是需要有針對(duì)性的看下USB2.0 協(xié)議書中的相關(guān)章節(jié)或知識(shí)點(diǎn)。避免一葉障目。
USB3.0 (現(xiàn)在改名叫USB3.2Gen1) 除了MAC/PHY 上的改善,同時(shí)引入了全新的硬件Layer:Link Layer。同樣推薦先學(xué)《USB 3.0 Technology - Mindshare》再選看USB3.0協(xié)議書。
對(duì)于USB驅(qū)動(dòng)開(kāi)發(fā)工程師,推薦看協(xié)議時(shí),一定要看協(xié)議中以下章節(jié):Architural Overview,Data Flow Model, Protocol Layer, Device Framework 這幾個(gè)章節(jié),其他章節(jié)根據(jù)需要學(xué)習(xí)即可。
學(xué)習(xí)完這些知識(shí)后,恭喜你,你已經(jīng)跨入USB領(lǐng)域大門了。這個(gè)時(shí)候就開(kāi)始往你想要領(lǐng)域擴(kuò)展了:底層協(xié)議:OTG/Type-C/BC1.2/PD,上層協(xié)議:ACM/ECM/NCM/RNDIS/MBIM/...
這個(gè)時(shí)候很多人還是會(huì)很迷茫,看了一堆的理論,跟Driver 怎么掛鉤的呢?其實(shí)中間還缺了兩個(gè)重要的環(huán)節(jié):
1. USB 硬件是如何套用USB 協(xié)議的的?軟件驅(qū)動(dòng)是如何按照USB 協(xié)議去控制硬件的?
2. USB 背后的DMA 是如何跟USB MAC 通信的?軟件又是如何控制DMA的?
這些都是跟具體IP 提供商的具體實(shí)現(xiàn)有關(guān),而普通的驅(qū)動(dòng)開(kāi)發(fā)者往往對(duì)這些都是霧里看花。后續(xù)有機(jī)會(huì)詳細(xì)給大家介紹。