论文部分内容阅读
USB2.0接口和基于LINUX的驱动程序的应用已经非常广泛,特别在电子消费类领域。基于LINUX下的USB2.0设备则更是市场的需求。本文介绍一种基于嵌入式LINUX的USB2.0设备驱动的设计,主要对一种USB海量存储设备驱动的设计及其测试驱动的设计进行讨论。该驱动是基于学校自主研发的AHB_USB2.0 IP核而设计的。该IP核支持USB 2.0协议,并兼容USB 1.1协议;支持AMBA 2.0协议和UTMI 1.05协议。该IP核一侧通过UTMI接口或ULPI接口的PHY与USB2.0主机端进行通信;另一侧则通过AHB总线与ARM相连。USB2.0设备驱动的设计分为三个大模块:系统初始化和端点0解析、块数据传输和UFI协议分析。系统初始化和端点0解析模块主要解析USB协议,实现了USB设备的总线列举;块数据传输模块主要解析USB海量传输协议BULKONLY协议,实现了数据的块传输;UFI协议分析模块则通过解析USB媒质接口协议UFI命令集,实现了内存虚拟FLASH的读写。该驱动设计遵循USB协议、Bulk Only协议和UFI协议,由外挂ARM实现USB设备命令和UFI命令的解析,并执行相应的操作,实现常规数据读写访问、内部DMA或外部DMA等多种方式的切换。该IP及驱动验证测试可分为寄存器测试、通道测试和业务测试三层。寄存器测试主要用于测试寄存器读写是否正确;通道测试用于测试各个端点的各种传输模式是否工作正常;业务测试则是通过完成一个完整的U盘驱动并测试其是否能够完整完成一个U盘功能。本项目最终已经通过EDA验证和FPGA测试,并且已经在内嵌ARM核的FPGA系统上实现了多个U盘。这个FPGA系统的正确工作,证明了整个项目是成功的,也证明了USB2.0驱动以及测试程序是成功的。