AN86947 优化 EZ-USB® FX3™ USB 3.0 的吞吐量 作者:Manaskant Desai、Karthik Sivaramakrishnan 相关项目:有 相关器件系列:EZ-USB ® FX3 软件版本:FX3 SDK v1.3.1 相关应用笔记:无 与前几代产品相比,USB 3.0 可显著提高系统的性能,因为它的信号传输速度达 5 千兆比特每秒(“超高速”)。然而,可实 现的最大数据吞吐量还取决于多个关键因素,如主机 PC 控制器类型、操作系统以及 USB 的设计(传输类型和缓冲区大小)。 本应用笔记提供了各种方法以使用 EZ-USB® FX3™控制器来最大化 USB 3.0 数据传输速度。 简介 测试设置 赛普拉斯的 EZ-USB FX3 是新一代 USB 3.0 外设控制器, 它可提供高度集成性和多项灵活功能,帮助开发人员轻松将 USB 3.0 功能添加到任何系统内。 USB 3.0 的信号速率为 5 Gbits 每秒,该速度是 USB 2.0 支 持的速率的 10 倍。FX3 器件可提供的数据吞吐量接近于 USB 3.0 规格所支持的理论最大值。 图 1 显示了本应用笔记的测试设置。通过它的 USB 3.0 连 接器将 FX3 开发套件(DVK)连接至 PC 主机,可以执行 测试。 图 1. 本应用笔记的测试设置 USB 3. 0 主机 (PC) FX 3 DVK 控制中心, 用于 编程FX3 FX3 支持下面所有超高速传输类型:控制、同步、批量和 中断传输,但转移大量数据时不应使用控制传输。因此,本 应用笔记总结的各指南可用于获取同步、批量和中断等传输 类型的最大吞吐量。 EP OUT U S B USB3.0 CPU 或 GPIF II U S B Streamer 应用程序, EP IN 用于数据传输 FX3 通常作为一个桥接器件,用以传输 USB 3.0 主机和外 部器件(如图像传感器、ASIC 或 FPGA)之间的数据。基 于 FX3 应用得到的数据吞吐量取决于下面多个因素:USB 传输类型,传输数据(如突发大小和 FX3 器件中使用的数 据缓冲量),以及主机控制器和所使用的 OS 平台。 表 1. 四种传输测试的代码图像 测试 使用 FX3 开发板时,本应用笔记将通过使用不同的主机和 操作系统对策略进行测试和对比。此笔记通过提供 FX3 配 置详情来使该应用获取 USB3.0 的最大吞吐量。 我们使用一部分简单的 FX3 固件示例来了解每个因素对吞 吐量产生的影响。此外,我们还介绍了用于优化所给应用性 能的指南。 本应用笔记列出了只通过 FX3 内部生成的数据而得到的 USB 3.0 的吞吐量。当数据通过 GPIF II 从外部器件输入 FX3 时, FX3 代码图像 1 USBIsoSourceSink 2 USBBulkSourceSink 3 USBIntrSourceSink 4 GpifToUsb USB 3.0 吞吐量值比较低。请参考 AN65974,了解 FPGA 将数据写入到 FX3 时的吞吐量 www.cypress.com 文档编号:001-98020 版本** 描述 EP1-IN 是 ISO 数据的常量源; EP1-OUT 是 ISO 数据的常量输 入。不存在任何 GPIF II 连接。 与第 1 项相似,但这里使用了 BULK(批量)传输。 与第 1 项相似,但这里使用了 INT(中断)传输。 GPIF II 用于使传输到 EP-IN 的速 度最快,从而执行到 PC 的 BULK 传输操作。这是唯一使用图 1 中 从 GPIF II 到 EP1-IN 的虚线路径 进行的测试。 1 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 图 1 显示的是适用于本应用笔记的设置框图。使用控制中 心应用将固件图像下载到 FX3 的内部 RAM 中。下载后, FX3 可以使用 Streamer 的应用程序进行数据传输操作。为 了便于使用,附带文件中提供了控制中心、C++ Streamer 的应用程序二进制文件以及赛普拉斯 USB 3.0 驱动程序 (CyUSB3.sys)等。附带文件所提供的 Streamer 应用程 序已被配置,以提供最佳性能数量。 要想下载最新的 FX3 SDK,请访问: www.cypress.com/?rID=57990。 要查找 Streamer 的应用程序的 C++版本,请在安装 SDK 后使用下面的路径: C:\Program Files\Cypress\EZ-USB FX3 SDK\1.3\application\cpp\streamer\x86\Release 该 Streamer 的应用程序用户界面会显示下面各项: Endpoint(端点):通过该下拉列表,您可以选择不同的 传输类型和端点缓冲区数量。 Packets per Xfer(每 Xfer 的数据包数量):传输指的是 一组数据的数据包集合。每次传输中含有的数据包越多,则 开销越少,实现的数据速率也会越高。 Xfers to Queue :该设置有助于启动多个传输,并把它们 添加到任务队列中。该项减小了主机应用端连续传输间的延 迟。因此,排列的传输次数越多,数据速率也越高。 Successes(成功):表示在流式测试期间成功传输的数 据包总数的增量。 注意:在 64 位 Windows 电脑上,程序文件的目录是 “Program Files (x86)”。 Failures(失败):随缓冲区传输的错误报告而增加。器件 中没有任何数据会引发故障。 图 2 显示的 Streamer 应用程序支持四种传输测试(如表 1 所示),并将其作为“吞吐量表”。该笔记使用了 Streamer 的应用程序的 C++版本来测量三种传输类型(同 步、批量和中断)的性能。请注意,由于应用和驱动器等级 开销,C#版本提供了较低的吞吐量。 Transfer Rate(传输速率):提供有关所选端点中 USB 总 线和 EZ-USB FX3 当前吞吐量性能的实时更新。 图 2. C++ Streamer 快照 CPU Utilization(CPU 的使用):提供电脑 CPU 在 USB 流式传输期间利用率的视觉指示。 Timeout Per Xfer(每个 Xfer 的超时):如果在超时期间 没有得到来自器件的数据,则传输失败。默认值为 1500 ms。 表 1 列出了四个代码镜像(.img 文件),将这些文件下载 到 FX3 DVK 中,用以测试带宽。这些模块位于本应用笔记 附赠的.zip 文件中。 USBIsoSourceSink 示例用于测量超高速同步传输的性能。 该示例使用了一对 IN 和 OUT 端点,以连续输入或输出 FX3 器件端的 ISO(同步)数据。 USBBulkSourceSink 示例用于测量超高速批量传输的性 能。该示例也使用了一对 IN 和 OUT 端点,以便连续输入 或输出 BULK 数据。 USBIntrSourceSink 示例用于测量超高速中断传输的性能。 GpifToUsb 示例用于测量从 GPIF 到 USB 间进行传输批量 数据的性能。该示例连续读取来自 GPIF II 基本接口的数 据,然后再通过 IN 端点将这些数据发送给 USB 主机,在该 过程中无需任何固件参与。 www.cypress.com 文档编号:001-98020 版本** 2 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 注意:这些测试传输的 FX3 端不会带来开销,如处理 FIFO 中的数据或转移片下数据。处理开销由应用引起,并且它能 够降低本应用笔记中需要测量的最大吞吐量。请谨慎使用 FX3 GPIF II 和 DMA 的功能,以避免降低吞吐量。该笔记 最后一节介绍的是性能提示,从而最大化 FX3 吞吐量。 在所有代码示例中,指令缓存被使能,而数据缓存被禁用。 推荐保持数据缓存的 OFF 状态,直到固件应用需要执行正 常的数据操作为止。 使用 FX3 DVK 直接连接到 PC 主机来测试所有示例(主机 使用 Intel C216 芯片集系列 USB eXtensible 主机控制器 (XHCI))。使用的操作系统是 64 位 Windows 7,Intel 主机驱动器的版本为 1.0.5.235。 • 使用 USB 控制中心(如图 3 所示)来下载附带文件中 的四个镜像文件的某一个。也可以将其安装成为 FX3 SDK 的一部分(<安装目录>\Cypress\EZ-USB FX3 SDK\1.3\application\c_sharp\ controlcenter\bin\Release) • 打开附带文件中所提供的 C++ Streamer 的应用程序, 选择参数(如中所示),然后单击 Start(启动)按键 • 数据吞吐量会显示为 KB/s 图 3.控制中心快照 性能总结 表 2 总结了分别使用三个 SourceSink 固件版本的三类传输 进行的性能。表中的突发长度 1是指 USB 描述符中上报给 主机的突发大小,“数据包数量”是指在每个服务间隔内所 传输的同步数据包的数量。该参数仅适用于同步和中断这两 种传输对于中断传输,数据包数量始终为 1。欲了解吞吐量 分析的详情,请参见本应用笔记后面的各节。 表 2. 性能总结结果 传输 ISOC BULK INTR 突发 长度 16 16 3 数据包 的数量 3 NA 1 缓冲区大小 (KB) 48 48 3 缓冲区 的数量 2 2 1 吞吐量 (KB/s) 382,700 454,300 23,900 操作说明 如果第一次使用 FX3 开发套件,请参考应用笔记 FX3 入 门。您可以根据下面的指导对上述所有传输类型的吞吐量进 行测量: • 下载本应用笔记随附的‘.zip’文件,该文件包含了固 件、控制中心、C++ Streamer 的应用程序以及赛普拉 斯 USB 3.0 驱动程序。 同步传输 同步传输类型适用于数据流应用,如音频和视频。同步传输 为超高速总线提供得到保证的数据带宽,但不包含交换或重 试。 超高速同步端点支持的最大数据包负载大小为 1024 个字 节。因为数据的生成者不需要等待一个 ACK 直到完成指定 的突发大小,因此突发传输会提高数据的传输速率。FX3 器件支持的最大突发大小为 16,这是由 USB 规范定义的。 1 USB3.0 引用了数据突发,允许通过端点传输某些数据包,而不 需要数据包间的交换。单独端点通过与特殊端点相关的超高速端点 同伴描述符,将上报给主机其突发的能力(比如:每个突发的最大 数据包数量)。 www.cypress.com 文档编号:001-98020 版本** 3 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 但每个超高速同步端点可以根据 USB 3.0 规范,在相同的 服务间隔 2内最多申请三个突发传输(ISO 数据包) (bInterval-1) x 125 µs,其中 可将同步传输的服务间隔指定为 2 bInterval 值的范围为 1 到 16。超高速同步传输类型在每个 服务间隔中都能够传送多达 1024 x 16 x 3 个字节。最小的 服务间隔为 125 µs,因此可以计算出超高速同步传输的最 大理论带宽为(最大数据包大小 * 突发大小 * ISO 数据包数 量 / 服务间隔)。它的工作速度可高达 1024 x 16 x 3 / 125µ bytes/s 或 375 Mbytes/s (3 Gbps)。 使用“USBIsoSourceSink”固件示例来测量FX3上的超高 速同步端点吞吐量。吞吐量取决于突发长度、缓冲区大 小 3、iso数据包以及所使用的DMA缓冲区数量。 通过使用cyfxisosrcsink.h头文件中的定义,可以更改这些 参数: • 使用CY_FX_ISO_BURST定义来设置同步端点的突发 长度 • 使用CY_FX_ISO_PKTS定义来设置每个服务间隔中 ISO数据包突发的数量 • 使用CY_FX_ISOSRCSINK_DMA_ BUF_SIZE定义来设置用于传输的每个DMA缓冲区的 大小。 • 使用CY_FX_ISOSRCSINK_ DMA_BUF_COUNT定义来设置每个端点上所使用的 DMA缓冲区数量。 默认情况下,分别将CY_FX_ISO_BURST和 CY_FX_ISO_PKTS参数设置为15和3。可能某些USB主机 不支持该设置所需的传输带宽,因此它们无法选择配置。在 这种情况下,您可以通过缩小参数中的某个值来降低带宽的 要求。 更改任何一个参数后,您都要重新编译应用。可以将结果固 件二进制文件(USBIsoSourceSink.img)下载到FX3器件 的RAM内,然后可以通过Streamer的应用程序进行测量传 输性能。 表 3. 同步 IN 端点吞吐量结果 突发 长度 8 8 12 12 15 15 ISO数据 缓冲区大小 缓冲区的 吞吐量 理论吞吐量 包数量 (KB) 数量 (KB/s) (KB/s) 1 8 1 63,900 64,000 3 24 1 191,900 192,000 1 12 1 96,000 96,000 3 36 1 287,900 288,000 3 15 1 119,800 360,000 3 15 2 239,500 360,000 15 16 3 3 45 48 2 2 359,900 139,400 360,000 384,000 注意:在 Streamer 的应用程序中,分别将“Packets per Xfer”设置为 256 ,将“Xfers to Queue”设置为 64,可 测量这些吞吐量。如果您正在使用附带文件中的 Streamer 应用程序,则需要注意这些设置内容。 表 4. 同步 OUT 端点吞吐量结果 突发 长度 8 8 12 12 15 16 16 ISO数据 缓冲区大小 缓冲区的 吞吐量 理论吞吐量 包数量 (KB) 数量 (KB/s) (KB/s) 1 8 1 63,900 64,000 3 24 1 191,900 192,000 1 12 1 96,000 96,000 3 36 1 287,900 288,000 3 45 2 359,900 360,000 3 48 1 382,700 384,000 3 16 2 251,200 384,000 注意:在Streamer的应用程序中,分别将“Packets per Xfer”设置为256 ,将“Xfers to Queue”设置为64,可 测量这些吞吐量。如果您正在使用附带文件中的Streamer 应用程序,则需要注意这些设置内容。 通过改变突发长度、ISO数据包和缓冲区数量而得到的 同步吞吐量结果已经列在表3和表4 中。 从上述结果来看,使用同步端点时,FX3 可提供的性能接 近于理论带宽。因此,超高速同步吞吐量主要由每次传输的 突发长度和 ISO 数据包数量决定。 注意:与突发长度为 15 的 IN 传输相比,突发长度为 16 的 IN 传输的吞吐量明显降低。这是由于 USB 主机处理请求较 慢,不是由 FX3 器件所支持的数据传输速率发生变化而引 起的。可以通过改变端点描述符以上报突发长度为 15 的传 输来进行验证,同时仍然保持突发长度为 16 的器件端点的 配置。 如这些结果中所示,推荐使用足够大的 DMA 缓冲区,这样 可以保持一个服务间隔的数据值,从而优化结果。FX3 固 件处理每个 DMA 缓冲区的时间约为 40 µs,该时间比服务 间隔持续的时间短得多。如果在服务间隔期间能够将需要传 输的所有数据装载到一个 DMA 缓冲区内,那么仅需要一个 DMA 缓冲区即能获取最佳的传输速率。 Streamer 的应用程序的截图指出同步吞吐量,如图 4 所 示。如上所示,将“Packets per Xfer”和“Xfers to Queue”选项选为最大的容许值可以实现最佳性能。 2 对于中断和同步端点,主机必须为端点提供服务的指定时间间隔 被称为服务间隔。通过端点描述符可指定中断或同步管道的服务间 隔。 3 启动 FX3 固件中的 DMA 通道时,将配置为 FX3 的 DMA 缓冲 区。 www.cypress.com 文档编号:001-98020 版本** 4 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 表 5. 批量 IN 端点吞吐量结果 图 4. 同步 OUT 端点吞吐量 突发长度 缓冲区大小(KB) 缓冲区的数量 吞吐量(KB/s) 8 8 12 12 16 16 16 16 16 24 24 48 16 16 1 2 1 2 2 2 1 263,100 448,300 305,000 450,000 454,300 351,800 120,500 注意:在 Streamer 的应用程序中,分别将“Packets per Xfer”设置为 256 ,将“Xfers to Queue”设置为 64,可 测量这些吞吐量。如果您正在使用附带文件中的 Streamer 应用程序,则需要注意这些设置内容。 表 6. 批量 OUT 端点吞吐量结果 突发长度 缓冲区大小(KB) 缓冲区的数量 吞吐量(KB/s) 8 8 12 12 16 16 16 16 16 24 24 48 16 16 1 2 1 2 2 2 1 249,900 360,100 289,000 377,000 405,000 364,900 153,800 批量传输 对于需要以不同速率发送大量数据的器件而言,批量传输方 式是最合适的。在这种情况下,传输可以使用所有可用的带 宽。超高速批量传输会根据可用带宽来使用总线,并确保数 据传输和数据的完整性,但不能保证提供任何带宽。批量传 输类型采用了更多的高数据传输速率的应用,如批量存储器 件。当主机能够维持所需的传输速率时,还可将它用于视频 数据传输。 超高速批量端点支持的最大数据包负载大小为 1024 个字 节。这些端点也支持的突发大小为 1~16。(“突发”是指 不需要来自接收端的单独 ACK 信令的一系列 BULK 数据 包)。 由于没有给批量传输分派任何固定带宽,因此无法确定吞吐 量的最大理论值。该值取决于将带宽分配给所有连接到同一 个 USB 主机的其他设备后可用的带宽。如果可将整个带宽 用于一个批量传输,则在预留 20%可能的传输给链路和协 议级开销后,批量传输的最大理论吞吐量约为 4 Gbits/秒。 “USBBulkSourceSink”示例用于测量FX3超高速批量端点 的吞吐量。超高速批量吞吐量取决于突发大小、缓冲区大小 以及缓冲区的数量。 通过使用cyfxbulksrcsink.h头文件中提供的定义,可以更改 这些参数: • 使用CY_FX_EP_BURST_LENGTH定义来设置端点的 突发长度。 • 使用CY_FX_BULKSRCSINK_DMA_BUF_SIZE 定义来设置用于传输数据的每个DMA缓冲区的大小。 • 使用CY_FX_BULKSRCSINK_DMA_BUF_COUNT 定义来设置每个端点上使用的DMA缓冲区数量。 www.cypress.com 注意:在Streamer的应用程序中,分别将“Packets per Xfer”设置为256 ,将“Xfers to Queue”设置为64,可 测量这些吞吐量。如果您正在使用附带文件中的Streamer 应用程序,则需要注意这些设置内容。 表5和表6中列出了因改变突发长度和缓冲区大小而得到的 同步吞吐量结果。 从上述结果可以看出,在最佳状态(没有其他连接到USB 主机的器件共享总线带宽)下,批量传输能比同步传输提供 的吞吐量更大。这些表指出了超高速批量端点吞吐量取决于 突发大小、缓冲区大小以及所使用的DMA缓冲区数量。 如同步传输实例,使用更大的DMA缓冲区可保存更多的数 据突发,从而提高系统性能。通过下面计算,说明了吞吐量 对缓冲区大小的关系: 如果突发大小为16,则可获取的最佳吞吐量是454,300 KB/ 秒。 • 每秒处理的16 KB突发数量为28,400 • 传输16 KB数据所需的平均时间为35 µs • 传输32 KB数据所需的平均时间为70 µs 文档编号:001-98020 版本** 5 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 固件应用通过调用CyU3PDmaChannelGetBuffer和 CyU3PDmaChannelCommitBuffer API来轮流使用每个 DMA缓冲区。性能基准测试表明CPU需要大概40 µs的时间 来调用GetBuffer和CommitBuffer API。 因此,将每个DMA缓冲区限制为一次突发(16 KB)或更低 的值时,会引起处理固件操作设置吞吐量范围。如果将每个 缓冲区大小增大为32 KB(两次突发传输,每次16 KB), 可以确保一个缓冲区的传输平均时间比缓冲区的固件处理的 平均时间更久。这样的设置可使批量数据传输的性能最佳, 固件也参与了该传输操作。 批量IN端点的最大吞吐量为454,300 KB/s或3.7 Gbits/s,批 量OUT端点的最大吞吐量为405,000 KB/s或3.31 Gbits/s。 Streamer的应用程序的截图指出批量吞吐量,如图5所示。 个突发传输操作。中断传输的服务间隔定义和同步传输的相 似。使用一个微帧或 125 µs 的服务间隔时,超高速中断传 输的最大理论带宽计算方法为:(最大的数据包大小 * 突发 大小 / 服务间隔),即(1024 x 3 / 125µ)bytes/s 或 23.43 Mbytes/s。 “USBIntrSourceSink”示例用于测量FX3超高速中断端点 的吞吐量。如同步传输示例,选择DMA缓冲区大小等于每 个服务端点需要传输的数据量。只需要一个DMA缓冲区即 可获取最大的吞吐量。 使用cyfxintrsrcsink.h头文件中的 CY_FX_INTR_BURST_SIZE定义来设置中断端点的突发大 小。 中断传输所获取的吞吐量接近于理论范围,并且对于IN和 OUT端点该值相同。表7显示的是使用不同的突发大小设 置,中断传输所获取的吞吐量。 图 5.批量 IN 端点的吞吐量 表 7. 中断 IN/OUT 端点吞吐量结果 突发 长度 1 2 3 缓冲区大小 (KB) 1 2 3 缓冲区 的数量 1 1 1 吞吐量 (KB/s) 7900 15,900 23,900 理论吞吐量 (KB/s) 8000 16,000 24,000 注 意 : 在 Streamer 的 应 用 程 序 中 , 将 “Packets per Xfer”选为 256、“Xfers to Queue”选为 64,可以测量 这些吞吐量。如果您正在使用附带文件中的 Streamer 应用 程序,则需要注意这些设置内容。 Streamer 的应用程序的截图指出中断吞吐量,如图 6 所 示。 AUTO DMA 通道上从 GPIF 到 USB 的 性能 中断传输 对于要求数据可靠性高并要保证最大服务间隔的器件,中断 传输类型最为合适。超高速中断传输通过使用交换和重试的 方式提供了一个受保证的服务间隔和数据传输。中断传输类 型更适合于 HID 器件(如鼠标和键盘),而不经常使用在 吞吐量的关键应用中。 超高速中断端点支持的最大数据包负载大小为 1024 个字 节。根据 USB 3.0 的规范,超高速中断传输支持的最大突 发只有 3 个数据包。此外,它还支持每个服务间隔中的一 www.cypress.com 上述所有示例中所获得的传输性能都受固件执行的影响,并 且将 DMA 缓冲区大小保持足够大时,得到的结果更好。通 过本应用笔记附赠的 GpifToUsb 固件示例可测量出在各种 端点突发设置、突发大小以及 DMA 缓冲区大小中,数据传 输如何变化。 该示例使用了一个微型 GPIF 状态机; 每当 GPIF 端的 DMA 缓冲区可用时,该状态机便会持续填充数据。它不需 要外部器件来驱动任何信号,并且只在整个 DMA 缓冲区填 滿状态才做数据传输,以達到最佳速率。本应用笔记附带了 该状态机的 GPIF II Designer 项目,它位于 continuous_read.cydsn 文件夹中。 文档编号:001-98020 版本** 6 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 • 图 6. 中断 IN 端点的吞吐量 使用 CY_FX_DMA_BUF_COUNT 定义来设置使用的 DMA 缓冲区数量。 通过 GPIF 接口的数据速率来决定理论上的最大性能。在这 种情况下,GPIF 接口在时钟率为 100.8 MHz 和 32 位宽的 数据总线下运行。因此最大可能数据速率为 403.2 Mbps。 表 8 显示了使用该固件应用获取各种突发长度、DMA 缓冲 区大小和 DMA 缓冲区数量导致的吞吐量。 图 7 显示了一个图形,用以说明在使用不同的突发长度设 置和 DMA 缓冲区数量时传输性能如何改变。图形中的每条 曲线均代表不同的 DMA 缓冲区数量,其范围从单个保存一 次突发数据的缓冲区到四个保存三次突发数据的缓冲区。 使用一个 DMA 缓冲区时得到的性能很低,因为 GPIF 传输 暂停,而 USB 传输正在执行,反之亦然。图形显示传输性 能得到提高,到突发长度达到 8 KB 时为止,然后逐渐降 低。图形还显示当缓冲区大小达到 4 次突发传输的缓冲区 总大小时,会提高传输性能,然后逐渐下降。 通过 AUTO DMA 通道,GPIF II 数据会经过批量 IN 端点被 发送到 USB 主机(AUTO DMA 通道不需要任何固件的干 预)。在该示例的数据路径中,没有任何固件参与,因此可 使用这些结果来确定突发大小、缓冲区大小和缓冲区数量如 何影响传输吞吐量。 该图像同样显示了从 GPIF 到 USB 基于批量传输的应用的 最佳设置是:突发长度为 8 KB,缓冲区大小约为 32 KB。 进一步增加突发长度和缓冲区大小只能提高边缘的性能,但 是这样会增大使用 RAM 空间。 表 8 显示的是在不同的 DMA 缓冲区大小和突发长度的条件 下,传输性能如何改变。上述所有些情况都使用了四个 DMA 缓冲区,但只有单独 DMA 缓冲区的大小不同该图显 示,同保存一次突发传输数据的 DMA 相比,能保存两次突 发传输数据的缓冲区可显著提高传输的性能。进一步增大缓 冲区大小几乎不起任何作用。该图形显示 DMA 缓冲区的理 想尺寸为端点突发长度的两倍。 使用 cyfxgpiftousb.h 头文件中的定义,改变这些参数。 • 使用 CY_FX_EP_BURST_LENGTH 定义来设置端点 的突发大小。 • 使用 CY_FX_DMA_BUF_SIZE 定义来设置所使用的每 个 DMA 缓冲区大小。 表 8. GPIF 到 USB 批量传输的吞吐量结果 突发长度 (KB) 每个 DMA 缓 冲区的大小 1 1 1 2 2 2 4 4 4 8 8 8 16 16 16 一个突发 两个突发 三个突发 一个突发 两个突发 三个突发 一个突发 两个突发 三个突发 一个突发 两个突发 三个突发 一个突发 两个突发 三个突发 www.cypress.com 使用一个 DMA 缓冲区得 到的传输性能(KB/s) 使用两个 DMA 缓冲区 得到的传输性能(KB/s) 使用三个 DMA 缓冲区 得到的传输性能(KB/s) 使用四个 DMA 缓冲区 得到的传输性能(KB/s) 115,200 – – 160,600 – – 196,000 – – 202,100 – – 170,700 – – 229,000 – – 333,100 – – 368,800 – – 380,700 – – 386,900 – – 308,500 – – 346,000 – – 369,600 – – 382,100 – – 387,700 – – 310,800 346,700 356,800 347,100 369,600 377,300 370,100 381,900 385,600 382,100 387,700 389,500 388,600 391,200 394,000 文档编号:001-98020 版本** 7 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 注意:在 Streamer 的应用程序中,分别将“Packets per Xfer”设置为 256 ,将“Xfers to Queue”设置为 64,可测量这些 吞吐量。如果您正在使用附带文件中的 Streamer 应用程序,则需要注意这些设置内容。 图 7. 突发大小引起的 USB 性能变化 GPIF to USB Performance against Burst Size 450.0 400.0 Performance in MBps 350.0 1 burst 300.0 2 burst 250.0 3 burst 4 burst 200.0 8 burst 150.0 12 burst 100.0 50.0 0.0 1 2 4 8 15 16 Burst length in KB 图 8. DMA 缓冲区大小引起的 USB 性能变化 GPIF to USB Performance against Buffer Size 450.0 400.0 Performance in MBps 350.0 1 300.0 2 250.0 4 200.0 8 150.0 16 15 100.0 50.0 0.0 1 burst 2 burst 3 burst Size of each DMA buffer 主机控制器的性能比较 所使用的 USB 主机功能会影响得到的 USB 数据的吞吐量大小。为了说明该从属性,将为各种 USB 3.0 主机控制器测量超高速 批量 IN 的吞吐量,同时保持所有其他测试参数不变。通过使用在 Windows 7 下运行的多种电脑版 USBBulkSourceSink 示例进 行测试。 www.cypress.com 文档编号:001-98020 版本** 8 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 表 9 对四个内置 USB 3.0 主机控制器的吞吐量进行了比较。Intel 的主机控制器优于其他 USB 3 主控制器约 20%。通常,与内置 的 USB 3.0 主控制器相比,卡带 USB 3.0 的吞吐量更低。 表 9. 主机控制器的 BULK IN 的吞吐量 USB 3.0 主机 吞吐量 驱动程序 控制器(内置) (KB/s) 版本 PC 信息 OS 应用 Intel USB 3.0 eXtensible 主机控制器 450,400 Intel(R) 内核(TM) i5-3210M CPU, Intel(R) 7 系列/c216 芯片集系列, Win 7 1.0.9.254 C++ Streamer 64 位 2.5 GHz,4 GB 的 RAM, Service Pack 1 Renesas Electronics 的 USB 3.0 主机控制器 352,100 2.0.34.0 ASMedia 主机控制器 370,200 1.12.5.0 AMD USB 3.0 主机处理器 362,900 1.1.0.153 ® Xfers to Queue (Xfer 队列) 16 1024 字节 256 64 Win 7 C++ Streamer 64 位 16 1024 字节 256 64 AMD FX(TM)-4100 四核心处理器, Win 7 C++ Streamer 8 GB 的 RAM,3.60 GHz, 64 位 Service Pack 1 16 1024 字节 256 64 Win 7 C++ Streamer 64 位 16 1024 字节 256 64 Intel(R) 内核(TM) i7 CPU, 芯片集:Intel 3400 系列, 4 GB 的 RAM,Service Pack 1 AMD A6-3670 APU,2.70 GHz, 8 GB 的 RAM,Service Pack 1 USB 3.0 主机处 吞吐量 驱动程序 理器(附加卡) (KB/s) 版本 NEC 电子 USB 3.0 主机控制器 突发 最大值数 数据包数 长度 据包大小 量/传输 PC 信息 OS 应用 突发 最大值数 数据包数 长度 据包大小 量/传输 Xfers to Queue (Xfer 队列) ® 300,200 1.0.19.0 Intel Core™ i5-2540M CPU 2.60 GHz,4 GB 的 RAM, Service Pack 1 Win 7 C++ Streamer 64 位 16 1024 字节 256 64 表 10. 操作系统的 BULK IN 吞吐量 操作系统性能的比较 USB 吞吐量也取决于操作系统以及在 USB 主机上运行的软 件。 将为各种操作系统测量超高速批量 IN 的吞吐量,同时保持 所有其他测试参数不变。通过使用能够提供最大数据传输速 率的 USBBulkSourceSink 应用进行该测试操作。在所有操 作系统(Windows、Mac 和 Linux)中都使用了 Intel 3.0 主 机。 通过基于开放源 Libusb 库的控制台应用来测量 Linux 和 Mac OS X 操作系统的吞吐量。表 10 对各项性能进行了比 较。要想使用该控制台应用,请通过下面的网站下载 Linux 的 FX3 SDK 以及 Mac 操作系统的包装器库: www.cypress.com/?rID=57990。 操作系统 吞吐量 (KB/s) Windows 7 Windows 8 Mac OS X Linux (Intel 主机) (Intel 主机) (Intel 主机)(Intel 主机) 454,300 453,500 420,100 405,400 影响吞吐量的其他因素 如前面所述,主机控制器和操作系统均会改变吞吐量。如果 将多个 USB 器件连接到同一个主机,则会降低吞吐量。推 荐使用一个得到 USB-IF 认证的 USB 线缆,以获取最佳结 果。与集成的 USB 主机控制器相比,连接到主机适配器卡 的 USB 器件提供的吞吐量更低。 在需要将数据传出/传入外部器件的应用中(这些器件通过 GPIF II 接口进行连接),吞吐量也取决于 GPIF II 数据传 输速率以及 CPU 处理时间(如果它需要接触数据)。 www.cypress.com 文档编号:001-98020 版本** 9 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 如果要为这样的传输使用批量端点,请尽量加大 DMA 缓冲 区的数量。这样可以抵消因 USB 主机在传输数据过程中长 期停止而对吞吐量产生的影响。 使用同步传输时,建议每个 DMA 缓冲区保存的是一个服务 间隔中的数据。因为在这种情况下主机提供了传输带宽保 障,无需使用大量缓冲区。 如果 FX3 固件当前没有进行任何数据操作,请使用 AUTO DMA 通道,以避免因固件设计所导致的性能限制。如果需 要固件进行数据操作,则回调 DMA 来发送数据会快于从线 程发送。比如,在 USB 视频类别的应用中,固件将标头信 息添加到数据块内。此外,强烈推荐通过删除调试信息来将 处理代码的关键数据保持为最小值。 (应用笔记 AN75779 — 在 USB 视频类别(UVC)框架中 如何使用 EZ-USB® FX3™实现图像传感器接口提供了一个 示例来说明固件如何实现 UVC。) 建议使用 FX3 API 的发布版本和 RTOS 库;将编译器的优 化级别设为“-O2”或“-O3”。 www.cypress.com 其他资源 应用笔记 AN65974 — 使用 EZ-USB® FX3 从设备 FIFO 接 口进行设计说明了有关从设备 FIFO 接口的详细信息,并包 含了从设备 FIFO 应用的特性测量。请参见“流式传输的流 程”一节,了解使用从设备 FIFO 应用测得的吞吐量。 请参考 FX3 SDK 故障排除指南中第 2.4 一节,了解有关 USB 连接级别可影响系统吞吐量的因素。本文档是 FX3 SDK 安装程序的一部分,位于下面的文件夹内: C:\Program Files\Cypress\EZ-USB FX3 SDK\1.3\doc。欲 了解更多有关 USB 超高速协议的信息,请参阅 USB 3.0 规 范(http://www.usb.org/developers/docs/)。 总结 本应用笔记提供了使用 EZ-USB FX3 来获取 USB 3.0 最佳 吞吐量的指南。我们已经对不同的传输参数所导致的吞吐量 变化进行了分析,从而确认每个传输类型中的最重要的参 数。同样还对主机控制器的操作系统的吞吐量进行了比较, 从而说明影响 USB 吞吐量的因素。 文档编号:001-98020 版本** 10 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 文档修订记录 文档标题:AN86947 — 使用 EZ-USB® FX3™优化 USB 3.0 的吞吐量 文档编号:001-98020 版本 ECN 变更者 提交日期 ** 4802498 WEIZ 07/28/2015 www.cypress.com 变更说明 本文档版本号为 Rev**,译自英文版 001-86947 Rev*A。 文档编号:001-98020 版本** 11 ® 使用 EZ-USB FX3™优化 USB 3.0 吞吐量 全球销售和设计支持 赛普拉斯公司拥有一个由办事处、解决方案中心、厂商代表和经销商组成的全球性网络。要找到距您最近的办事处,请访问赛普 拉斯所在地。 PSoC® 解决方案 产品 汽车级产品 cypress.com/go/automotive psoc.cypress.com/solutions 时钟与缓冲器 cypress.com/go/clocks PSoC 1 | PSoC 3 | PSoC 4 | PSoC 5LP 接口 cypress.com/go/interface 赛普拉斯开发者社区 照明与电源控制 cypress.com/go/powerpsoc cypress.com/go/plc 存储器 cypress.com/go/memory PSoC cypress.com/go/psoc 触摸感应 cypress.com/go/touch USB 控制器 cypress.com/go/usb 无线/射频 cypress.com/go/wireless 社区 | 论坛 | 博客 | 视频 | 培训 技术支持 cypress.com/go/support EZ-USB 和 FX3 是赛普拉斯半导体公司的注册商标。此处引用的所有其他商标或注册商标归其各自所有者所有。 赛普拉斯半导体 198 Champion Court San Jose, CA 95134-1709 电话 传真 网址 :408-943-2600 :408-943-4730 :www.cypress.com ©赛普拉斯半导体公司,2013-2015。此处,所包含的信息可能会随时更改,恕不另行通知。除赛普拉斯产品内嵌的电路外,赛普拉斯半导体公司不对任 何其他电路的使用承担任何责任。也不会根据专利权或其他权利以明示或暗示的方式授予任何许可。除非与赛普拉斯签订明确的书面协议,否则赛普拉斯 产品不保证能够用于或适用于医疗、生命支持、救生、关键控制或安全应用领域。此外,对于可能发生运转异常和故障并对用户造成严重伤害的生命支持 系统,赛普拉斯不授权将其产品用作此类系统的关键组件。若将赛普拉斯产品用于生命支持系统中,则表示制造商将承担因此类使用而招致的所有风险, 并确保赛普拉斯免于因此而受到任何指控。 该源代码(软件和/或固件)均归赛普拉斯半导体公司(赛普拉斯)所有,并受全球专利法规(美国和美国以外的专利法规)、美国版权法以及国际条约 规定的保护和约束。赛普拉斯据此向获许可者授予适用于个人的、非独占性、不可转让的许可,用以复制、使用、修改、创建塞普锐思源代码的派生作 品、编译塞普锐思源代码和派生作品,并且其目的只能是创建自定义软件和/或固件,以支持获许可者仅将其获得的产品依照适用协议规定的方式与赛普 拉斯集成电路配合使用。除上述指定的用途外,未经赛普拉斯的明确书面许可,不得对此类源代码进行任何复制、修改、转换、编译或演示。 免责声明:赛普拉斯不针对此材料提供任何类型的明示或暗示保证,包括(但不仅限于)针对特定用途的适销性和适用性的暗示保证。赛普拉斯保留在不 做出通知的情况下对此处所述材料进行更改的权利。赛普拉斯不对此处所述之任何产品或电路的应用或使用承担任何责任。对于合理预计可能发生运转异 常和故障,并对用户造成严重伤害的生命支持系统,赛普拉斯不授权将其产品用作此类系统的关键组件。若将赛普拉斯产品用于生命支持系统中,则表示 制造商将承担因此类使用而招致的所有风险,并确保赛普拉斯免于因此而受到任何指控。 产品使用可能适用于赛普拉斯软件许可协议的限制。 www.cypress.com 文档编号:001-98020 版本** 12