This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:内部 USB PHY 的功能

Guru**** 1997655 points
Other Parts Discussed in Thread: TM4C1294KCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/779135/tm4c1294ncpdt-capabilities-of-internal-usb-phy

主题中讨论的其他器件:TM4C1294KCPDT

**按论坛主持人编辑** 此主题讨论与原始帖子无关,并分为新主题,以便更好地区分 各个问题。

原始 USB 库是否默认 USB2.0标准、旧版 USB1.1标准? 全速和高速(数据传输)这两个词是否同义、因为它们都与60MHz 的 USB 时钟源相关? 对我来说、"满"一词就是可能达到的最高值、当"低"位于频谱的另一端时、哈哈。

也许 TI 可以选择其他一些词语来更清楚地区分这两种数据传输方法。 在查看更新的 USB 库时、双重含义也让我感到困惑。 感谢您指出内部 PHY 使用全速库调用、并假设这些调用支持 USB2.0标准协议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 BP101:

    我同意全速与高速是非常令人困惑的术语!

    也就是说、我们不能选择用这种方式命名、命名方式直接来自 USB 规范 :https://en.wikipedia.org/wiki/USB#USB_2.0

    因此、我们只是遵循行业标准、因为它们令人困惑... 我想知道"超级速度+"之后会出现什么情况、可能是超速度? Lightspeed? )

    是如果使用了外部 PHY 并且正确配置了高速、同样的调用也可以支持 USB 2.0。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

    [报价用户="Ralph Jacobi"]是的,如果使用了外部 PHY 并且正确配置了高速,则相同的调用可以支持 USB 2.0。[/quot]

    那么、您说的内部 PHY 是 USB2.0标准吗? 令人困惑的是、批量器件发起调用 USBDCDINIT() 并且针对 ULPISupport (FS/HS)的测试 也 会继续以 检查 eUSBModeDevice、它既不是 FS 也不是 HS。 因此、 如果内部 PHY 支持 USB2.0速度、则会增加混淆。    在 FITY_ULPI_NONE 时、仍然不知道 USB 版本。 内部 PHY 似乎是 USB2.0、但 某些计算机的 BIOS 仍然支持 USB1.1外设或客户端。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:

    哈? 我说过相同的 TivaWare API 软件调用支持2.0。 而不是器件。 这就是为什么需要外部 PHY 来执行2.0...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ralph / Charles:

    我指的是 USB 端口插头上支持2.0速度480Mbps 的芯片 、4/2K 后的计算机也是如此。 昨天 发现 的 USB 库 标签部分批量设备驱动程序调用 是2.0标准。  另外还发现 它 没有通过 USBEndPoitConfigSet()为 复合批量设备驱动程序直接配置两个设备端点。 如果您尝试跟随应通过 USBEndPointConfigSet()为端点配置硬件的调用, 则最终只设置了一个指针,而不会调用直接配置端点。 因此 、如果认为内部 PHY 仅支持 USB 1.1速度(12Mbps)、这似乎是不正确的。

    HS/FS 分配可能 必须执行其他硬件配置 、即 外部 PHY、而 不是 MCU 在内部 PHY 端点上不支持480Mbps。 否则、数据表和 USB 库(脚注) 无法明确任何此类问题、 MCU 可能会通过  内部 PHY 仅支持 USB1.1速度。

     我在将指针 链接到两  个命名端点的复合批量结构之后添加了以下调用。 我只能 看到 DMA 已配置、但没有设置标志。  整个项目依赖于一些隐藏的默认库配置(中断) 、因此几乎无法 找到 跟踪 或修复错误。  配置端点芯片硬件的过程在批量器件示例中记录得很差。

       EP1的十六进制解码(如下)与器件输入/输出相同。 奇怪的是、当器件插入以承载端点 事件回调 循环两次返回的状态(错误)时。  即使 未配置点并且消息 值(ui32MsgValue) 永远不会在 USB_EVENT_~的状态下返回、也会发生该错误循环。 奇怪的是 、当随机端点断开 连接时、会发生相同的状态错误、而接口(端点0)与主机保持不变。 循环错误可能发生在后台处理程序中磁力发生的隐藏库中断处理过程中、我讨厌魔术技巧。  哈哈

    USBDBulkCompositeInit:

    //设置默认端点和接口分配。
    // EP1=0x00000010
    psInst->ui8INEndpoint = data_in_endpoint;// 512字节数据包 ui32EndPoint
    psInst->ui8OUTEndpoint = data_out_endpoint;// 512字节数据包 ui32EndPoint
    psInst->ui8Interface = 0;]
    
    添加在 USBDBulkInit()之后;
    
    /*在端点配置 USB0、保留0。
    * USB_EP_2、USB_EP_3、USB_EP_4、USB_EP_5、USB_EP_6、USB_EP_7 *
    USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、
    (USB_EP_MODE_BULK_USB_EP_AUTO_CLEAR);
    /*配置 USB0 OUT 端点*/
    USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、
    (USB_EP_MODE_BULK_USB_EP_AUTO_SET); 

        

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Ralph Jacobi"]这就是为什么需要外部 PHY 来执行2.0...[/quot]

    哈? 那么、您认为 TI 倒退了、 使用 了为 2000年4月之后发布的 MCU 设计的芯片1996?   在市场上的大多数硬件中采用 USB 2.0标准后、这种做法没有任何逻辑意义。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 BP101、

    本次讨论将变得非常非主题、如果您想继续、请打开有关主题的新主题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    Charles 表示、内部 PHY 仅支持全速。

    USB 1.0于1996年1月发布、指定数据速率为1.5Mbit/s  (低带宽低速)和12Mbit/s  (全速)

    我的计算机奖励 BIOS 不支持 USB1.1、因此 USB2.0 BIOS 是如何支持的。  如果 TM4C1294 PHY 与 USB1.1协议兼容、这一点就说明了。 USB 库如何正确配置 USB 2.0协议更改的端点以保持与现代计算机的兼容性?  似乎 USB 库 PHY 器件配置 与  USB2.0协议更改保持极低的向后兼容性。

    同样、批量器件 DCD 端点 既未配置 为全速、也未配置为高速。   根据 过去的批量客户端测试、我们只能获得256Kbps 的数据包传输、起初似乎已经足够快了。 这不是 全速传输速率、而是连接 到远程 USB2.0主机的低速1.5M 位内部 PHY。  现在需要 具有大容量设备客户端的内部 PHY 提供 USB 2.0 (12Mbit)速度。  

    数据表中给出了将  USB0外设与 外部集线器芯片连接的选项、即外部 PHY 的480Mbps 速率。 难怪 当 NVIC 变得非常繁忙时、我们会遇到随机批量数据传输终端管道损坏的奇怪问题!

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    显示  了内部 PHY 根据 USB 库调用的报告重置480MPS、以在初始化完成之前检查配置的器件/主机速度。 之后、它最终进入全速模式。

    /*获取配置的 PHY 传输速度*/
    //ui32USB0DevSpeed = USBHostSpeedGet ();
    ui32USB0DevSpeed = USBDevSpeedGet (USB0_BASE);
    
    /*报告 USB0 PHY 端点的速度*/
    if (ui32USB0DevSpeed = USB_HIGH_SPEED)
    {
    UARTprintf (">USB0-Speed->high (480Mbps)\n");
    }
    否则、如果(ui32USB0DevSpeed = USB_full_speed)
    {
    UARTprintf (">USB0-Speed->Full (12Mbps)\n");
    }
    其他
    {
    UARTprintf (">USB0-Speed->low (1.5Mbps)\n");
    } 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    奇怪 的是、USB0 默认 为高速(高于 POST)、 配置描述 符发送 EP1后 、它向下移动到全速。 器件描述符注释(下面)指出 USB 1.1 信息器 USB2.0 和 PHY 应快于12Mbps。  因此、我很困惑 USB0速度不是通过调用来配置 EP1速度、描述符无法设置 HS。  人们普遍认为、EVM 上的 USB0外设 PHY 是针对当今 USB2.0标准而设计的、而不是专门  针对1998年后的 USB 1.1。  我的主机 USB2.0计算机 连接到目标器件 PHY、逻辑上似乎 可以通过  内部 PHY 实现高速而不是全速运行。

    否则,USBHostEndpointSpeed()允许我们设置主机控制端点0和 /或除0之外的其他配置端点的速度。

    TM4C1294 USB 2.0协议并不 是计算机行业向公众投影的比 USB 1.1快得多的协议。  描述符 BCD 似乎决定了器件连接速度、0x200与0x110没有区别。 因此、我们现在要尝试 LS 配置、只 需更改器件描述符字段中的 BCD 0x100即可。    

    bcdusb 字段报告器件支持的最高版本的 USB。 该值采用二进制编码小数、格式为0xJJMN、其中 JJ 是主要版本号、M 是次要版本号、N 是次要版本号。 例如、USB 2.0报告为0x0200、USB 1.1报告为0x0110、USB 1.0报告为0x0100。

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    事实似乎表明 Tivaware 大容量流末尾管道1只有64字节数据包。 全速需要更小的数据包大小(文本下方)。 然而、我重新配置了512字节数据包的流1末尾管道/描述符、它的工作效果甚至优于64字节数据包长度、全速模式。 但是、上述批量描述符后的 BCD 更改0x0200 (USB2.0)对器件主机连接速度上升到 HS 模式没有任何影响。 似乎 DCD 器件不能在 LS 模式(1.5Mbps)下运行、即使用于测试目的也是如此。

    然而、端点1配置中的512字节数据包提高了 FS 模式数据吞吐量。 主机端点似乎可以接受并消化大于64字节的数据包大小、从而减少通过 DMA 进行环形缓冲器传输的目标负载。 可能是因为典型的 USB2.0计算机 PHY 没有以相同的方式限制速度、而 TM4C1294已通过内部 PHY 限制为 FS 模式。 我怀疑 Tivaware 器件中所有终端管道 DCD 配置的情况相同、这些配置将内部 PHY 限制为 FS 模式或64字节数据包。


    批量传输:
    μBlack medium small square用于传输大量突发数据。
    Black medium small square通过 CRC 进行错误检测、并保证交付。
    Black medium small square不保证带宽或最小延迟。
    μBlack medium small square管道流-单向
    Black medium small square全速和高速模式。

    批量传输仅受全速和高速器件支持。 对于全速端点、最大批量数据包大小为8、16、32或64字节长。 对于高速端点、最大包长可达512字节。 如果数据有效载荷低于最大数据包大小、则不需要用零填充。 当批量传输传输所请求的数据的精确数量、传输的数据包小于最大端点大小、或者传输零长度的数据包时、视为已完成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101、

    我将此主题从我们的其他客户主题中分离出来、因为您希望继续讨论。 我将此帖子链接到该主题、以便任何感兴趣的方继续关注。

    正如您所确定的、是的为了遵循 USB 标准、我们在 FS 模式下使用64字节数据包。 您可以按照描述的方式提高吞吐量、但由于不再遵循 USB 标准、因此您必须在从不实际与 USB 标准主机交互的闭环系统中实现吞吐量。

    符合 USB2.0标准的计算机 PHY 将请求有关连接的器件信息、TM4C 将回复其为全速器件、因此、除非 TM4C 配置为 HS 模式并使用外部 PHY 进行驱动、否则计算机将限制速度并使用64字节数据包 高速通信。

    关于带 TM4C 的 USB2.0的整个主题、我们的数据表反复列出了高速运行或2.0运行需要外部 PHY。

    "USB 2.0控制器 OTG/主机/器件、可通过 ULPI 接口使用外部 PHY 实现可选高速

    "具有与外部 PHY 通信的集成 ULPI 接口的 USB 2.0高速(480Mbps)运行"

    在方框图上:"USB OTG (FS PHY 或 ULPI)"

    虽然我们可能会同意在这一主观的陈述清晰度主题上存在分歧、但我想说、我们已完成工作、正确标注了器件的功能、并概述了从2.0高速规范的角度来看哪些内容符合和哪些内容不符合。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Ralph Jacobi]USB2.0兼容计算机 PHY 将请求有关连接的器件信息、TM4C 将回复它是全速器件、因此、除非 TM4C 使用外部 PHY 配置为 HS 模式、否则计算机将限制速度并使用64字节数据包 以驱动高速通信。[/quot]

    为了进行 CDC 讨论、该线程从中分离出来、 请注意以下计数点;

    1999  年以后的 USB2.0计算机设计为在 HS 模式下与附加器件一起运行、不要   像 Tivaware USB 库所做的那样通过64字节数据包限制 USB 端口。  

    2.  节流的 PHY 全速(12Mbps)似乎 与远程主机连接不符合 USB2.0标准。 免责声明如下;

    TM4C1294KCPDT USB 控制器在与 USB 主机、器件或 OTG 功能进行点对点通信期间作为全速或低速功能控制器运行。

    3.虽然我想测试低速 设备模式,但设备模式不能降至全速以下,并且可能会纠正 随机出现原因不明的挂起描述符的问题。  

    4. 下面的免责声明数据表 也不是对1999年后 USB2.0高速器件模式的一般理解,计算机使用和配置 了器件连接主题。   

    ■USB 2.0高速(480Mbps)运行、具有与外部 PHY 通信的集成 ULPI 接口

    5. VBUS 封装引脚和 寄存器上的链路状态信令和/或电流检测对  PWM 驱动器件几乎没有抗噪(全速)功能。

    ■链路电源管理支持、该支持使用链路状态感知来降低功耗。

    完全符合 USB2.0器 件标准的情况可能是 USB 库降低了数据包传输速率、以符合有限的 PHY。  这些有限的64字节数据包  是1999年以后生产的计算机意外的,这些计算机很容易将512字节数据包紧缩起来。 不管怎样、它们仍然保持512K 的数据包、因为设备端点管道配置为这样、主机不会拒绝较大的数据包。

    /*将 USB0输出端点配置为512字节最大包大小、
    * EP_0为控制端口数据保留前16个字节。
    * USB_EP_2、USB_EP_3、USB_EP_4、USB_EP_5、USB_EP_6、USB_EP_7 *
    USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、
    (USB_EP_MODE_BULK_|USB_EP_AUTO_CLEAR);//USB_EP_AUTO_REQUEST (EPN 主机)
    //在端点配置 USB0,最大数据包大小为512字节*/
    USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、
    (USB_EP_MODE_BULK_USB_EP_AUTO_SET); 

    7.让 USB FIFO 有更多空间来改善数据包的 Put of Ring Buffer 处理:

    /*将 EP_1 (RAM)输入/输出起始地址配置为64 / 576字节进入 FIFO
    *必须位于8字节边界上*/
    USBFIFOConfigSet (USB0_BASE、USB_EP_1、64、USB_FIFO_SZ_512、USB_EP_DEV_OUT);
    USBFIFOConfigSet (USB0_BASE、USB_EP_1、576、USB_FIFO_SZ_512、USB_EP_DEV_IN); 

    最后、让我们通过  其他  USB 库路径/方法、改进通过 Ring Buffer 512字节传输到复合器件所利用的数据包中断的 DMA 处理。 注 8配置的器件端点总数存在、例如 (EP1-EP7)是单向流、支持大数据包、 EP0 保持 64字节控制数据包、不在点或点以上配置。  

    //在端点 DMA 通道模式1中配置,通常用于传输
    *跨多个数据包,并且数据包之间不需要中断。 *
    USBEndpointDMAConfigSet (USB0_BASE、USB_EP_1、
    USB_EP_DEV_IN | USB_EP_DMA_MODE_1 | USB_EP_AUTO_SET);
    /*为输出端点1配置 DMA 通道模式1 */
    USBEndpointDMAConfigSet (USB0_BASE、USB_EP_1、
    USB_EP_DEV_OUT | USB_EP_DMA_MODE_1 | USB_EP_AUTO_CLEAR); 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101、

    您应该再次阅读 USB 2.0规范。

    "USB 将允许的最大批量数据有效载荷大小定义为:对于全速端点、只允许8、16、32或64字节;对于高速端点、只允许512字节。"

    其他端点类型也是如此、但等时传输为1、023个字节。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我并不总是相信我在互联网上读到的是福音,特别是在 USB 的一个简单的说。 它很好地尝试将批量描述符最大包与控制 EP0 64字节限制相混淆。 您必须问、为什么地球上的12Mbps 管道流被限制为64字节数据包或帧、并且似乎是从1.0规范的一部分中获取的。 逻辑上、如果主机端复合驱动器无法接受512K 数据包、则会 NAK 目标方、并且不传输任何数据包、甚至会使端管道停止。

    逻辑上、12Mbps 高于最低以太网10Mbps 速度、并以心跳传输512字节数据包。 器件流管协议提到 ACK/NAK/STALL 在 FIFO 保持填充而不填充剩余空间的条件下。 尝试添加 USB 环形缓冲区调用 USBBufferWrite()以替换回显字符处理程序。 USB 缓冲区写入 指向 复合(USB_bulk_struct.c)中定义的缓冲区空间、这是任何人都能欣赏到的魔术技巧!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 BP101、

    我发布的线路直接超出了 USB.com 上提供的 USB 2.0规范。 我不制定规格、我遵循这些规格。 这与第三方站点或其他来源无关、这是编写和发布的 USB 标准。 我理解您的想法、但我们无法控制 USB 2.0的指定方式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    同意公众被 USB2.0欺骗、以为他们通过升级 USB1.1主板获得了更高的速度。 事实稍后在论坛中发现 USB1.1与 USB2.0全速12Mbps 相同、升级计算机从未改变。 至少这是我的看法 受到实际意见的质疑,而这些意见对这一概念的否定程度更低。

    奇怪的是、配置了1024字节数据包的批量设备描述符和大小相同的 EP1不会发布 Windows 客户端异常。  如果在即插即用管理程序检测过程中 USB2.0定义的描述符(0x0200)数据包大小被看似减小了。 它似乎会通知枚举过程中发生错误或无法枚举设备。 因此、这两种情况都不会发生、因此更大的1024数据包大小也会进一步配合(lmusbdll.lib) FIFO 处理程序所接受的数据包大小。

    根据这些观察结果、批量流管道 FIFO 不限于64字节甚至512字节的数据包。  

    https://www.beyondlogic.org/usbnutshell/usb3.shtml#USBProtocols