论文部分内容阅读
USB是数字有线通信设备应用十分广泛的接口之一,但USB接口两端的设备有主从之分,因此USB接口不支持任意两个USB设备之间的直接通信。OTG的出现解决了这一问题,支持OTG规范的USB OTG双重角色设备既可以实现主机功能,又可以实现标准设备功能,使得该设备可以实现与任意USB主机或设备间的通信,此外两个支持OTG规范的设备也能直接通信。本文介绍一种基于ARM芯片的USB2.0 OTG接口的IP核设计,主要对其在Linux下的主机控制器设备驱动的设计做详细讨论。本论文基于的课题设计的USB2.0 OTG IP核支持USB2.0协议、OTG补充规范、UTMI+协议。该IP核的一侧通过UTMI+的PHY与OTG设备通信;另一侧通过存储器控制器与ARM嵌入式系统相连,使得ARM访问IP核如同访问存储器。该IP硬件包括OTG控制器(OTGC)、高速主机控制器(EHC)、全速主机控制器(OHC)以及设备控制器(DC)。与本论文相关的硬件模块是主机端EHC和OHC模块,本IP设计的特点在于其具有OTG功能,主机端同时具有全速与高速主机控制器,而且本IP独立于MCU,不具有总线控制权的接口模块设计,其与MCU的数据交互均通过中断服务程序完成。USB主机功能由USB主机控制器硬件和USB主机驱动共同实现。USB主机驱动是一个复杂的软件体系,在Linux系统中,USB主机驱动分为USB设备类驱动、USB核心驱动(USBD)、USB主机控制器驱动(HCD)几个层次。本论文详细研究的HCD是USB主机驱动中与硬件结合最紧密的一层,它是上层驱动与下层硬件沟通的桥梁。HCD实现了主机控制器的管理、应用程序数据到USB数据的转化、传输的管理、设备的管理等重要功能。本论文首先仔细研究了Linux系统内核中的USB主机协议栈,在此基础上构建USB驱动的框架。根据上层驱动框架、IP核硬件设计,结合本IP核与ARM嵌入式系统之间的接口分析,实现USB全速和高速主机控制器驱动的功能部分。由于IP硬件设计的特殊性,主机控制器驱动的设计需要考虑到高速与全速控制器的路由切换与缓存区的共享,以及ARM访问作为SLAVE的IP核的方式。最后介绍了该驱动作为Linux内核的一个模块,与IP核结合,在基于Linux的ARM测试平台上运行和测试,并分析了结果。分析大规模存储功能测试的结果,该系统实现了预期USB全速与高速主机功能,并能成功切换。为进一步应用OTG功能开发奠定基础。