USB实现(1)-Ti AM335x系列CPU
本文参照了Ti AM335x的技术手册。
AM335x处理器提供了两个USB2.0 模块。每个USB控制器都是围绕Mentor USB OTG控制器(musbmhdrc)和TI PHY构建的。每个USB
控制器具有用户可配置的32K字节的端点FIFO。两个USB模块共享CPPI DMA控制器和相应的队列管理器中断步态器,电源管理模块和PHY / UTMI时钟。
下图是AM335x的USB集成图
接下来详细介绍USB控制器host和device模式的操作:
两个USB模块可以在一系列不同的环境中使用。 它们可以用作连接到常规USB主机(例如PC)的高速或全速USB外围设备点对点类型的安排。
对于一个USB外设配置,用户可以选择利用使用电缆端选择角色通过连接电缆的mini或micro b(认为是利用 h/w option 也就是硬件控制),也可以选择可选项方法:需要固件对相应的USB模式寄存器IDDIG位字段进行置1,使得USB控制器进入会话(session)也可以选择利用firmware进行选择(s/w option 软件控制)。
同样的,对于一个USB host配置,用户可以选择利用cable端进行选择通过连接mini或者micro端(认为是利用 h/w option 也就是硬件控制),也可以选择利用firmware进行选择(s/w option 软件控制)。
当使用软件控制(sw option),USB ID 引脚是被忽略的,USB2.0 控制器判断是host端还是device是利用 USB 模式寄存器 中的IDDIG位的状态进行判断,当IDDIG位在USB进入session之前被用户编程置1时,会认为是device端,相反,如果IDDIG为0,控制器会认为是host端。
USB2.0 OTG 控制器开始决定运行模式(host or device)是当USB2.0 控制器进入到一个session中时,当发生以下事件时表示控制器进入到session:
1.探测到USBx_VBUSIN引脚的电压>4.4v,并且控制器将DEVCTL[SESSION]位进行设置。
2.当固件置DEVCTL[SESSION]位时。
当DEVCTL[SESSION]位被置位时,控制器开始探测IDDIG的信号状态,当信号状态发现是低时(IDDIG被编程置为0)那么USB2.0 控制器会认定角色是host,而当信号状态发现是高时(IDDIG被编程置为1)会假定是device端,请注意,iddig是内部信号,可以通过固件从专用寄存器驱动为高电平或低电平。
当USB控制器确定其作为host主机的角色时,会将USBx_DRVVBUS引脚电平拉高来使能额外的power,也就是给外部device供电。USB2.0 控制器将等待USBx_VBUSIN引脚的电平拉高,在100ms后,如果没有看到USBx_VBUSIN引脚电平拉高,会产生Vbus错误中断;而当USBx_VBUSIN引脚电平拉高时,USB2.0控制器会等待一个device的连接,这是为了看到其中的一条数据线USB0 / 1_DP / DM被拉高。
当控制器确定其作为device角色时,也就是USB mode 寄存器的IDDIG位被编程置1,外部主机正在USBx_VBUSIN线上供电。那么USB2.0控制器将设置DEVCTL [SESSION]位,指示控制器进入会话。当控制器进入会话,它将强制USB2.0控制器感测iddig信号的状态。一旦探测到iddig信号为高电平,它将使其1.5KΩ上拉电阻表示外部主机,它是一个Full-速度设备。
接下来详细分析USB作为host和device端的运行流程。
USB 控制器作为host端:
当USBx_ID引脚状态接地或USB模式寄存器[iddig = bit8]被清除为0,USB控制器承担主机的作用,当USB控制器进入会话时,应用/固件将DEVCTL [SESSION]位设置为1,它将承担主机的角色。
1.进入挂起模式。 当作为主机运行时,可以提示USB控制器进入通过设置POWER寄存器中的SUSPENDM位来暂停模式。当该位被置位时,控制器将完成当前事务,然后停止事务调度程序和帧计数器。
2.发送恢复信令。 当应用程序要求控制器离开挂起模式,它需要清除POWER寄存器中的SUSPENDM位,将RESUME位置1 20ms。当RESUME位为高电平时,控制器将在总线上产生恢复信号。 后20 ms,CPU应清除RESUME位,此时帧计数器和事务处理调度程序将启动。
3.响应远程唤醒。 如果控制器处于从目标位置检测到恢复信号在挂起模式下,UTMI + PHY将从低功耗模式退出,UTMI时钟重新启动。
然后,控制器将退出挂起模式,并自动将POWER中的RESUME位置1寄存器(位2)为\'1\'以接管从目标产生恢复信号。 如果恢复中断使能,将产生中断。
4.重置信号。 如果控制器在主机中,POWER寄存器(位3)中的RESET位置1模式,它将在总线上产生复位信号。 如果POWER寄存器(位5)中的HSENAB位为设置,也将尝试谈判高速运行。 软件应保持RESET位置1至少20 ms,以确保正确重置目标设备。 软件清零后,控制器将启动其帧计数器和事务调度器。 是否高速运行将由POWER寄存器(位4)的HSMODE位指示。
USB 控制器作为device端:
当USBx_ID引脚悬空或USB模式时,USB控制器承担外围设备的作用寄存器[iddig = bit8]设置为1(只要iddig_mux,它是USB MODE寄存器的bit7也设置为1)之前的用户应用程序进入会话。 当USB控制器进入会话时将承担设备的角色。
1.软连接 - 在POR或USB模块软复位后,POWER寄存器(位6)的SOFTCONN位为清除为0.因此,控制器将显示为断开连接,直到软件设置为SOFTCONN位到1.应用软件可以选择何时将PHY设置为其正常模式。 系统使用冗长的初始化过程可以使用此来确保初始化完成和系统
在连接USB之前准备执行枚举。 一旦SOFTCONN位置1,该软件还可以通过将该位清零来模拟断开连接。
2.进入挂起模式 - 当作为外围设备运行时,控制器监视活动总线,当3毫秒没有发生任何活动时,它进入挂起模式。 如果挂起中断已启用,此时将产生中断。
3.此时,控制器可以保持活动状态(因此能够在Resume信号时检测到在USB上发生),或者应用程序可能会通过停止其时钟来安排禁用控制器。然而,如果时钟不是,控制器将不能检测USB上的恢复信号跑步 如果是这种情况,则需要外部硬件来检测简历信令(通过监视)DM和DP信号),以便可以重新启动控制器的时钟。
4.恢复信令 - 当总线上发生恢复信号时,首先必须是控制器的时钟必要时重新启动。 然后控制器将自动退出挂起模式。 如果恢复中断是
将会产生一个中断。
5.启动远程唤醒 - 如果软件要在控制器处于启动状态时启动远程唤醒挂起模式,应将POWER [RESUME]位设置为1.软件应该离开,然后将该位置1在将其重置为0之前约10 ms(最小2ms,最大15 ms)。