1.3 基于OHCI的USB主机 —— 总体构架

转载 2012年03月22日 09:40:31
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/228153
在我们的系统中,USB主机就是用来对U盘进行读写操作,因此在设计和构架上就完全围绕这个目的而进行。整个系统所涉及到的内容比较多,按照嵌入式系统开发的一般原则,采用层次化的体系结构,将系统按照功能划分为若干层次,每一层完成相应的功能。
根据系统的业务需要,系统总体构架如下:
9 业务应用层
8 文件操作API层
7 文件系统层
6 U盘操作命令接口层
5 UFI命令层
4 USB设备管理层
3 OHCI软件接口层
2 寄存器读写接口层
1 硬件层
这是一个分层的结构,每层完成自己的功能,层与层之间都是通过接口完成,基本上上层应用都只依赖于下一层,对于个别层的功能实现需要依赖其下的2层,这是考虑实现的方便。
下面对每一层的功能进行说明:
1、 硬件
这是系统最底层,直接完成USB协议处理的硬件部分。
2、 寄存器读写接口
AM9200支持标准的OHCI接口,提供了访问OHCI寄存器的指针(pUhp)和数据交换区(HCCA),本层对该指针和数据交换区的访问进行封装,对外屏蔽了寄存器读写的细节。以后如果移植到非OHCI的系统上,则可以保持在接口不变,对该层进行重新编码即可。
3、 OHCI软件接口
根据OHCI标准,数据传输都是通过端点描述符(ED)和传输描述符(TD)这两种数据结构来完成的,在进行传输之前需要对ED和TD进行相应的设置,才可以保证数据传输的正确性,本层对ED和TD的操作进行了封装,提供基于OHCI的数据传输接口。
关于ED和TD的详细介绍请参考OHCI规范《Open Host Controller Interface Specification for USB》。
4、 USB设备管理
根据USB标准,USB设备都需要提供设备描述符、配置描述符、接口描述符和端点描述符等信息,本层代码提供了取得这些描述符的命令。
另外,本层还将这些取得描述符的命令组合起来,完成了USB设备的枚举和检测。
5、 UFI命令
根据《Universal Serial Bus Mass Storage Class Bulk-Only Transport》和《Universal Serial Bus Mass Storage Class UFI Command Specification》规范,完成BulkOnly协议的UFI命令,提供扇区读写命令给上层。
6、 U盘操作命令接口
一方面封装UFI命令层,提供以扇区为单位的磁盘读写命令,譬如diskRead()、diskWrite()等函数,另一方面,调用UFI命令完成U盘枚举和检测,确定逻辑0扇区的编号,为构建文件系统奠定基础。
7、 文件系统
完成文件系统初始化,得到相关的参数,提供目录查找、簇操作等接口给上层。
8、 文件操作库函数
仿照C语言的标准文件库函数,提供一套便于上层业务应用所使用的API函数库,包括文件打开、关闭、读写和定位等。
9、 业务应用
这就是业务逻辑层了,也就是根据接收的计费信息调用相应的文件操作库函数,完成话单保存的功能。
采用这样的层次结构,系统具有良好的可维护性和扩展性,只要CPU支持OHCI标准,则本系统就可以不用修改直接使用,如果CPU不支持OHCI标准,则需要将OHCI层的代码进行修改,保持上层的调用接口不变,就可以完成系统移植了。
如果需要扩展支持更多的USB设备,则保持OHCI层基本不变或适当扩展(目前的OHCI层代码只支持控制和批量传输,不支持同步和中断传输),添加新的驱动以及上层应用就可以了。
在这一篇文章里,我对我们的系统进行总体上的说明,这是为了避免一上来就阐述各种技术细节,导致一叶障目,不见泰山。在本系列文章中,所有的代码都是按照这个构架原则来编写的,记住这个构架,对于理解代码会有很大的帮助。

基于OHCI的USB主机 —— 总体构架

写在前面的话:这篇文章原来发表在我的51CTO技术博客里,最近把CSDN这边的空间恢复了,于是把那边的文章搬过来。 在我们的系统中,USB主机就是用来对U盘进行读写操作,因此在设计和构架上就完全围绕这...
  • tywali
  • tywali
  • 2009年11月30日 19:59
  • 619

USB主机控制器驱动——OHCI分析

首先,整个驱动框架的开始,是基于 platform 平台总线的。 struct platform_device s3c_device_usb = { .name = "s3c2410-ohci...
  • lizuobin2
  • lizuobin2
  • 2016年07月18日 22:34
  • 4459

3.3 基于OHCI的USB主机 —— OHCI(HCCA)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/238666   ...
  • landishu
  • landishu
  • 2012年03月22日 09:57
  • 242

3.1 基于OHCI的USB主机 —— OHCI(端点)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/236950 ...
  • landishu
  • landishu
  • 2012年03月22日 09:54
  • 315

基于OHCI的USB主机 —— OHCI(基本流程)

根据上面的介绍可以发现,通过USB端口进行数据收发的主要工作就是构建ED和TD列表。其中ED列表控制数据的传输方向,TD列表完成具体的数据打包和传输。按照OHCI规范,ED和TD列表都是可以在使用过程...
  • tywali
  • tywali
  • 2009年12月07日 18:02
  • 786

基于OHCI的USB主机 —— OHCI(HCCA)

主机控制器通信区(HCCA)是一个256字节对齐的内存数据结构,被系统软件用于与HC进行通信,收发相关控制和状态信息。系统软件通过HcHCCA寄存器设置HCCA的地址到HC。该结构允许软件给HC的函数...
  • tywali
  • tywali
  • 2009年12月07日 10:38
  • 1466

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

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/243412 ...
  • landishu
  • landishu
  • 2012年03月22日 10:01
  • 266

基于OHCI的USB主机 —— OHCI(端点)

OHCI (Open Host Controller Interface),是康柏、微软、国家半导体等公司共同制定的一个USB主机接口规范,它提供一个更抽象的接口来完成USB数据传输工作。在OHCI规...
  • tywali
  • tywali
  • 2009年12月07日 10:37
  • 1090

基于OHCI的USB主机 —— 目录

我的《基于OHCI的USB主机》系列文章已经完毕了,我觉得需要建立一个目录,以便需要的人可以迅速找到所需要的文章。本文档的目标就是建立一个该系列文章的目录,可能还会对每个部分进行简单介绍。 第一...
  • landishu
  • landishu
  • 2012年03月22日 09:36
  • 393

基于OHCI的USB主机 —— OHCI(传输描述符)

传输描述符(TD) 传输描述符(TD)是系统内存的数据结构,被HC用于定义从端点收发数据的缓冲区。TD分为2个类型:通用TD和同步TD。通用TD用于中断、控制和批量端点,同步TD用于同步传输。使用两...
  • tywali
  • tywali
  • 2009年12月07日 10:38
  • 981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1.3 基于OHCI的USB主机 —— 总体构架
举报原因:
原因补充:

(最多只允许输入30个字)