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