0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-06-02 15:30 次阅读

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

基于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]。

image.png

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提供输出时钟时的退出低功耗

image.png

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

image.png

1.2.4 拒绝虚假恢复

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

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

image.png

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

image.png

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)。

image.png

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

image.png

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在周转周期之后立即开始驱动串行模式信号。

image.png

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

image.png

1.3.3 退出FsLsSerialMode模式

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

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

image.png

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

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

image.png

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以确定中断源。

image.png

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操作的安全性。

image.png

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

image.png

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

image.png

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

image.png

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

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

image.png

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》

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口协议
    +关注

    关注

    5

    文章

    41

    浏览量

    18519
  • 接口
    +关注

    关注

    33

    文章

    8454

    浏览量

    150741
  • usb
    usb
    +关注

    关注

    60

    文章

    7879

    浏览量

    263761
  • 总线
    +关注

    关注

    10

    文章

    2861

    浏览量

    87920
  • 电荷泵
    +关注

    关注

    3

    文章

    238

    浏览量

    29538
  • DWC2
    +关注

    关注

    0

    文章

    35

    浏览量

    118
收藏 人收藏

    评论

    相关推荐

    基于DWC2USB驱动开发-0x01开篇介绍与新思DWC2 USB2.0控制器简介

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-0x01开篇介绍与新思
    的头像 发表于 05-08 18:10 4463次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>01开篇<b class='flag-5'>介绍</b>与新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0控制器简介

    基于DWC2USB驱动开发-0x02 DWC2 USB2.0 IP功能特征介绍

    DWC2即新思(Synopsys )的DesignWare® Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。从linux的内核源码驱动中就带
    的头像 发表于 05-09 10:09 8963次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP功能特征<b class='flag-5'>介绍</b>

    基于DWC2USB驱动开发-0x03 DWC2 USB2.0 IP 架构介绍接口协议时序

    本文介绍接口协议时序
    的头像 发表于 05-10 15:37 2963次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>03 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP 架构<b class='flag-5'>介绍</b>之<b class='flag-5'>接口</b>和<b class='flag-5'>协议</b>时序

    基于DWC2USB驱动开发-0x08 ULPI接口协议概览

    本篇概述了ULPI相关的内容,内容比较多后面还有工作模式和寄存器相关内容会分开讲。
    的头像 发表于 06-02 13:08 8086次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>08 <b class='flag-5'>ULPI</b><b class='flag-5'>接口</b><b class='flag-5'>协议</b>概览

    基于DWC2USB驱动开发-0x0D PHY寄存器读写代码编写与测试

    我们前面重点介绍ULPI接口和PHY的寄存器,这一篇来进行PHY寄存器读写的代码编写与测试。从这一篇开始就正真进入了驱动编写的过程了。
    的头像 发表于 06-06 13:03 2109次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x0</b>D PHY寄存器读写代码编写与测试

    基于DWC2USB驱动开发-0x0E 使用逻辑分析仪分析ULPI数据

    工欲善其事必先利其器,所以在USB开发中工具很重要,示波器,逻辑分析仪,USB协议分析仪等都不可少。在底层问题分析时缺少有力工具时很难进一步分析,本文分享了
    的头像 发表于 06-07 16:56 1580次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x0</b>E 使用逻辑分析仪分析<b class='flag-5'>ULPI</b>数据

    基于DWC2USB驱动开发-IAD描述符详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-IAD描述符详解 (qq.com) 一.  前言 IAD描述符用于一个设备功能关联多个接口
    的头像 发表于 06-27 08:45 5.1w次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-IAD描述符详解

    基于DWC2USB驱动开发-USB复位详解

    本文转自公众号欢迎关注 基于DWC2USB驱动开发-USB复位详解 (qq.com) 一.前言          上一篇我们详细
    的头像 发表于 07-07 11:18 5.5w次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>USB</b>复位详解

    基于DWC2USB驱动开发-USB连接详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-USB连接详解 (qq.com) 一.前言   之前一直在阅读手册,规格书,练习招式
    的头像 发表于 07-07 08:46 3516次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>USB</b>连接详解

    基于DWC2USB驱动开发-高速设备枚举为全速设备问题案例分析

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-高速设备枚举为全速设备问题案例分析 (qq.com) 一.前言   本文分享一个高速设备被枚举为全速的问题。     高速设备速
    的头像 发表于 07-10 17:12 1289次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-高速设备枚举为全速设备问题案例分析

    基于DWC2USB驱动开发-设备类驱动框架

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-设备类驱动框架 (qq.com) 一.前言 从软件顶层,从数据流的角度来看
    的头像 发表于 07-16 15:56 1260次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-设备类<b class='flag-5'>驱动</b>框架

    基于DWC2USB驱动开发-发送相关的寄存器DMA寄存器详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-发送相关的寄存器DMA寄存器详解 (qq.com) 前言 如下寄存器DIEPxxx,对应IN端点,和发送数据相关,这一篇先
    的头像 发表于 07-16 16:42 1558次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-发送相关的寄存器DMA寄存器详解

    基于DWC2USB驱动开发-数据不能发送问题分析案例

    本文转自公众号欢迎关注 基于DWC2USB驱动开发-数据不能发送问题分析案例 (qq.com)   一.前言        对于驱动
    的头像 发表于 08-08 09:43 2068次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-数据不能发送问题分析案例

    基于DWC2USB驱动开发-0x0A ULPI接口同步模式介绍

    同步模式ULPI必须支持的且主要的模式,内容比较多,对于软件开发人员来说重点关注下总线时序,即数据是如何交互的,这样必要的的时候可以使用逻辑分析仪进行抓包分析。另外重点关注下各个状态
    的头像 发表于 06-04 15:35 3758次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x0</b>A <b class='flag-5'>ULPI</b><b class='flag-5'>接口</b>同步<b class='flag-5'>模式</b><b class='flag-5'>介绍</b>

    基于DWC2USB驱动开发-抽丝剥茧再论切换到状态阶段标志DOEPINTn.StsPhseRcvd

    本文转自公众号系列文章,欢迎关注 基于DWC2USB驱动开发-USB包详解 (qq.com) 一.前言 前面我们对SETUP完成标志DOE
    的头像 发表于 07-24 18:04 1411次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-抽丝剥茧再论切换到状态阶段标志DOEPINTn.StsPhseRcvd