[OHCI]架构
2015-10-21 00:20
323 查看
简述
OHCI是嵌入式使用较多的一种USB的Host Control架构。其硬件实现了许多符合USB规范的功能,因此软件上,特别是嵌入式领域,通过对其register进行一些初始化,以及相对较少的操作,就能实现USB通信。OHCI所处位置
数据传输类别
这里和usb协议的是一样的:Interrupt和Isochronous传输都是周期性的,而Control和Bulk都是非周期性的。这里的周期性的,觉得是数据在bus上,固定时间内进行数据传输。
Control和Bulk好理解,就是传输一些信息,只是Bulk一次传输的数据块要大。
Interrupt方式,其实也是Host在周期性的侦听来自某Device的数据传送请求。而Isochronous应当是类似于基于连接的传输,不停的传送数据。
数据结构
接口的通信的基本构建块,是ED(Endpoint Descriptor)和TD(Transfer Descriptor)。- Endpoint Descriptor:包含了Host Controller要与之通信的Endpoint的必要信息;
- Transfer Descriptor:包含了要传输的data packet的必要信息。
可以用一个list结构来表示其ED, TD:
Head Ptr的管理
看来对于4种Transfer Type,也分为四种Endpoint,对不同类型的Endpoint,是在不同的List中进行管理的。Bulk和Control的ED List的Head Ptr由HC寄存器来维护。
Interrupt的ED List的Head Ptr在HCCA中来维护。
Isochronous的ED List是没有单独的Head Ptr的,下一个Isochronous的ED直接链接在上一个Interrupt ED的后面。
Interrupt ED的Head Ptr看来特殊点,下面说明下:
Interrupt ED List的Head Ptr
有32个interrupt Head Ptr,使用哪个interrupt Head Ptr是由Frame Counter的最后5 bits的值来决定HCCA中的interrupt数组的某个interrupt Head Ptr的。有32个interrupt ED的框架如下:树形结构组织interrupt ED,而Head Ptr则作为叶子节点,越靠近上部polling interval越小。
如下是一个interrupt ED调度的例子:
这个图根据不同的polling interval将ED分在不同层。不过依据前面的Typical List Structure的图,Head Ptr在叶子节点,而Head Ptr又是List的Head,spec只说将会把下一个存在的ED添加到List,但是如何添加呢,就这个例子来看,应当是0–31的Head Ptr每个都维护一个List才对,而其后的ED排列顺序应当都不一样,具体如何做?另外维护这么多是否会浪费,好处是什么?
Host Controller Driver(HCD)
主要用来管理Host Controller的操作。直接操作Host Controller的寄存器,在HCCA中建立interrupt ED list。带宽分配
对于periodic endpoint,HCD会分配可用的带宽,若没有足够的带宽了,那就会拒绝新的periodic endpoint的接入。另外在每个Frame都预留带宽给Buld和Control传输。其机制如下图:
List管理
HCD将ED添加到对应的List,或从中移除。HCD也负责TD添加到对应的ED queue,不过移除一般由Host Controller来做,除非有错误发生时,才由HCD来移除。Host Controller(HC)
USB状态
UsbOperational;UsbReset;
UsbSuspend;
UsbResume.
Frame管理
HC会跟踪目前的Frame Counter和Frame period,如前面的带宽分配所示,那些时机都是由HC来决定的。List处理
前面的HCD已经创建好ED List, TD queue。对于Interrupt和Isochonous传输,HC根据当前的Frame选择一个Head Ptr开始,然后会遍历所有ED,直到每个ED的从第一个TD开始的发送都被试过了一遍(有点拗口,后续再确认具体做法)。
对于Bulk和Control传输,HC从其单独的Head Ptr开始,接着上次的地方继续,如果到达list末尾,再回到Head去找。
当一个TD传输完成,不管成功或失败,这个TD都会被移到一个叫Done Queue的队列中。
相关文章推荐
- 软件架构师应该知道的97件事之概括1-15
- 推荐的讲解算法的网站、好博客:
- php防止网站被攻击的应急代码
- 经典算法和OJ网站
- 天下数据支招应对网站频频遭受恶意攻击
- 大型网站的日志管理与分析
- 网站推荐
- 图片与素材网站
- lvs+heartbeat+ldirectord实现Director的高可用
- [转] iOS --- 应用架构谈之二: View层的组织和调用方案
- [笔记]架构探险-从零开始写JavaWeb框架-1. 之搭建轻量级mvc框架
- 提升网站性能开发的10个技巧
- Android和Java好的学习网站
- 优秀学习网站一网打尽(想起来记录一下吧)
- 应用程序框架实战十三:DDD分层架构之我见(转)
- iWebShop -- 代替ecshop 的开源电子商务网站系统
- iOS开发工程架构设计
- 三层架构
- Servlet学习笔记--生成网站表单验证码
- 团队博客作业Week4 --- 学霸网站--NABC