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.
**按论坛主持人编辑** 此主题讨论与原始帖子无关,并分为新主题,以便更好地区分 各个问题。
原始 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外设或客户端。
尊敬的 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。
[引用 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);
我并不总是相信我在互联网上读到的是福音,特别是在 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