usb linux 系统 (4)

1、  EHCI控制器

       EHCI的基本概念

OTG成功的发现了设备并把控制器切换到相应的状态,如果这种状态是HOST状态,那EHCI控制器就该上场了。

EHCI算是后起之秀,到了USB2.0以后才提出来的。EHCI主要是为了支持高速设备,如果一个控制器还要支持低速和全速设备,还需要有UHCIOHCI的支持。

USB2.0中与EHCI配合使用支持低速和全速设备的OHCI/UHCI叫作兼容控制器,下面这张有名的图很好的描述了USB2.0主控制器的组成。

clip_image002

可见,一个号称支持USB2.0的控制器很可能不止一个主控制器,除了必不可少的EHCI之外,很可能还会有OHCI/UHCI等来辅助处理低速设备的数据传输。如果只有EHCI控制器又想支持低速设备呢,那就需要能够支持(Transaction Translator)事务翻译的HUB来配合了,ECHIHUB之间通过分割事务(一种数据传输方式)来处理低速和全速等设备。

主机控制器的初始化:   

当系统起动时,主控制器枚举,为EHCI寄存器分配一个基址,设置 FLADJ寄存器一个指定值 ,当初始化电源或 HCReset寄存器时,寄存器都初设置成默认值,如下下所示,当硬件重置后,仅有操作系列寄存器不是默认值

Operational Register Default Value (after Reset)

USBCMD 00080000h (00080B00h if Asynchronous Schedule Park Capability is a one)

USBSTS 00001000h

USBINTR 00000000h

FRINDEX 00000000h

CTRLDSSEGMENT 00000000h

PERIODICLISTBASE Undefined

ASYNCLISTADDR Undefined

CONFIGFLAG 00000000h

PORTSC 00002000h (w/PPC set to one); 00003000h (w/PPC set to a zero)

 

 

为了初始化EHCI主控制器,系统软件操作如下:

1)在所有的接口数据结构创建后,设置 CTRLDSSEGMENT寄存器为 4-Gigabyte模式。

2)写一个合适的值到 USBINTR寄存器,使能合适的中断。

3)向 PERIODICLIST BASE写入周期调度链表的基址。如果周期调度链表没有可调度的数据,将其链表成员的 T-Bits设置 为1

4) 设置USBCMD寄存器,指定中断处理程序入口,调度链表的长度,设置 Run/Stop 位来控制调度是否开始。

5)向 CONFIGFLAG寄存器写1, 查找USB主控制器由几个控制器(一个EHCI和零个以上的OHCH/UHCI)组成。

经过以上的操作,整个USB2.0主控制器(EHCI和兼容控制器)就可以工作了,端口(这里的端口和设备的端点的概念有区别,主要是指EHCI/OHCI/UHCI的数据端口)寄性器报告系统的连接状态。

即然一个USB2.0是由EHCI和几个兼容控制器组成,那这几个控制器是怎么配个的呢,系统软件又应该如何控制它们呢。这就涉及到一个路由(route)的问题。这个路由和网络上的路由概念并不多,一个主机上有几个网卡,数据要从正确的网卡传出去,不至于迷路,就需要路由算法。USB主控制器也有这个问题,主控制器可能是一个EHCI和几个OHCI/UHCI组成,数据是怎样找到合适的端口并传送出去呢。

 

clip_image004

所幸的是,EHCI的规中对此有要求,硬件完成了大多数的工作,系统软件是需要作一下简单的控制。

EHCI和兼容控制器有自己的状态和独立的寄存器,每一个传输都可以通过路由逻辑选择一个适当的控制器来传输, Configured Flag ( CF)寄存器用来作路由的控制,当重置或上电后,是缺省的路由控制策略,如果系统只有兼容控制器的驱动而没有EHCI驱动,则系统只支持全速和低速设备。

 HCSPARAMS寄存器的N_CC位指示兼容控制器是由那一种(OHCI/EHCI)控制器来实现的,如果N_CC位是0,则表示没有兼容控制器,这时USB2.0-HCI系统则不能支持全速和低速的设备,如果要支持,只有通过USB2.0标准 的HUB来协助。

 

 

 

 

 

 

注:转载请注明出处 datangsoc@hotmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值