开发者社区> 余二五> 正文

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

简介:
+关注继续查看
在我们的系统中,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层代码只支持控制和批量传输,不支持同步和中断传输),添加新的驱动以及上层应用就可以了。
在这一篇文章里,我对我们的系统进行总体上的说明,这是为了避免一上来就阐述各种技术细节,导致一叶障目,不见泰山。在本系列文章中,所有的代码都是按照这个构架原则来编写的,记住这个构架,对于理解代码会有很大的帮助。





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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
28785 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20536 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23564 0
+关注
20378
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载