没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
基于 AT91RM9200OHCI 的 USB 主机
原著:rainman
来自
http://lancelot.blog.51cto.com
空灵
整理
QQ
:
36886052
MAIL
:
chenzhufly@126.com
2010-10-9
1 第一部分 概述 ......................................................................................................................... 4
1.1 前言 ........................................................................................................................... 4
1.2 背景介绍 ................................................................................................................... 4
1.3 总体架构 ................................................................................................................... 5
2 第二部分 寄存器读写接口 ..................................................................................................... 8
2.1 寄存器层(说明) ................................................................................................... 8
2.2 寄存器(初始化) ................................................................................................... 9
2.3 寄存器(传输) ..................................................................................................... 11
2.3.1 启动控制传输 ................................................................................................. 11
2.3.2 启动批量传输 ................................................................................................. 11
2.4 寄存器(复位) ..................................................................................................... 12
2.5 寄存器(设备连接) ............................................................................................. 13
2.6 寄存器(其它) ..................................................................................................... 14
3 第三部分 OHCI 软件接口 .................................................................................................... 15
3.1 OHCI(端点) ....................................................................................................... 15
3.2 OHCI(传输描述符) ........................................................................................... 16
3.3 OHCI(HCCA) .................................................................................................... 17
3.4 OHCI(基本流程) ............................................................................................... 18
3.5 OHCI(ED 结构) ................................................................................................. 18
3.6 OHCI(ED 结构说明) ......................................................................................... 19
3.7 OHCI(TD 结构) ................................................................................................. 20
3.8 OHCI(设计思路) ............................................................................................... 23
3.9 OHCI(自定义数据结构) ................................................................................... 24
3.10 OHCI(控制端口读数据) ................................................................................... 24
3.11 OHCI(控制端口写数据) ................................................................................... 26
3.12 OHCI(批量端口读数据) ................................................................................... 28
3.13 OHCI(批量端口写数据) ................................................................................... 30
3.14 中断寄存器初始化 ................................................................................................. 33
3.15 中断向量处理 ......................................................................................................... 34
3.16 中断处理程序 ......................................................................................................... 37
4 第四部分 USB 设备管理 ...................................................................................................... 40
4.1 USB 设备命令介绍 ................................................................................................ 40
4.2 USB 标准请求 ........................................................................................................ 41
4.2.1 USB 设备请求格式: .................................................................................. 41
4.2.2 USB 标准设备请求: .................................................................................. 42
4.2.3 描述符类型 ..................................................................................................... 42
4.2.4 特殊选择符 ..................................................................................................... 42
4.3 描述符说明 ............................................................................................................. 43
4.3.1 设备描述符: ................................................................................................. 43
4.3.2 配置描述符: ................................................................................................. 43
4.3.3 接口描述符: ................................................................................................. 44
4.3.4 端点描述符: ................................................................................................. 44
4.4 USB 设备枚举过程 ................................................................................................ 45
4.5 USB 设备描述符数据结构 .................................................................................... 45
4.6 USB 设备其它数据结构 ........................................................................................ 47
4.6.1 USB 设备信息 ................................................................................................ 47
4.6.2 Setup 包结构 ................................................................................................... 47
4.7 USB 设备常量定义 ................................................................................................ 47
4.8 USB 设备获取描述符通用函数 ............................................................................ 49
4.9 USB 设备取得设备描述符 .................................................................................... 50
4.10 USB 设备取得配置描述符 .................................................................................... 50
4.11 USB 设备设置地址 ................................................................................................ 51
4.12 USB 设备设置配置值 ............................................................................................ 51
4.13 USB 设备设置接口值 ............................................................................................ 52
4.14 USB 设备枚举 ........................................................................................................ 52
4.15 USB 设备端口特性清除 ........................................................................................ 57
5 第五部分 UFI 命令 ............................................................................................................... 59
5.1 UFI 命令概述 ......................................................................................................... 59
5.2 UFI 命令 USB Mass Storage Class Bulk-Only Transport 协议介绍 .................... 59
5.2.1 命令块数据包(CBW) ................................................................................ 60
5.2.2 命令状态包(CSW) .................................................................................... 60
5.3 UFI 查询命令(Inquiry) ...................................................................................... 61
5.4 UFI 读容量命令(ReadCapacity) ....................................................................... 62
5.5 RelAdr:设置为 0。 .............................................................................................. 62
5.6 UFI 读扇区命令(Read10) ................................................................................. 62
5.7 UFI 写扇区命令(Write10) ................................................................................ 63
5.8 UFI 数据结构 1 ...................................................................................................... 64
5.8.1 查询(Inquiry) ............................................................................................. 64
5.8.2 读容量(ReadCapacity) .............................................................................. 64
5.8.3 读扇区(Read10) ......................................................................................... 64
5.8.4 写扇区(Write10) ........................................................................................ 65
5.9 UFI 数据结构 2 ...................................................................................................... 65
5.9.1 UFI 命令块 ..................................................................................................... 65
5.9.2 命令块数据包(CBW) ................................................................................ 65
5.9.3
命令状态包(CSW) .................................................................................... 66
5.10 UFI 数据结构 3 ...................................................................................................... 66
5.10.1 UFI 命令运行状态结构 ................................................................................. 66
5.11 UFI 查询代码 ......................................................................................................... 66
5.12 UFI 读容量代码 ..................................................................................................... 67
5.13 UFI 读扇区代码 ..................................................................................................... 68
5.14 UFI 写扇区代码 ..................................................................................................... 69
5.15 UFI 读状态代码 ..................................................................................................... 71
5.16 批量端口复位代码 ................................................................................................. 71
5.17 UFI 命令监视代码 ................................................................................................. 73
6 第六部分 附录 ....................................................................................................................... 76
6.1 随便说几句 —— 关于 USB 主机系列 ............................................................... 76
6.2 基于 OHCI 的 USB 主机 —— 结束语 ............................................................... 76
6.3 AT91RM9200 的 USB 主机官方例程 ................................................................... 77
1 第一部分 概述
基于 OHCI 的 USB 主机的背景介绍与总体构架,使读者了解相应的知识背景。
1.1 前言
很久以前,大概是前年年底吧,因为公司项目的要求,我做了基于 OHCI 的 USB 主机
访问 U 盘的程序,用来把系统中产生的一些数据保存到 U 盘中。本来做的时候就想把其中
的一些经验体会发表的,可是工作实在是太忙,而且也的确有点懒,就一直拖到了现在。
做访问 U 盘的 USB 主机,网上有很多现成的例子,从硬件到软件。可是绝大多数都是使用
了专用的 USB 主机芯片,譬如 ISP1160。还有现成的详细资料,譬如周立功公司出品的《ARM
嵌入式系统软件开发实例》系列教程。但是,凡事都怕这个但是,我们公司项目偏偏不使用
USB 主机芯片,而是直接利用 ARM9200 芯片自带的接口直接来完成这个功能。
当时遇到的困难简直是多如牛毛,再加上智商又低,光是刚开始通过控制端点发送命令
的程序就调试了有几个星期。总的来说,当时调试程序大量的时间是花在了底层的代码调试,
真正到了磁盘操作、文件系统操作、业务功能实现的时候,所花费的时间反而还少了。毕竟
上层的业务逻辑写好了以后,我还通过自己编写的一个简单的单元测试程序进行了一些测试。
痛定思痛,我决定还是把调试过程中那些苦恼的日子里总结出来的一些经验分享出来,希望
也能为相关的开发人员节省一点时间。毕竟网上基于 OHCI 的 USB 主机访问 U 盘的资料实
在是太少了。
我看了看我的那个程序的设计文档,足足有 100 页,当然这里面也包含了部分的代码,
不过好在当时就写下了设计文档,可以让我的这个系列文章轻松不少。
1.2 背景介绍
使用 AT91RM9200 作为主控 CPU,利用该芯片的 USB 主机接口访问 U 盘,根据接收
的上层命令把相应数据保存到 U 盘的指定文件上。不使用额外的专用 USB 控制芯片,要求
稳定可靠,效率高,不能影响运行在该 CPU 上的其它程序。
AT91RM9200 程序加载后直接运行,没有操作系统。
以上就是我做的基于 OHCI 的 USB 主机的项目背景,这个项目是做什么的不重要,你
可以把它想象成任何项目,关键是这个项目要求使用 U 盘来保存数据。
另外,在我们的项目中没有使用任何一款嵌入式操作系统,所有的程序都运行在同一个
主循环中,自己来实现任务调度。说到操作系统,其实很惭愧,自从我开始从事嵌入式系统
的开发到现在,十几年了,从来没有用过任何操作系统,所有程序都是裸机直接运行。好处
是系统简单,一切都在自己的掌握之中,出了问题可以很快得到解决。坏处是系统的移植性
差,换了个系统有很多通用的代码需要重新编写。
不过我做的那些嵌入式系统现在看来其实都是蛮简单的,用了操作系统可能反而更麻烦,
首先得花时间学习操作系统,而且出了问题还要分析确认这问题是不是操作系统的问题,一
旦是操作系统的问题还要想办法怎么规避,算了,有那个时间项目早就做完了。
没有操作系统,我的程序更加清晰,没有了驱动程序加载、操作系统 API 调用,反而
可以更加清楚地知道如何基于 OHCI 规范实现 USB 主机。在开始讲解之前,我想读者应该
具备如下的基础知识:
1、 USB 接口基础知识;
2、 USB 层通信协议及基本工作流程;
3、 USB 主机对 USB 设备的管理流程;
4、 OHCI 标准 —— AT91AM9200 对 USB 接口的操作标准;
5、 Mass Storage Protocol —— 对 U 盘访问的存储控制协议;
6、 UFI Command - U 盘读写等操作命令;
7、 FAT16 文件系统;
以上内容有一些我会在需要的时候加以说明,更加详细的内容请自行参考相关资料。下面是
我做开发过程中参考的一些资料:
1、 《Open Host Controller Interface Specification for USB》
径
ftp://ftp.compaq.com/pub/supportinformation/papers/hcir1_0a.ex
e
说
明
OHCI 接口规范,解压后得到 Word 文档
2、 《ARM 嵌入式系统软件开发实例(一、二)》
路
径
说
明
周立功等编著,北京航空航天大学出版社
3、 《USB 2.0 应用系统开发实例精选》
路
径
说
明
廖济林编著,电子工业出版社
4、 《Universal Serial Bus Mass Storage Class Bulk-Only Transport》
USB Bulk-Only 协议规范
5、 《Universal Serial Bus Mass Storage Class UFI Command Specification》
USB UFI 命令规范
6、 《Microsoft Extensible Firmware Initiative FAT32 File System Specification》
FAT32 文件格式,基础部分与 FAT16 兼容
1.3 总体架构
在我们的系统中,USB 主机就是用来对 U 盘进行读写操作,因此在设计和构架上就完
全围绕这个目的而进行。整个系统所涉及到的内容比较多,按照嵌入式系统开发的一般原则,
采用层次化的体系结构,将系统按照功能划分为若干层次,每一层完成相应的功能。
根据系统的业务需要,系统总体构架如下:
剩余76页未读,继续阅读
资源评论
booksyhay
- 粉丝: 1080
- 资源: 77
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功