1 USB OTG的工作原理
OTGl.Oa补充规范对USB2.O进行的最重要扩展是其更具节能性、电源管理,并允许设备以主机和外设2种形式工作。OTG有两种设备类型:两用OTG设备(dual—role 0TG device)和外设式OTG设备(peripher一al_only 0TG device)。两用0TG设备完全符合USB2.O规范,同时提供有限的主机能力和一个Mini—AB插座,支持主机流通协议(IIost Negotiation Protocol,HNP)”。,且同外设式OTG设备一样支持事务请求协议(SessionRequest Protocol,SRP)。当作为主机工作时,两用0TG设备可在总线上提供8 mA的电流,而以往标准主机则需要提供100~500 mA的电流。2个两用OTG设备连接在一起时可交替以主机和从机的方式工作,这个特点兼容了现有USB规范主机/外设的结构模型。OTG主机负责初始化数据通信,比如总线复位、获取各种USB描述符和配置设备。这些配置完成后,2个OTG设备便可分别以主机和从机方式传输信息,2个设备主从角色交换的过程由主机流通协议定义。
2 IP设计原理和IP模块设计
USB 0TG控制器芯片按结构分类,通常分为以下2种:
①专为USB OTG设计的芯片。这类芯片集成了微控制器,是完全按照协议设计的,而不是在旧的结构上增加功能。其结构不同于其他常用控制芯片,开发者需要较长的学习时间,但是它能够达到最优化。
②需要外部微处理器的接口芯片。有些USB控制器只处理USB通信,而且必须由外部微处理器来控制。这种实现接口的标准组件使得使用者可以在各种不同类型的微控制器中选择一种最适合的微控制器,通过使用已有的结构和减少固件上的投资来缩短开发时间,减少开发风险和费用。但由于外接一个处理器,增加了电路的复杂性。
本文设计的USB OTG IP核采用第2种方式,所采用的处理器是Nios。根据对USB OTG规范的理解,USB0TG控制器应该具有以下的功能:HNP和SRP协议的实现,主机工作模式和设备工作模式。系统结构框图如图1所示。
UTMI+接口需要外接一个符合USB 2.0 UTMI+协议的收发器。该芯片用作USB2.O接口的模拟前端,处理由USB2.O接口发出的高速和模拟信号,对其发出的用NRZI方式编码的数据进行解码、位填充等,并将串行数据转换成并行数据;反之,该芯片对由本控制器发出的并行数据通过其内部的差分驱动电路进行串行化、位填充和NRZI编码,并输出到USB电缆上。该接口模块主要用于缓存发送和接收的数据,确保与外围收发芯片的无缝结合,以及挂起、恢复和复位的检测。
OTG控制器实现USB OTG补充协议的功能。该模块主要负责HNP、SRP的硬件实现,以及连接状态的检测。
主机控制器实现IP核工作在主机模式的功能。该模块主要产生挂起、恢复、复位信号,主动发送get_descip—tor、set_address、set_configuration等标准请求,并把请求变成对应的USB数据包格式(比如TOKEN包加入PID、地址、端点和5位的CRC校验码等);隔固定的时间向从设备发送SOF标志,并根据配置的结果产生对应的主机中断。
设备控制器实现IP核工作在设备模式的功能。该模块主要负责接收标准的USB请求,比如接收SOF标志、IN标志、OUT标志等,并根据这些请求作出正确的响应以及检测复位、挂起信号。
控制状态寄存器完成对IP核控制器内部状态的设置。它分成2种类型:一种是基本的控制状态寄存器,比如控制状态寄存器(指定USB的速率模式、挂起模式、连接状态、主从模式),设备地址寄存器(存放主机分配给USB设备的地址),中断屏蔽寄存器(使能对应中断)和中断源寄存器(Nios控制器通过读此寄存器来判断中断类型);另一种是端点寄存器控制状态寄存器,如中断源寄存器、中断屏蔽寄存器、缓冲区的指针寄存器和大小寄存器,模块中实现时根据输入的地址和读写信号来对某一个寄存器进行相应的读写操作。
存储器接口实现IP核内部数据与Nios控制器数据的之间的仲裁。当Nios控制器和IP核内部同时对外部存储器SRAM进行读写访问时,必须对它们进行数据的仲裁。默认的优先级为IP核内部数据优先级高于Nios控制器的数据优先级。
Nios控制器接口实现USB IP核与外部微控制器(Nios)的数据通信。该接口符合Avalon总线规范,通过输入地址的最高位来判断Nios是对内部寄存器进行访问还是对SRAM存储器进行访问,并完成地址、数据和相关信号的处理。