OHCI (Open Host Controller Interface),是康柏、微软、国家半导体等公司共同制定的一个USB主机接口规范,它提供一个更抽象的接口来完成USB数据传输工作。
在OHCI规范中,最重要的几个概念是端点(EndPoint - ED)、传输描述符(Transport Descriptor - TD)、主机控制器通信区(HCCA)。其中ED负责确定传输类型(控制传输、批量传输、同步传输和中断传输)。TD确定传输参数。HCCA用于确定数据传输是否完毕。
下面对上面的概念进行说明,主要是翻译了OHCI规范的相关内容,更详细的内容请参考《Open Host Controller Interface Specification for USB》 。
端点
ED(Endpoint Descriptor端点描述符)包含了HC所使用的端点的信息,包括端点地址、传输速度和最大数据包尺寸等内容。另外ED还是TD(传输描述符)链表的锚点。在ED里保存该ED收发数据所使用的TD链表头指针。当HC处理ED并且发现一个合法的TD地址时,HC根据ED内标明的端点以及TD的地址完成数据传输。
在USB的规范中规定了4种数据传输类型:控制传输、批量传输、同步传输和中断传输。在OHCI中对应这4种传输类型有4个传输ED列表,主要使用控制寄存器(HcControl)和命令状态寄存器(HcCommandStatus)进行控制。
控制和批量传输的ED组成列表,每个ED下面带着需要进行处理的TD,ED包含端点所允许的最大的包大小,控制器硬件完成包的分割。每次传输后都会更新指向数据缓冲区的指针,当起始和终止指针相等时,TD就释放到完成队列(done-queue)。下图是一个典型的链表结构图。
在OHCI中,每一帧的时间被分为3块,首先处理批量和端点列表,这段时间由HcPeriodicStart寄存器的设置来控制,然后处理周期性列表(中断和同步列表),处理完毕如果还有时间,则继续处理批量和端点列表,如下图:
对于控制和批量传输来说,控制端点比批量端点有更多的总线处理机会。每处理1个批量端点就需要处理N个控制端点,这个N:1的比例叫做控制批量服务比例。HCD通过HcControl寄存器的ControlBulkServiceRatio字段来设置比例,比例的范围从1:1到4:1。
HC强制按照控制批量服务比例进行处理,而不考虑相应列表中的控制和批量ED的数量。如果只有1个控制ED在控制列表中,而控制批量服务比例为4:1,则在批量ED被服务之前,该控制ED被服务4次。如果控制或批量列表中没有ED,HC就会跳过对应的列表,而立刻处理其它的列表并且完成需要的ED数量。HC会根据控制批量服务比例继续检查空列表,如果有新的ED,就按照该比例进行处理。

本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/236950,如需转载请自行联系原作者

