USB技术浅析( 三 )


 
以下作为一个例子:

USB技术浅析

文章插图
 
2. DisplayPort如前文中所述,typec拥有4对差分信号,上/下行各2对 。USB-IF推出了一个Alternate Mode交替模式,支持将USB Type-C线缆转化为其他用途,而DP交替模式就是第一个应用,它可以将其中一些或者全部差分信号通道转化为DisplayPort信号通道,如果还有剩余的差分信号,则可以继续用于USB 3.1高速数据传输 。
有了DP交替模式,USB Type-C的实力将会大增,因为它让平板电脑、笔记本产品通过一个迷你接口实现高速数据传输、视频输出、电力供应等功能,带来类似手机那样的“单接口、多功能”的可能性,这比之前通过USB接口输出视频信号的方案更加强大 。
以下作为一个例子:
USB技术浅析

文章插图
 
三、USB3.0 OTG在usb2.0时代,为了满足移动设备单usb口既可以为主也可以为从的需求,出现了otg功能 。Usb2.0的otg是通过micro或miniusb座子上的第5个id pin上的电平来完成识别,当id pin的电平为高,则为从机,当该电平为低时,则为主机 。
我们市面上买的otg线,内部电路就是把id pin与GND线相接,以实现otg线插入后,手机可以作为host端
在usb3.0中,id pin的功能同样被强大的typec所取代,主从的识别将通过cc来识别 。同时主从双方也可以通过cc的通讯来切换角色 。
在usb2.0中,供电方与受电方和设备的主从关系是绑定的,只有host可以给devices供电 。usb3.0中则完全不同,两者完全独立,在做host的同时,依旧可以接受供电 。解决了“手机没电时,就无法插usb设备”的问题
同时在硬件上,我们需要明确usb 3.0 otg的组成部分
  • usb控制器
控制器负责将处理通讯中,数据的校验,分发,异常处理等主要工作 。在usb2.0中我们有诸如“ehci,uhci,ohci,dwc2”等多个不同的控制器ip 。其中ehci是同时兼容usb1.0,usb1.1,usb2.0等功能,而uhci,ohci则只能支持到1.1。dwc2则是拥有otg功能的控制器
在usb3.0中,控制器则只剩了xhci,与dwc3,同样的dwc3也是拥有otg功能 。
  • usb phy
Usb phy主要负责实际的物理信号 。将串行的usb数据转换成控制器所需要的数据格式 。同时,我们usb信号质量也与phy有关,在一定程度上phy可以改善usb眼图,但主要还是靠usb走线
  • typec phy
与usb phy功能类似,只不过处理的是cc pin上的信号 。cc信号也可以用独立的芯片,如fusb302等芯片来处理 。
1.EXTCONExternal Connectors是usb用于状态通知的驱动,当phy收到中断,处理完usb状态后,通过extcon驱动,广播到已监听该extcon的所有驱动
使用devm_extcon_register_notifier来注册监听usb状态变化
使用devm_extcon_dev_register来注册管理usb的状态变化
以下host的识别作为一个例子:
USB技术浅析

文章插图
 
2.USB3.0 HOSTUsb3.0相比于usb2.0,在usb core层,驱动并没有太大变化,仍旧与原来的流程相同,usb代码的核心数据结构仍然是URB,URB的使用方法也与原来相同:
USB技术浅析

文章插图
 
区别在于usb hcd之后的代码,xhci中,核心的数据结构为TRB,每一笔数据以一个trb来做交换,在xhci.c中xhci_urb_enqueue进一步判断数据类型,并对stream id以及burst做判断,并提交到控制器中
3. USB3.0 OTG(1) ConfigFS在《带你遨游USB世界》中,我们介绍了Android.c的gadget配置方式,在早期时,linux的gadget驱动都是固定功能,即开机后usb功能就已固定,无法改变 。而这样的功能,明显无法满足移动设备对于otg功能的需求,因此android推出了android.c和composite.c的复合功能的gadget驱动 。
在此之后,android.c的方式沿用了很久,直到linux更新了新的gadget驱动----configfs子系统,满足了移动端的所有需求 。相比于android.c,configfs更加灵活,因此替代了android.c 。
在新的linux代码中,configfs基本替代了android.c,因此我们对configfs做一定的介绍
启动流程:
USB技术浅析

文章插图
 
启动后,上层UsbDeviceManager.JAVA通过setprop sys.usb.config的属性来控制gadget功能,例如:
USB技术浅析

文章插图
 
这其中每个绑定的功能都应gadget中的一个驱动,如mtp对应drivers/usb/gadget/function/f_mtp.c


推荐阅读