基于DWC2的USB驱动开发-0x09 ULPI接口协议其他工作模式介绍

描述

本文转自公众号,欢迎关注

基于DWC2的USB驱动开发-0x09 ULPI接口协议其他工作模式介绍 (qq.com)

ULPI(其他工作模式介绍)

1.1 前言

上一篇讲解了ULPI基本的一些概念,这一篇就重点讲解其具体的工作模式,同步模式是重点内容比较多放在下一篇,这一篇先讲其他模式。

1.2 低功耗模式

当USB总线挂起时,LINK可以选择性地将PHY置于低功耗模式。PHY可以关闭除接口引脚和全速接收器之外的所有电路。如果存在VBUS,总线电阻器也必须通电。如果设置了相应的寄存器位,则对应功能都必须通电,包括中断源和电荷泵。如果PLL断电,则必须停止时钟而不出现毛刺。

1.2.1 低功耗模式的Data线重定义

当处于低功耗模式时,PHY使用下表中列出的信号驱动数据线(3:0)。当处于低功耗模式时,必须从FS接收器组合驱动LineState。

每当发生任何未屏蔽的中断时,都会使得int引脚信号有效。

PHY必须直接从模拟电路锁存中断事件,因为时钟已断电。

LINK忽略8位数据总线的数据位(7:4)的信号。

输入时钟和输出时钟模式都必须遵循这些规则。

信号 映射到 方向 描述
nestate(0) data(0) OUT LineState(0) 由FS 模拟接收器直接驱动。
nestate(1) data(1) OUT LineState(1) 由FS 模拟接收器直接驱动。
reserved data(2) OUT 保留,PHY必须拉低该引脚。
int data(3) OUT 高有效,有未屏蔽中断时PHY拉高该引脚。

1.2.2 进入低功耗模式

LINK写Function Control 寄存器的SuspendM 为0b使得PHY进入低功耗模式。

如图所示LINK或PHY时钟可以在PHY接受寄存器写入数据后至少停止五个周期。

当处于低功耗模式时,PHY拉高dir,并保持nxt为低。

在拉高dir之后,提供了一个数据总线周转周期turn around,在此期间,数据上的值无效。

PHY在turn around周期之后立即开始按照低功耗模式的Data线重定义信号驱动data[3:0]。

usb

1.2.3 退出低功耗模式

如图所示,LINK通过异步拉高stp向PHY发出退出低功率模式的信号。PHY立即开始唤醒其内部电路。当PHY时钟满足ULPI时序要求时,PHY拉低dir。PHY必须确保在拉低dir之前至少驱动了5个时钟周期。PHY还必须确保在拉低dir之前将SuspendM寄存器自动设置为1b。

LINK在检测到dir拉低的一个CLK之后,拉低stp。

在拉低dir之后,提供了一个数据总线周转周期turn around,在此期间,数据上的值无效。

PHY在turn around之前立即停止按照低功耗模式的Data线重定义信号驱动data[3:0]。

当LINK提供输入时钟时,PHY必须在TPREP内同步其内部时钟TPREP是实现相关的。

PHY提供输出时钟时的退出低功耗

usb

LINK提供输入时钟时的退出低功耗

usb

1.2.4 拒绝虚假恢复

由于USB环境的噪声,可能导致低功耗模式下PHY驱动的异步LineState 输出,有短暂的non-J-state条件或者毛刺。

LineState上的毛刺可能导致LINK短暂的拉高stp,这应该要认为是虚假的恢复PHY必须拒绝这个事件。PHY可以在重新启动时钟之前选择性地拒绝stp上的毛刺,如图所示。PHY必须通过在PHY拉低dir时在时钟的边沿去检查stp是否拉高,来确定是否满足退出低功耗模式的条件。

usb

如果在dir被拉低的周期中stp没有被拉高,那么PHY必须重新拉高dir并返回到低功率模式,而无需LINK的进一步操作,如图所示。

usb

1.3 全速/低速串行模式(可选)

全速/低速串行模式(FsLsSerialMode)使LINK能够直接访问FS/LS串行模拟收发器。

ULPI中定义了两种类型的串行模式:3p FsLsSerialMode和6p FsL sSerialmode。

这两种模式都是可选的。与低功率模式不同,FS/LS收发器必须通电。

如果设置了相应的寄存器位,则对应功能都必须通电,包括中断源和电荷泵。

1.3.1 FsLsSerialMode的数据线重定义

6p串行模式为UTMI+中定义的每个串行信号提供一条单独的数据线。3p串行模式将USB接收和传输数据压缩到双向数据线上,并提供4位数据总线PHY实现可以支持串行信号。

在任一模式中,UTMI+的低有效tx_enable_n信号被转换为高有效tx_enable,用于在ULPI总线上传输,这允许默认的ULPI总线空闲状态保持在00h。

在两种串行模式中,都提供了一个中断引脚。只要发生未屏蔽的中断事件,就会拉高int引脚。

当处于6p串行模式时,PHY使用下表中列出的信号驱动数据(7:0)。

usb

当处于3p串行模式时,PHY使用下表中列出的信号驱动数据(3:0)。

usb

1.3.2 进入FsLsSerialMode模式

为了进入6p串行模式,LINK在接口控制寄存器Interface Control中设置6-Pin FsLsSerialMode位,使数据总线切换到异步操作,并采用新的总线数据定义。

为了进入3p串行模式,LINK在接口控制寄存器Interface Control中设置3-Pin FsLsSerialMode位,使数据总线切换到异步操作,并采用新的总线数据定义。

