基于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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Linux C语言 SoC
嵌入式linux总线设备驱动模型分析
嵌入式linux总线设备驱动模型分析
32 1
|
10月前
|
存储 Linux 开发者
【Linux学习笔记】设备驱动模型详解——总线、设备、驱动和类
设备驱动是计算机系统中的重要组成部分,它们允许操作系统与硬件交互。设备驱动模型是一种通用的抽象框架,用于描述操作系统如何管理硬件设备。这里我们将介绍设备驱动模型中的四个关键概念:总线、设备、驱动和类。
487 0
RK3399平台开发系列讲解(高速设备驱动篇)6.61、USB如何模拟HID设备
RK3399平台开发系列讲解(高速设备驱动篇)6.61、USB如何模拟HID设备
121 0
RK3399平台开发系列讲解(高速设备驱动篇)6.61、USB如何模拟HID设备
RK3399平台开发系列讲解(高速设备驱动篇)6.51、PCI总线信号定义
RK3399平台开发系列讲解(高速设备驱动篇)6.51、PCI总线信号定义
105 0
RK3399平台开发系列讲解(高速设备驱动篇)6.51、PCI总线信号定义
RK3399平台开发系列讲解(PCI/PCI-E)5.53、PCIE RC侧 地址映射
RK3399平台开发系列讲解(PCI/PCI-E)5.53、PCIE RC侧 地址映射
159 0
RK3399平台开发系列讲解(PCI/PCI-E)5.53、PCIE RC侧 地址映射
|
Linux API 数据处理
USB协议架构分析
USB协议架构分析
|
Web App开发 缓存 网络协议
STM32入门开发: LWIP网络协议栈移植(网卡采用DM9000)
STM32入门开发: LWIP网络协议栈移植(网卡采用DM9000)
801 0
STM32入门开发: LWIP网络协议栈移植(网卡采用DM9000)