USB技术学习向导
USB技术博大精深,学习起来也比较麻烦。但如果我们理清知识层次结构,也能抓住重点,快速解决问题。
USB知识体系复杂,最直接的感受就是我们零散的知识点,但这些知识点又无法连接起来,熟悉又不熟悉,所以感觉就是似懂非懂。
本人结合自己的USB学习经验,总结如下:
USB按实际的知识层次,可分为:
- 硬件层面
- 数据链路层面
- 令牌、事务层面
- 传输层面
- 应用层面
有点类似IOS的七层模型,从硬件到软件,从底层到上层。
USB硬件层面
USB硬件主要是USB芯片的选型,低速、全速、高速、超高速的硬件电路原理。这些一般都是公版电路,照抄即可。
对于超高速可能需要考滤高频的干扰之类。
但于对非从事硬件的人员来说,至少从硬件电路上区分低速,全速、高速和超高速电路,上拉下拉电阻的位置和电阻值。
对于从事硬件的人来说,你得了解其D+/D-内部电路,就如同了解运算放大器的内部电路一样熟悉。了解在从全速到高速识别过程中800mv到400mv的原理。
无关乎数字电路模拟电路,你反正得了解各个器件的内部模块图,相关的接口参数,才来设计出比较稳定的外部电路。
这方面你得有非常扎实的模电基础,除了课本上的知识外,看看《晶体管电路设计》这本书是不错的参考书籍。
数据链路层
这方面其实主要是逻辑分析仪、FPGA工程师关注的比较多。
我们需要画时序图,了解编码规则及为什么要进行编码。
这方面可以通过一些逻辑分析仪抓包,当然一个好的示波器也可能是必备的,信号质量上得了解眼图之类。
如果很你厉害,也可以徒手分析时序图,当然这方面可以借助工具来学习。比如力科的工具就有令牌的逻辑图。这方面多看多见,也是很不错的。另外也得了解令牌和事务的概念,不然你怎么组织数据的收发。
当然这是建立在你在学习USB IP核的前提下来搞的,但是大部的芯片是有IP核的,也许我们只处理相关的中断和FIFO数据搬迁即可。但是你也可通过处理器的IO或者FPGA的IO的模拟相关的时序逻辑,来增加自己对这方面的理解。
令牌、事务
这里时查USB问题用的最多的地方。话不多说,直接整USB总分析仪即可。
常见的USB总分析仪有南京沁恒的,XTOOL出的USB Packet Viewr和国外的力科的。
总分析仪有最高支持的协议,比如最高支持到2.0高速的,有的却是可以支持到3.0,不同的规格价格差距很大。
USB为了实现USB的数据四种传输方式,有大量的令牌及其给合的事务。熟悉和了解他们之间的关系,很重要。
传输层
这方面涉及的主要是四种传输方式、USB标准请求、基于USB基础的类请求即特定类请求。
这方面可以通过BUSHOUND等系统层的抓包工具来学习,这里会了解各种USB描述符和请求。
我们也可以使用usbtreeviewer用来分析USB设备的描述符,当然本人也在这方面搞了很多的特定工具,比如HIDReportParser,USB标准请求及描述符在线分析、UVCStreamComandParser等。
USB应用层
这里包括2方面:
第一是USB的各种类规范,如UVC,UAC,CDC,HID之类的,重点学习其特有的描述符和相关的特定类请求。
第二系统层的接口和驱动开发。系统自速的驱动如HID的,winusb,开源libusb等。还有就是我们自己开发的USB调试辅助工具。