摘要:讨论在SoPC(System on a Programmable Chip)系统中设计USB主机接口设备的一般方法,着重阐述主机控制器的驱动程序开发。利用Xilinx公司的EDK软件在ML405开发板上搭建一个基于PowerPC的片上系统,设计EZ-Host的USB主机控制器的Linux驱动程序,使系统具有USB主机功能,能够和各种USB设备进行通信,实现SoPC系统上基于Linux的USB接口的扩展,对于开发其他USB主控制器驱动具有一定借鉴意义。
关键词:USB;USB主机控制器;EZ-Host;Linux;SoPC
USB具有简单、标准的连接方式、支持热插拔等诸多优点,因此已成为流行的接口技术。USB是典型的主/从结构的总线标准,即只有USB主机才能与USB设备连接。USB总线与计算机系统的接口部分是主机控制器,它可以被看作一个硬件、固件和软件的综合体。主机控制器实现主机与设备之间的电气和协议层匹配,主要包括:串并转换、帧起始、数据处理、协议使用、传输错误处理、远程唤醒、根Hub、主机系统接口等功能。USB设备之间通过USB Hub连接,主机控制器和USB设备之间一般通过根Hub相连。通常主机控制器提供与根Hub相关的状态查询和控制单元。当有设备插入时,在枚举过程中,主机控制器驱动通过查询和控制单元应答设备伪装成一个Hub,所以通常称此Hub为虚拟根Hub。
这里利用EDK软件搭建一个基于PowerPC的片上系统,实现了SoPC系统上基于Linux的USB接口的扩展,使系统具有USB主机功能,能够和各种USB设备进行通信。
1 开发环境
目前Linux 2.6内核中的USB支持3种主控制器接口:通用主控制器接口(UHCI)、开放控制器接口(OHCI)及增强主机控制接口(EHCI)。在嵌入式系统中,如果处理器集成有USB主机控制器,则可直接引出USB主控端口;而未集成USB主机控制器的处理器则需使用USB主控器件,从总线上扩展USB主机接口。
这里所采用的开发环境是Xilinx公司的ML405开发板。开发板上核心FPGA采用Xilinx的XC4VFX20-FF672器件,其内置1个PowerPC硬核,2个以太网MAC层控制器。开发板上还带有64 MB的DDR SDRAM,10/100/1000以太网端口、带主机/设备端的USB接口器件(CY7C67300)等。
EZ-Host(CY7C67300)是Cypress半导体公司的全速低耗多端口主机/外设控制器,该器件可方便接至高性能CPU上完成USB主机控制器端的功能;拥有16位RISC指令处理器,可作为协处理器使用或单独使用;同时支持USB的OTG协议,拥有2个可独立配置并各带有2个端口的USB串行接口引擎(SIE);既可用作主机,又可用作外设,并支持多达4个主机端口。另外,该器件拥有一个可编程I/O接口模块,可供各种接口编程使用,可编程实现HPI、HSS、SPI等接口模式。当EZ-Host控制器作为USB主机控制器时,一般采用HPI主机端接口(Host Port Interface)接口模式。
2 硬件设计
Xilinx公司提供一个IP核opb_epc外设控制器(external peripheral controller),为OPB总线与外部同步或异步外围设备之间的数据传送提供一个通用接口,可方便实现处理器对于外设的控制。一个opb_epe最多可接4个外设,且每个外设可独立配置成同步或异步模式,其时序参数(如建立时间、保持时间、访问时间周期等)都可由用户设置。opb_epc通过OPB总线接收处理器的读写指令,在相应外设接口产生相应
的访问周期,从而实现处理器对外围设备的控制。这里使用opb_epc模块作为控制器,实现PowerPC与EZ-Host的主机控制器的接口通信,嵌入式硬件系统架构如图l所示。