默认情况下,输出时钟断电以减少串行模式下的功耗,如图所示。进入串行模式后至少5个时钟周期后,时钟停止,当时钟不可用时,PHY必须拉高dir。在拉高dir之后,提供了一个数据总线周转周期turn around,在此期间,数据上的值无效。PHY在周转周期之后立即开始驱动串行模式信号。

usb

如果LINK要求时钟在串行模式下运行,它可以在进入串行模式之前在接口控制寄存器Interface Contro中设置ClockSuspendM信号,如图所示。

usb

1.3.3 退出FsLsSerialMode模式

当LINK检测到int为高时,它应该通过拉高stp来退出FsLsSerialMode。

当ULPI接口返回同步模式时,LINK可以读取USB中断锁存寄存器USB Interrupt Latch以确定中断源。如果时钟未运行,退出FsLsSerialMode与退出低功率模式相同,如图所示。

usb

如果时钟正在运行,则LINK通过拉高stp向PHY发出退出FsLsSerialMode的信号。

PHY在检测到stp拉高后将拉低dir 1个或多个周期,如图所示。在拉低dir之后的一个时钟中,LINK取消拉高stp。与低功率模式一样,在取消拉高dir之后的周期中,有一个时钟的总线数据周转周期,在周转周期内,数据上的值无效。PHY在紧接周转周期之前停止驱动串行模式信号。

usb

1.4 Carkit模式(可选)

当设置接口控制寄存器Interface Control中的CarkitMode位时,选择该模式。

它允许LINK使用UART信号通过PHY与远程车载套件进行通信。

默认情况下,当PHY进入Carkit模式时,时钟会断电。进入和退出Carkit模式与串行模式相同。如果LINK要求时钟在Carkit模式下运行,它可以在进入Carkit模式之前在接口控制寄存器Interface Control中设置ClockSuspendM信号。

只要发生未屏蔽的中断事件,就会拉高int引脚。当LINK检测到int为高时,它应该通过拉高stp来唤醒时钟(如果断电)。如果时钟已经在运行,LINK拉高stp一个周期,将接口切换到同步模式。

当PHY处于同步模式时,LINK可以读取Carkit中断锁存寄存器Carkit Interrupt Latch以确定中断源。

usb

1.5 保护PHY输入信号

由于包括但不限于硬件复位或缓慢通电的原因,LINK可能无法正确驱动ULPI接口。在这种情况下,当PHY的dir拉低时,LINK无法将数据驱动到空闲00h状态。PHY数据输入信号上的未知值可能会启动未经请求的USB活动、寄存器写入、串行或Carkit传输。

因此,PHY必须始终保护其数据输入。

为了防止数据输入上的错误命令,PHY必须在stp上包含一个弱上拉电阻器。

任何时候stp出乎意料地高,PHY都认为LINK无法驱动接口,并且必须进入保持状态。

当处于保持状态时,PHY不得使用数据上的命令,并且不得拉高dir,除非其内部时钟不稳定。LINK还被允许在任何时候将stp驱动为高电平,从而迫使PHY停止使用数据上的命令。

当PHY处于保持状态时,它可以选择性地在数据上启用弱下拉电阻器,防止它们浮动。

当PHY处于保持状态时发生的所有RXCMD更改必须用单个RX CMD更新来替换,当ULPI总线可用时,PHY退出保持状态时发送该更新。RX CMD更新必须始终传达当前RXCMD值,而不是以前或旧的值。

如果LINK始终可以将stp和数据驱动到已知值,则可以通过将接口控制寄存器Interface Control中的接口保护禁用位Interface Protect Disable设置为1b来禁用保护功能,这会降低功耗。

当时钟运行时,LINK应在停止驱动ULPI接口之前将stp驱动高至少一个时钟周期,迫使PHY进入保持状态以保护其数据输入。PHY中的上拉将在随后的周期中保持stp为高,如图所示。

对于LINK在停止驱动ULPI接口之前无法将stp驱动为高电平的实现,无法保证PHY操作的安全性。

usb

在通电期间或时钟未运行时,PHY始终拉高dir,以保护其数据输入,如图所示。如果当PHY拉低dir时stp为高,则PHY将立即进入保持状态并保护其数据输入。当LINK将stp驱动为低时,PHY立即开始处理其数据输入。

usb

如图所示,如果当LINK停止驱动ULPI接口时PHY处于低功耗模式,则stp上的上拉将自动唤醒PHY。如果LINK不希望PHY自动唤醒,则它必须将stp驱动为低电平。

usb

如果当LINK恢复驱动ULPI接口时dir为高,则LINK应当假定PHY处于低功率模式并且驱动stp为高以唤醒PHY,如图所示,在拉低dir之后的时钟中,LINK拉低stp。当dir和stp都为低电平时,PHY在当前时钟周期中开始处理其数据输入。这也适用于通电期间。

usb

如图所示,当dir为高时,LINK可以在通电期间将stp驱动为低电平。

当dir被拉低时,PHY在周转周期之后开始处理其数据输入。

usb

1.6 总结

本篇讲解了低功耗,全速/低速串行模式,Carkit模式,以及PHY输入信号的保护处理。其中低功耗模式是必须的,其他的是可选实现的。

1.7 参考

《UTMI+ Low Pin Interface (ULPI) Specification Revision 1.1 October 20, 2004》

《MicroChip AN 19.17 ULPI Design Guide》

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_34693881 2023-06-03
0 回复 举报
回收芯片 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分