史胜辉:USB工程师技术路线分析(附图书推荐)
扫描二维码
随时随地手机看文章
作者简介
史胜辉,在MTK工作了11年,一直在基带芯片的USB驱动领域做开发和验证。从最开始做USB2.0/3.0 IP验证和驱动开发到后面带领团队做上层协议驱动开发,以及跟硬件设计部门合作开发全新的USB硬件加速器。
USB是个比较复杂的协议,对于刚接触USB 驱动的同学来说,经常看了很久但是一直有中被在门外晃荡的感觉。作为USB驱动领域工作了很多年的我,为刚刚接触USB 或者对USB 感兴趣的新同学推荐一些学习书籍,希望能帮助其入门。
第一本要推荐的必然是 《Linux设备驱动程序》(第4版),把它称作Linux驱动开发的工程师的居家旅行的必备之器一点不过。里面详细的介绍了Linux 设备驱动的架构,而且有完整的实例程序,是非常值得推荐的一本书。
看完这本书后,基本对Linux 设备驱动框架都已经了解了,这个时候再配合Linux USB API(https://www.kernel.org/doc/html/v5.19-rc8/usb/index.html) 看USB驱动程序就简单多了。
对于USB 协议来说 从USB1.1->USB2.0->USB3.2Gen1->USB3.2Gen2X1->USB3.2Gen2X2->USB4 发展历程很长,每个协议都很多。不建议新同学直接抱着USB 协议书啃,时间太久而且还不好懂。
USB2.0 是非常值得学习的,因为作为USB协会的一大经典之作,当前通用性最强,而且是后面的IP的基础。直接读协议的话,会比较枯燥,而且中间的逻辑关系很难拎出来。
作为过来人,推荐直接学习《USB 2.0 System Architecture - MindShare》, 里面的逻辑关系和关键知识点讲的都很到位。无论是对于新人还是老手,都是值得去读的。当然它的篇幅有限,无法想USB 协议书那样详尽。
所以看完上面这个后,还是需要有针对性的看下USB2.0 协议书中的相关章节或知识点。避免一叶障目。
USB3.0 (现在改名叫USB3.2Gen1) 除了MAC/PHY 上的改善,同时引入了全新的硬件Layer:Link Layer。同样推荐先学《USB 3.0 Technology - Mindshare》再选看USB3.0协议书。
对于USB驱动开发工程师,推荐看协议时,一定要看协议中以下章节:Architural Overview,Data Flow Model, Protocol Layer, Device Framework 这几个章节,其他章节根据需要学习即可。
学习完这些知识后,恭喜你,你已经跨入USB领域大门了。这个时候就开始往你想要领域扩展了:底层协议:OTG/Type-C/BC1.2/PD,上层协议:ACM/ECM/NCM/RNDIS/MBIM/...
这个时候很多人还是会很迷茫,看了一堆的理论,跟Driver 怎么挂钩的呢?其实中间还缺了两个重要的环节:
1. USB 硬件是如何套用USB 协议的的?软件驱动是如何按照USB 协议去控制硬件的?
2. USB 背后的DMA 是如何跟USB MAC 通信的?软件又是如何控制DMA的?
这些都是跟具体IP 提供商的具体实现有关,而普通的驱动开发者往往对这些都是雾里看花。后续有机会详细给大家介绍。