写在前面
![](/icons/67788de.gif)
话:这篇文章原来发表在我
![](/icons/67788de.gif)
51CTO技术博客里
![](/icons/67788dou.gif)
最近把CSDN这边
![](/icons/67788de.gif)
空间恢复了
![](/icons/67788dou.gif)
于是把那边
![](/icons/67788de.gif)
文章搬过来
使用AT91RM9200作为主控CPU
![](/icons/67788dou.gif)
利用该芯片
![](/icons/67788de.gif)
USB主机接口访问U盘
![](/icons/67788dou.gif)
根据接收
![](/icons/67788de.gif)
上层命令把相应数据保存到U盘
![](/icons/67788de.gif)
指定文件上
![](/icons/67788dou2.gif)
不使用额外
![](/icons/67788de.gif)
专用USB控制芯片
![](/icons/67788dou.gif)
要求稳定可靠
![](/icons/67788dou.gif)
效率高
![](/icons/67788dou.gif)
不能影响运行在该CPU上
![](/icons/67788de.gif)
其它
![](/icons/67788chengxu.gif)
AT91RM9200
![](/icons/67788chengxu.gif)
加载后直接运行
![](/icons/67788dou.gif)
没有操作系统
以上就是我做
![](/icons/67788de.gif)
基于OHCI
![](/icons/67788de.gif)
USB主机
![](/icons/67788de.gif)
项目背景
![](/icons/67788dou.gif)
这个项目是做什么
![](/icons/67788de.gif)
不重要
![](/icons/67788dou.gif)
你可以把它想象成任何项目
![](/icons/67788dou.gif)
关键是这个项目要求使用U盘来保存数据
另
外
![](/icons/67788dou.gif)
在我们
![](/icons/67788de.gif)
项目中没有使用任何
![](/icons/67788yi.gif)
款嵌入式操作系统
![](/icons/67788dou.gif)
所有
![](/icons/67788de.gif)
![](/icons/67788chengxu.gif)
都运行在同
![](/icons/67788yi.gif)
个主循环中
![](/icons/67788dou.gif)
自己来实现任务调度
![](/icons/67788dou2.gif)
说到操作系统
![](/icons/67788dou.gif)
其实很惭愧
![](/icons/67788dou.gif)
自从我开始从事
嵌入式系统
![](/icons/67788de.gif)
开发到现在
![](/icons/67788dou.gif)
十几年了
![](/icons/67788dou.gif)
从来没有用过任何操作系统
![](/icons/67788dou.gif)
所有
![](/icons/67788chengxu.gif)
都是裸机直接运行
![](/icons/67788dou2.gif)
好处是系统简单
![](/icons/67788dou.gif)
![](/icons/67788yi.gif)
切都在自己
![](/icons/67788de.gif)
掌握的中
![](/icons/67788dou.gif)
出了问题可以很快得
到解决
![](/icons/67788dou2.gif)
坏处是系统
![](/icons/67788de.gif)
移植性差
![](/icons/67788dou.gif)
换了个系统有很多通用
![](/icons/67788de.gif)
代码需要重新编写
不过我做
![](/icons/67788de.gif)
那些嵌入式系统现在看来其实都是蛮简单
![](/icons/67788de.gif)
![](/icons/67788dou.gif)
用了操作系统可能反而更麻烦
![](/icons/67788dou.gif)
首先得花时间学习操作系统
![](/icons/67788dou.gif)
而且出了问题还要分析确认这问题是不是操作系统
![](/icons/67788de.gif)
问题
![](/icons/67788dou.gif)
![](/icons/67788yi.gif)
旦是操作系统
![](/icons/67788de.gif)
问题还要想办法如何规避
![](/icons/67788dou.gif)
算了
![](/icons/67788dou.gif)
有那个时间项目早就做完了
没有操作系统
![](/icons/67788dou.gif)
我
![](/icons/67788de.gif)
![](/icons/67788chengxu.gif)
更加清晰
![](/icons/67788dou.gif)
没有了驱动
![](/icons/67788chengxu.gif)
加载、操作系统API
![](/icons/67788diaoyong.gif)
![](/icons/67788dou.gif)
反而可以更加清楚地知道如何基于OHCI规范标准实现USB主机
![](/icons/67788dou2.gif)
在开始讲解的前
![](/icons/67788dou.gif)
我想读者应该具备如下
![](/icons/67788de.gif)
基础知识:
1、 USB接口基础知识;
2、 USB层通信协议及基本工作流程;
3、 USB主机对USB设备
![](/icons/67788de.gif)
管理流程;
4、 OHCI标准 —— AT91AM9200对USB接口
![](/icons/67788de.gif)
操作标准;
5、 Mass Storage Protocol —— 对U盘访问
![](/icons/67788de.gif)
存储控制协议;
6、 UFI Command - U盘读写等操作命令;
7、 FAT16文件系统;
以上内容有
![](/icons/67788yi.gif)
些我会在需要
![](/icons/67788de.gif)
时候加以介绍说明
![](/icons/67788dou.gif)
更加详细
![](/icons/67788de.gif)
内容请自行参考相关资料
![](/icons/67788dou2.gif)
下面是我做开发过程中参考
![](/icons/67788de.gif)
![](/icons/67788yi.gif)
些资料:
1、
![](/icons/67788smhl.gif)
Open Host Controller Interface Spec
![](/icons/67788if.gif)
ication for USB
路径
ftp://ftp.compaq.com/pub/supportinformation/papers/hcir1_0a.exe
介绍说明
OHCI接口规范标准
![](/icons/67788dou.gif)
解压后得到Word文档
2、
![](/icons/67788smhl.gif)
ARM嵌入式系统软件Software开发例子(
![](/icons/67788yi.gif)
、 2)
![](/icons/67788smhr.gif)
路径
介绍说明
周立功等编著
![](/icons/67788dou.gif)
北京航空航天大学出版社
3、
![](/icons/67788smhl.gif)
USB 2.0应用系统开发例子精选
![](/icons/67788smhr.gif)
路径
介绍说明
廖济林编著
![](/icons/67788dou.gif)
电子工业出版社
4、
![](/icons/67788smhl.gif)
Universal Serial Bus Mass Storage Class Bulk-Only Transport
![](/icons/67788smhr.gif)
USB Bulk-Only协议规范标准
5、
![](/icons/67788smhl.gif)
Universal Serial Bus Mass Storage Class UFI Command Spec
![](/icons/67788if.gif)
ication
![](/icons/67788smhr.gif)
USB UFI命令规范标准
6、
![](/icons/67788smhl.gif)
Microsoft Extensible Firmware Initiative FAT32 File
![](/icons/67788System.gif)
Spec
![](/icons/67788if.gif)
ication
![](/icons/67788smhr.gif)
FAT32文件格式
![](/icons/67788dou.gif)
基础部分和FAT16兼容
本文出自 “rainman
” 博客
![](/icons/67788dou.gif)
请务必保留此出处http://lancelot.blog.51cto.com/393579/226133