tiny4412 linux-4.2 移植(七)USB 2.0 host框架(1)phy

本文详细介绍了在Exynos4412平台上,USB 2.0 Host模式下的PHY、HCD、HUB和URB框架。重点讨论了USB PHY的UTMI接口,以及如何通过struct phy、struct usb_hcd、struct usb_hub和struct urb来管理USB控制器。内容包括USB控制器、PHY、集线器和端口的概念,以及它们在系统中的作用和相互关系。
摘要由CSDN通过智能技术生成

简介

本文主要讲述usb 2.0 host 中struct phy、struct usb_hcd、struct usb_hub、struct usb_port以及struct urb之间的关系。hcd方面只讲述echi,不讲述ohci。理解了它们的关系有助于我们移植usb驱动。

概念

先来理清几个概念:
1、usb controller:USB主机控制器。CPU通过主机控制器跟usb设备进行通信。CPU把要做的事情告诉主机控制器,主机控制器帮CPU把事情完成后以中断的形式告诉CPU。主机控制器对应的驱动叫做usb hcd,linux使用struct usb_hcd描述USB主机控制器。
2、usb phy:usb物理层。它负责最底层的信号转换,类似网口的phy。他有有两种接口,一种是ULPI,一种是UTMI。UTMI是USB2.0的高速设备检测协议,它需要具备能够检测设备是高速端口还是全速端口的功能,并以作相应的速度模式进行工作。从4412的usb框架图可以看出4412芯片上的phy使用的是UTMI。如图1 所示。但是4412的ehci主机控制器并不需要usb phy,只需要phy相关的就行。
3、usb hub:集线器。4412芯片内有一个root hub(如图3),它属于EHCI Host Controller,可以看出它具有3个usb port。所以在注册EHCI相关驱动后会去注册usb device(usb_bus的root_hub),由于它是一个root_hub所以会调用root_hub的hub_probe。这里不止有一个hub哦,因为外挂的usb芯片4604也是属于一个hub,所以当检测到4604之后,会再生成一个hub。
4、usb port:usb端口。4412的root hub(如图3)有3个port,一个给了microUSB,一个给了usb4604(外挂usb usb芯片),一个没有接线。这个usb port的数量是通过hub的描述符获取的。
在这里插入图片描述
图1 usb phy UTMI功能模块描述图
在这里插入图片描述
图2 4412 USB System Block Diagram
在这里插入图片描述
图3 4412 USB 2.0主机控制器模块单元

框架图

以下框架图描述的是Exynos4412平台usb2.0 host模式下的程序框架,并非物理框架和数据流动框架。

在这里插入图片描述

1、phy层
phy有四类:device、host、hsic0、hsic1。由exynos4x12_phy_id和exynos4x12_phys指定。4412实例化了4个struct phy,存放在struct samsung_usb2_phy_driver的成员instances[0]成员中。hcd层通过exynos_ehci_hcd结构体可以访问到stuct phy。phy还提供了phy_ops,通过它可以设置对应链路为device模式,host模式,phy时钟,还有使能/失能hsic0、hsic1。
2、hcd
hcd层以stuct usb_hcd为核心。它主要有两个功能,一个是通过ehci_hcd去操作phy层,一个是通过hc_driver去操作上层传递下来的urb数据包。
3、hub层
hub层以struct usb_hub为核心。它主要负责检测端口状态,处理插入/拔出的设备,创建/删除usb_device,对于新插入的设备会去匹配他的设备驱动程序,然后调用相关probe函数。
4、urb层
urb是一种用来描述与USB设备通信所用的基本载体和核心数据结构,与网络设备驱动中的sk_buff结构体类似。

接下来分析代码,一些可以通过框架图看出来的指针关系我不会特地去列出他们的赋值代码。

PHY

首先来看下phy的相关dts

# exynos4.dtsi
sys_reg: syscon@10010000 {
   
			compatible = "samsung,exynos4-sysreg", "syscon";
			reg = <0x10010000 0x400>;
};
exynos_usbphy: exynos-usbphy@125B0000 {
   
    compatible = "samsung,exynos4210-usb2-phy";
    reg = <0x125B0000 0x100>;
    samsung,pmureg-phandle = <&pmu_system_controller>;
    clocks = <&clock CLK_USB_DEVICE>, <&clock CLK_XUSBXTI>;
    clock-names = "phy", "ref";
    #phy-cells = <1>;
    status = "disabled";
};
# exynos4412.dtsi
&exynos_usbphy {
   
    compatible = "samsung,exynos4x12-usb2-phy";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值