Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27033
  • 博文数量: 13
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 116
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-08 10:54
文章存档

2010年(13)

我的朋友
最近访客

分类: 嵌入式

2010-08-20 23:04:41

   大多数人熟悉USB是从USB设备开始,比如U盘,移动硬盘,对于USB Host controller,大概也就只有做嵌入式技术开发的人员才会接触到。闲言小叙,下面就我接触到的USB只是进行叙述。
   现在的USB Host controller工分为三种,EHCI,OHCI和UHCI,这个是硬件生产厂商联合制定的。EHCI支持USB2.0设备,而OHCI和UHCI则是支持USB1.1设备的。所以,当你检测你的硬件的时候,通常会有EHCI和UHCI;而对于OHCI来说,一般用在嵌入式设备上,它的特点是硬件电路比UHCI复杂,但驱动相对简单。在Linux下,一般的USB配置是EHCI+UHCI,这样,无论是2.0的设备还是1.1的设备,插上都能用。
   对于主机端来说,处于最下一层的就是USB Host controller,所以,在这之上是HCD,也就是USB Host controller的驱动程序,然后才是设备驱动程序,在Linux系统中,中间还有个USB core方便开发人员进行开发。
    我门知道主机和设备间是通过USB电缆进行通信的,因此在主机和设备的最末端,又一个叫做SIE(串行接口引擎)的东西将数据来回发送,在主机端,SIE集成在USB Host controller中,不仅如此,USB Host controller还集成了root hub,所以一般情况下,你的设备如果直接插在电脑上,那么接的就是root hub上。
   USB Host controller的主要作用包括一下几个方面:
(1)状态处理:USB Host controller需要向上层报告自己的状态变化,也就是说USB Host controller自身会产生好几种状态,对其处理是USB系统。Host controller的状态和root hub以及USB总线上的状态是分不开的,它的任何的状态的变化对于设备来讲都是可见的,因此,设备和Host controller状态变化要一致。设备端resume是通过resume信号,而主机端是由Host controller报告一个resume event,然后根据操作系定义机制进行唤醒。
(2)串行化/解串:顾名思义,USB总线是串行总线
(3)(微)帧的产生:高速设备每125us产生一帧,全速、低速设备1ms产生一帧,每一帧中都包含有许多个事务(事务的类型尤其优先级决定),每帧中最多可以处理3个事务,事务的处理必须连续,也就是任何一个事务都不能跨帧。Host controller在其正常操作的状态下,必须周期的产生SOF,(这个正常的状态我的理解是Host controller的速度是确定的,并且配置为可以正常工作),如果Host controller不产SOF了,说明它不工作了,或进入节点状态了
(4)协议引擎:必须支持USB标准中的指定的东西。
(5)传输错误的处理:在USB规范中,对错误有明确的定义,因此在有错误产生时,任何Host controller处理的方式或者说是行为都是一样的。
(6)remote wakeup:所有的主机控制器都应该有将总线(bus)挂起以及唤醒的能力;
(7)root hub:扩展接口数量的设备
(8)主机系统接口:
 
阅读(1596) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~