本帖最后由 arthur0561 于 2010-1-14 17:39 编辑
网上有很多自制U盘的资料,其实那个用处不大,工作以后见到很多的USB设备都是免驱动免安装的,感觉比较好,用户买了设备就能直接用,相当方便。基本上的思想是把设备枚举成CD(mass storage类),然后将需要运行的程序写入设备中。这样用户只要插上设备就能自动识别成CD,打开CD里就是应用程序。
所谓免驱动,也就是利用微软定义好的usb设备类,驱动已经存在于操作系统中,我们只要按照设备类规定的协议进行操作就可以了。比如你自己做一个键盘,或者u盘,只要写写固件将你的设备在枚举阶段被识别成相应的设备可以啦。
要完成这个任务需要的知识点包括:1,USB枚举,这个必须完完全全搞明白,不然一点效果也做不出来滴。我前面有几篇**已经写过这方面的内容。http://blog.21ic.com/user1/5568/archives/2009/55928.html
2.mass storage类的协议,这个如果不是很必要的话大体了解就可以啦。3.SCSI命令,只要弄明白一部分必须的就可以啦。4.FAT文件系统,这个是为了能在你自己做的CD中有文件数据的。
实现的步骤是:
1.编写固件枚举部分,将设备枚举成mass storage类的通用scsi 子类。完成这一步,你的电脑就可以识别到一个mass storage类,但是不会出现盘符。
2.处理相应的SCSI必要指令:
INQUIRY—设备的一个描述,告诉电脑你的设备是什么,名字叫什么。这里可以将设备做成U盘或者光驱。
READ_CAPACITY—读取容量信息
REQUEST_SENSE---该命令询问前一个命令执行失败的原因。
TEST_UNIT_READY--测试磁盘是否准备好
READ_FORMAT_CAPACITIES--读格式化容量
处理完这几个命令后,你的光驱就出来了,但是他只是个空壳,是打不开的,不过这时候你就可以写应用程序啦。
3.对设备进行应用开发,这个包括上位机开发跟下位机固件开发,简单的说是通过上位机发送自己定义指令(存在与CBW中),下位机进行判断相应。
4.在下位机中完成FAT文件系统,并对READ(10)进行相应,使光驱能够显示容量跟文件。
5.制作烧录工具,可以将自己的应用程序烧录到设备的flash中。
这样就完成了整个开发工作,具体的内容,会在一下部分详细讲解。 |