在U盘连接到USB电缆上后首先为ISP1160注册一个Root Hub Class,再为U盘注册一个Mass Storage Class的设备。接着,为了检测U盘的连接,启动查询当前状态的Host_Serve的任务。当ISP1160 与U盘连接后,ISP1160通过中断通知20B,20B进入中断服务程序改变当前状态。在Host_Serve任务中检测到状态的改变,开始USB协议的通信。至此,U盘(USB Mass Storage设备)注册完成(大容量类相关代码见程序清单3.1,3.2,表2)。由此以后,FAT32文件系统所要对U盘进行的操作都经过Bulk-Only传输完成。
程序清单3.1 大容量设备描述信息数据结构
程序清单2.2 逻辑单元描述信息数据结构
实现的大容量类的API函数如表2所示。
表2 大容量类API函数列表
4.4 此文件系统在μcosII中的移植
FAT32文件系统来源于开源代码,移植的主要工作是替换消息通讯函数。这些工作完成后,将对File的各种操作包装成一个OSFile任务,接收应用程序发出的文件操作要求。文件系统的整体结构图如图4所示。
图4 文件系统层次结构[2]
5 性能测试
基于已经实现的方案,进行了详细的测试。首先,对目录的创建,目录的删除,进入目录,退出目录,文件的创建,文件的删除,文件的读取,文件的写入等基本功能进行了测试,均能圆满完成以上功能。
接下来对比较关键的文件读取功能进行了详尽的测试。测试所得到的结果完全达到了对数字相片读取的要求。
表3 不同文件的读取时间
6 结束语
基于20B的UPI接口实现USB的传输,之前没有可以参考的范例,完全是出于对硬件时序和文件系统的理解设计了整个解决方案。此方案解决了20B芯片上外挂U盘的问题, 从而使20B芯片可以应用于数字相框(Digital Video Frame)领域。
为了让文件系统能够更好的适应嵌入式应用的需求,可以对文件系统做出一些优化,尽量做到对flash的写平衡,提高文件的读取速度,减少文件系统对CPU和内存资源的占用。