基于OHCI的USB主机 —— OHCI(端点)相关推荐

  1. 基于OHCI的USB主机 —— OHCI(设计思路)

    在OHCI层,主要完成如下功能: l  通过控制端口读写数据(包含SETUP.DATA.STATUS等3个TD): l  通过控制端口发送设置命令(没有DATA的TD): l  通过批量端口读数据: ...

  2. 基于OHCI的USB主机 —— 前言

    很久以前,大概是前年年底吧,因为公司项目的要求,我做了基于OHCI的USB主机访问U盘的程序,用来把系统中产生的一些数据保存到U盘中.本来做的时候就想把其中的一些经验体会发表的,可是工作实在是太忙,而 ...

  3. 基于OHCI的USB主机 —— 结束语

    从去年11月份开始连载的<基于OHCI的USB主机>系列总算告一段落了,到UFI命令层为止,所有USB主机的底层处理就结束了,再上面就是磁盘读写.文件系统.文件读写和应用系统了.这些上层应 ...

  4. 基于OHCI的USB主机 —— 寄存器(初始化)

    硬件初始化的操作比较简单,主要代码从例程<AT91RM9200-BasicUHP>中抄过来,另外增加了中断向量初始化的部分. 在AM9200中,USB的中断是基于AIC中断的,因此要设置对 ...

  5. 基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍

    USB Mass Storage Class Bulk-Only Transport Microsoft公司至Windows98后,USB主机 都支持Bulk-Only标准,所以现在的大容量存储类设备 ...

  6. 基于OHCI的USB主机 —— 寄存器(其它)

    USB端口关电 对USB端口进行关电处理的目的主要有两个,一是安全拔下U盘,防止带电插拔造成数据丢失或错误,另一个是为了再次开电,对U盘内部程序进行复位. /**  * 断开USB端口的供电  */ ...

  7. 基于OHCI的USB主机 —— USB设备常量定义

    USB设备枚举过程中使用到的常量定义如下: /*-------------------------------------------------------------------------  * ...

  8. 基于OHCI的USB主机 —— UFI命令监视代码

    在调用完上面的UFI命令后,ufiCmdRunning.state就被设置为UFI_STATE_BEGIN态,在主循环中调用本函数,用来判断UFI命令是否执行完毕,以及是否执行成功. /**  * U ...

  9. 基于OHCI的USB主机——UFI查询命令(Inquiry)

    查询命令(INQUIRY)请求获取UFI设备参数的信息.他被用作主机上的驱动器访问FUI设备的配置,特别是在接通电源和硬件复位之后使用.命令内容如下表:  位 字节 7 6 5 4 3 2 1 0 0 ...

最新文章

  1. var let const声明变量的区别
  2. 【深入Java虚拟机JVM 01】Java发展与展望概述
  3. Jsonp 跨域请求实例
  4. [JUC-4]ThreadPoolExecutor源码分析
  5. 大学计算机基础英语翻译,大学计算机基础 教学课件 978 7 302 21247 8 第7章 常用工具软件.pdf...
  6. class触发后让另一个class加样式_Bootstrap的按钮组样式
  7. apple组织名称是什么_什么是Apple Macintosh?
  8. 刷卡读取信息自动录入表格_人事自动化管理系统.xls
  9. 一般柱子与柱子的距离_建筑中柱子之间的距离多少为好?
  10. 8、第六 -面向对象高级语法-异常处理
  11. 网易云 NeteaseCloudMusicApi 码云下载
  12. js pug 代码_PUG 系列 | 第二课 JS 代码混合、包含引入
  13. Insert键与vs黑标
  14. COMP SCI 4094/4194/7094 - Distributed Databases and Data Mining
  15. linux sht11驱动,SHT11.h下载 温湿度传感器SHT11的驱动程序,提供了外界调用接口函数...
  16. Android View部分消失效果实现
  17. 服务器 消息 209,服务器: 消息 1767,级别 16,状态 1,行 1 外键 'FK__SC__Sno__47DBAE45' 引用了无效的表 'Student'。...
  18. vue项目H5调起高德或百度地图手机应用,或调起高德百度网页版实现导航功能(已实现)
  19. Android接电话流程、Phone来电过程、phone上层来电话解析 接通电话
  20. Pico四通道汽车诊断示波器柴油车套装(型号:PQ179)

热门文章

  1. 苹果谷歌脸书大佬前往游说!欧盟将首次对AI进行监管
  2. 引导直觉解决数学猜想难题,DeepMind登上《Nature》封面
  3. 元宇宙不是下一代互联网,而是人类群体思维空间或梦境世界的具现
  4. 防止被算力“锁死”,人工智能进化急需革命性算法
  5. 科学界5个终极难题,如果有一个被解决,人类文明将升级
  6. 现代物理学7大经典问题,你能理解几个?或许一个都不能理解
  7. 11款新品,一切为了落地!商汤:普惠AI的时代,来了
  8. 不只是华为/阿里/百度/小米/京东,AIoT已然成为资本与新兴企业都认可的赚钱方向...
  9. 智能硬件这5大领域竞争升级,将迎发展新模式
  10. Uber致人死亡或为自动驾驶肇事责任 没有判例可循