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.

[参考译文] DK-TM4C129X:需要 DK-TM4C129X 上的 USB2.0器件支持

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/816715/dk-tm4c129x-need-usb2-0-device-support-on-dk-tm4c129x

器件型号:DK-TM4C129X

您好!

我将 DK-TM4C129X 板用作批量传输器件。 当我的 Windows 主机连接到 OTG USB 端口时、一切工作正常、但传输速率仅为800kb/s、我需要40Mb/s 我认为问题是 OTG 端口是 USB 1.1端口。 我知道该板具有 USB2.0 MAC。 如何使该板作为 USB 2.0器件连接到主机? 我必须进行哪些硬件和软件更改? 是否有其他支持 USB2.0器件的 TI 开发板?

谢谢

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

    Phil、您好、

    该板未安装 USB 2.0 PHY、您需要通过  EPI ULPI 接口将一个 PHY 连接到该板。

    我们没有销售的具有 USB 2.0功能的开发板、但我们有一个 TI 设计、其中包括已制作和测试的用于支持 USB 2.0的板的 BOM 和光绘文件。

    此外、如果您决定尝试将 USB PHY 添加到 EPI ULPI 接口、还可以使用该软件。 这将向您显示所需的软件更改。

    TI 参考设计链接为 :http://www.ti.com/tool/TIDM-TM4C129USBHS

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

    您好、Ralph、

    我正在使用示例项目 USB_DEV_BULK、并尝试添加代码以启用 USB 高速支持。

    我签出了项目 TM4C129USBHS-1.0\TIDM_tm4c129cusbhs2ethernet、并将高速相关代码复制到 USB_dev_bulk.c 中的 main ()函数

    我注意到 driver/pinout.c 文件包含一个函数 USBULPIPinoutSet(),因此我定义了 use_ULPI 以包含此函数。

    在 main()中,我在  PinoutSet()之后添加了 USBULPIPinoutSet()。 我还  在设置 USBPLL 后添加了 USBDCDFeatureSet (0、USBLIB_FEATE_USBULPI、\ui32ULPI)。    

    SysCtlVCOGet (SYSCTL_XTAL_25MHz、\ui32PLLRate);
    USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&ui32SysClock);
    USBDCDFeatureSet (0、USBLIB_Feature_USBPLL、&ui32PLLRate);

    ui32ULPI = USBLIB_FEATE_ULPI_HS;                //设置用于高速的 ULPI 选项
    USBDCDFeatureSet (0、USBLIB_Feature_USBULPI、&ui32ULPI);      //这会导致 USBDBulkInit()锁定

    但是、设置 USBLIB_FEATE_USBULPI 会导致函数 USBDBulkInit (0、&g_sBulkDevice)锁定。

    我缺少什么? BTW、我尚未安装任何 USB2.0 PHY。 我正在从亚马逊订购 USB3300模块。

    另一个问题是控制 GPIO 以复位和启用 PHY 模块。

    我可以在 DK-TM4C129X 上使用哪个备用 GPIO? 我如何将它们作为输出。 我对这一点不太困惑。

    在 TIDM_tm4c129cusbhs2ethernet.c 的 main()中,我看到它使用很少的 GPIO 来控制到 PHY 的复位。 但我看不到这些 IO 引脚引出到连接器。 我假设以下代码不能直接用于我的电路板。 再说一次、我可以使用哪个备用 IO?

    bUSBBusMode = true;
    GPIOPinWrite (GPIO_Porth_BASE、(GPIO_PIN_2 | GPIO_PIN_3)、GPIO_PIN_3);

    //
    //切换到 USBHS 并释放复位到 ULPI PHY
    //
    MAP_GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_7、0);
    MAP_GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_5、0);

    感谢你的所有帮助。

    Phil

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

    Phil、您好、

    如果您没有连接 PHY、则无法启用 ULPI、如果没有 PHY、它将无法工作、因为它不会在其查找的位置看到任何数据。 您首先需要 PHY。

    在我最初的帖子中、我说过将 PHY 连接到 EPI 接口、但我指的是 ULPI 接头。 您可以在左侧看到它们标记为 ULPI/LPC。

    至于 GPIO、可以使用不用于 ULPI 或其他外设的任何备用 GPIO、有很多、没有需要遵循的具体建议、所以只需选择您认为不需要多路复用外设的选项即可。

    我还想、对于 TI 设计、也将其整合在一起、使电路板能够同时执行 FS 和 HS、因此这由您决定这种功能的重要性。

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

    拉尔夫

    好的、当我获取 USB2.0 PHY 时、我将重试。

    BTW、我在另一篇文章中看到、建议将 ui32PLLRate 设置为0。 哪种方式适用于高速?

    //
    //将 CPU 时钟和 PLL 频率告知 USB 库。 这是一个
    // TM4C129器件的新要求。
    //
    SysCtlVCOGet (SYSCTL_XTAL_25MHz、\ui32PLLRate);
    //ui32PLLRate = 0;//对于高速 PHY????
    USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&ui32SysClock);
    USBDCDFeatureSet (0、USBLIB_Feature_USBPLL、&ui32PLLRate);

    7月4日、您会过得愉快。

    谢谢

    Phil

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

    Phil、您好、

    我不知道为什么它会设置为0、这毫无意义。 此外、该代码似乎会被注释掉。

    在我们的 HS 示例代码中、我们根据 实际 PLL 设置 ui32PLLRate:

    SysCtlVCOGet (SYSCTL_XTAL_25MHz、\ui32PLLRate); 

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

    您好!

    我有 Waveshare USB3300 PHY 模块、并通过3英寸跳线连接到 DK-TM4C129X 板。 我将 TI 参考项目 TIDM_tm4c129cusbhs2ethernet 中的 USB 高速相关代码添加到了 USB_dev_bulk.c 在 USB_DEV_BULK 项目属性中,我添加了预定义的 USE_ULPI,以便 可以调用 USBULPIPinoutSet()。

    当我运行代码时、当  使用 USBLIB_FEATE_ULPI_HS 或 FS 调用 USBDCDFeatureSet (0、USBLIB_FEATURE_USBULPI、&ui32ULPI)时、它锁定在 USBDBulkInit()。 Windows 主机报告"USB 设备未识别"、设备管理器显示 未知 USB 设备(设备描述符请求失败)。

    USB HS 的描述符在哪里? 我是否需要对其进行任何更改?

    我已检查 USB3300模块上的时钟引脚。 它输出一个60MHz 时钟。 我将复位接地、因为 PHY 始终开启。

    我比较了 Waveshare 和 TI 参考设计之间的 USB3300电路。 我看到 TI 设计上的 ID 上拉、Wavesare 连接到 USB 连接器。 我探测了 Waveshare USB3300模块上的 ID 引脚、它是高电平。 我认为 ID 引脚不是这里的问题。

    我附加了项目 USB_DEV_BULT-HS 以及 USB3300模块和 TI USBHS 设计的原理图。 请查看我的代码以查看我遗漏的任何代码。

    我是否有办法为您提供 Waveshare USB3300模块、以便您帮助使其正常工作?

    TI 是否会使用 USB 2.0 PHY 制造另一个 DK 电路板?

    请帮助。

    谢谢

    Phil

    e2e.ti.com/.../USB3300_2D00_USB_2D00_HS_2D00_Board_2D00_Schematic.pdfe2e.ti.com/.../Schematic_5F00_tidrpl3.pdfe2e.ti.com/.../usb_5F00_dev_5F00_bulk_2D00_HS.zip

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

    Phil、您好、

    所有初始化看起来都正确、如果总线通信不正常、我相信您不会看到描述符故障。 看起来您使用的是与设计相同的描述符、因此也应该很好。

    您是否曾尝试使用 http://software-dl.ti.com/tiva-c/SW-TM4C/latest/exports/SW-TM4C-2.1.4.178.PATCH-1.0.zip 上的最新 USB 驱动程序

    如果这不起作用、您将需要保留 USB 分析器、以便可以查看要调试的总线流量。 如果您可以发布日志、我可以在这方面提供帮助、我可以查看描述符的失败之处。

    遗憾的是、接收硬件进行调试并不是我们为 E2E 支持所做的事情。

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

    拉尔夫

    是的、我使用的是 TI 的最新 Win 驱动程序。

    我将跳线长度剪切为大约1"、以将 USB3300模块连接到 DK 板。 当我给电路板上电时、Windows 无法识别器件。 当我按下"重置"时、不会发生任何情况。

    随附 LeCroy Mercury USB 分析仪的屏幕截图。 请看一下。

    我还尝试将复位切换到 USB3300、但没有帮助。 Windows 根本看不到任何设备。

    谢谢

    Phil

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

    拉尔夫

    我按下了电路板复位按钮、直到代码通过 USBDBulkInit()、并且 USB 分析器捕获了流量。 请参阅随附的屏幕截图。 我想导出数据、但不确定如何导出。

    Windows 未在此 DK 电路板的 ULPI 中看到任何 USB 器件。

    请帮助。

    谢谢

    Phil

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

    您好、Ralph、

    我让 USB3300正常工作。 出于某种原因、USBPLL 必须设置为0。 有人知道原因吗?

    ui32PLLRate = 0;         对于高速 PHY、//必须设置为0
    USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&ui32SysClock);
    USBDCDFeatureSet (0、USBLIB_Feature_USBPLL、&ui32PLLRate);

    现在、Windows 将 DK 的 ULPI 视为高速 USB 器件。 但是、我只能获得7.8Mb/s 的传输速率。 在我使用 Cypress FX3的另一个项目上、我可以获得高达46.5MB/s 的传输速率

    我已经将 bulk_buffer_size 设置为2048或4096、并注释掉了所有数据处理和图形代码。 此 ULPI 端口上的传输速率仍然仅为7.8Mb/s  

    要提高批量传输速率、必须采取哪些措施?

    请帮助。

    谢谢

    Phil

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

    Phil、您好、

    我不知道昨天我的答复发生了什么,但似乎没有解决,对此感到抱歉。 虽然我的建议不会有所帮助、因为我认为它可能与接线相关。 不幸的是、我的终端上没有任何 HS 硬件。

    话虽如此、我将不得不研究为什么 HS 需要这么做...

    在传输速度方面、您需要使用 USB DMA 来提高吞吐量。 这是我在待办事项列表中要汇总的一个示例、但尚未准备好。 不过、我可能会找到一些代码提示供您尝试、让我看看我明天可以看到哪些内容。 我认为您可以尝试和执行的另一项操作是也启用双缓冲。

    您是否还验证了数据传输速率是否为每数据包512字节?

    此外、在查看模块的详细信息时、我注意到它甚至不是10美元... 那么、有一个正在向我发送。 不确定发货时间有多长、但当它到达时、如果您没有取得任何突破、我也可以尝试在我的末尾进行调试。

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

    您好、Ralph、

    很高兴听到你的声音。 虽然 DK 电路板现在可以在高速模式下连接到主机、但我确实一直关注传输速率。 是的、它传输512字节的数据包。 除了 USBPLL 需要设置为0、我使用的跳线太长、无法连接 USB3300。 我构建了两个版本、一个具有原型板、另一个具有1"跳线。 原型板和1英寸跳线工作正常。 (请参阅图片)

    还附加了用于 USB 传输的图片。 第一个512字节数据包从11.433.492秒开始、大约需要8.667 μ s 才能完成(60MHz)。 但是、开始传输接下来的512个字节大约需要64 μ s。 因此、有效传输速率为512/64usec = 8 Mb/s

    请告诉我如何使用双缓冲和 USB DMA 将传输速率提高到40Mb/s

    谢谢

    Phil

    USB3300

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

    Phil、您好、

    此设置对您的时间有多敏感? USB3300套件尚未出厂、但我想先进行测试会感觉更舒服。 我现在没有可用的 USB DMA 代码、但我对 HS 需要做什么有了很好的了解、其中包括一些 USB 库调整。 但如果我不能在我的末尾进行测试、我将很难尝试并引导您完成所有工作、我更希望将示例与 HS 和 DMA 一起工作、然后再继续。

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

    拉尔夫

    很高兴您获得了相同的 USB3300模块。 请先让它在您身边工作。 我可以等待。

    在哪里可以找到 TiVA USB 库的开发手册? 我在我的已安装文件夹中没有看到任何内容。

    谢谢

    Phil

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

    拉尔夫

    在此 USB_DEV_BULK 项目中、我还需要设置端点0 (控制)以发送和接收短命令消息。 我查看了所有示例、找不到任何相关代码来设置 EP0。

    如何设置 EP0和接收处理程序以从主机接收控制消息、然后发回响应消息?

    谢谢

    Phil

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

    Phil、您好、

    EP0由 USB 库设置并根据 usblib 传输数据、这就是您在示例中看不到代码的原因。

    诸如 USBDCDSendDataEP0和 USBDCDRequestDataEP0之类的 API 用于控制 EP0、但我从未尝试过在应用层中使用它们。 它们应与  usbdhid.c 内的 HandleEP0DataReceived 和 HandleEP0DataSent 处理程序配合使用 这可能会帮助您找到合适的 EP0数据包路径?

    顺便说一下、您需要多长时间才能收到 Waveshare EVM?

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

    您好、Ralph、

    我从亚马逊订购了三个 USB3300、花费了3到4天时间。 发货标签显示它是由 Contactempo Views Inc、172 Trade St.发运的 Lexington KY 40511

    关于 EP0通信、我在接收消息之前跟踪了代码、发现 usbdbulk.c 没有为 EP0执行任何处理程序。 我需要的是在我的应用程序中接收来自主机的供应商请求。 在 usbdbstub.c - tCustomHandlers g_sBulkHandlers 结构中、我添加了一个条目 HandleRequest 来捕获来自 EP0的非标准请求。 不管用。 在此 HandleRequest 例程中、我通过请求类型进行区分、并将 wValue 保存到全局变量中。 在应用中。 主循环只是查找 wValue 的变化。 很确定有更好的方法。 TI 参考文献并未为应用程序提供通过 EP0进行通信的简单方法、这让我感到非常惊讶。

    希望您很快就能获得 USB3300模块。 我阅读了该文档并看到了一些与 USB DMA 相关的函数、只是不确定如何设置它们。

    谢谢

    Phil

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

    您好、Phil、

    我曾尝试从第三方网站订购、但尚未发货。 现在从 Prime 订购的另一件商品应该在周六供应。 感谢您的提示、亚马逊未显示在 Google 结果的第一页、因此我不想查看。

    我没有开发 USB 库、因此无法评论没有更好的 EP0支持的原因(如果有的话)... 但至少您找到了一种解决方法。 如果我想一个更巧妙的解决方案、我会告诉您。

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

    您好、Phil、

    好奇您是否已 将 EP1批量传输数据包大小从64字节修改为256或512?  此外、如果没有错误、可能 需要修改 USB 1.1 EP0描述符 (参数)以指示 USB2.0 握手。 不确定示例代码是否具有以下配置、尽管它可能会有所帮助。  

    /*将 EP_0/1 (RAM)输入/输出起始地址、0,64,576字节配置到 FIFO 中
    *必须在8字节边界上 EP_0为控制端口数据保留前16个字节。 *
    //MAP_USBFIFOConfigSet (USB0_BASE、USB_EP_0、0、USB_FIFO_SZ_64、USB_EP_DEV_OUT);
    MAP_USBFIFOConfigSet (USB0_BASE、USB_EP_1、64、USB_FIFO_SZ_512、USB_EP_DEV_OUT); //USB_EP_HOST_OUT
    MAP_USBFIFOConfigSet (USB0_BASE、USB_EP_1、576、USB_FIFO_SZ_512、USB_EP_DEV_IN); //USB_EP_HOST_IN
    
    //在端点 DMA 通道模式1中配置,通常用于传输
    *跨多个数据包,并且数据包之间不需要中断。
    *在端点 DMA 通道模式0中配置、通常用于传输
    *不跨越多个数据包或每个数据包需要 INT 时。 *
    MAP_USBEndpointDMAConfigSet (USB0_BASE、USB_EP_1、
    USB_EP_DEV_IN | USB_EP_DMA_MODE_0 | USB_EP_AUTO_SET | USB_EP_AUTO_REQUEST);
    /*为输出端点1配置 DMA 通道模式1 */
    MAP_USBEndpointDMAConfigSet (USB0_BASE、USB_EP_1、
    USB_EP_DEV_OUT | USB_EP_DMA_MODE_0 | USB_EP_AUTO_CLEAR);//USB_EP_AUTO_Request (EPN 主机)
    /*将 USB0输入/输出端点1配置为16-1023字节的数据包大小。
    * USB_EP_2、USB_EP_3、USB_EP_4、USB_EP_5、USB_EP_6、USB_EP_7 *
    MAP_USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、
    (USB_EP_MODE_BULK_|USB_EP_AUTO_SET|USB_EP_AUTO_CLEAR);/USB_EP_AUTO_Request (EPN 主机) 

     

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

    拉尔夫

    我没有修改 USB 库中的512个数据包大小。 我认为、当我们设置 USBLIB_FEATE_USBULPI = USBLIB_FEATE_ULPI_HS 时、所有这些都由库处理

    ui32ULPI = USBLIB_FEATE_ULPI_HS;//USB-HS、为高速设置 ULPI 选项
    USBDCDFeatureSet (0、USBLIB_Feature_USBULPI、&ui32ULPI);

    我的 Linux 控制台和 USB 分析器都指出、DK 电路板的 ULPI 端口以高速方式连接、数据包大小为512字节。

    在 usblib\dev\usbbbbbbbulk.c 的第1181行中、它检查 USBLIB_Feature_USBULPI == USBLIB_Feature_ULPI_HS、并使用高速描述符 g_pbulkConfigtorsHS。

    关于您所附的代码、样本代码中没有一个、我对添加它们以提高批量传输速度的内容和位置感到困惑。 目前、我的 DK 的 ULPI 端口的最高批量传输速率约为7.5Mb/s

    您是否已收到 USB3300板? 请帮助我设置 DMA 和 FIFO、以实现大约40Mb/s 的更高传输速率

    再次感谢。

    Phil

     

     

     

     

     

     

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

    Phil、您好、

    我有。 您能否向我发送您在项目上所做的工作? 如果需要、我可以私下从您那里获取。 这样可以节省大量时间、使其运行到可以添加 DMA 功能的程度。

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

    [引用 user="Phil Chu"]关于您所附的代码,[/引用]

    请注意、不是 Ralph 附加了此代码。    在设置 ULPI 模式和 调用 USBDBulkInit()之后、您可以将其添加到(USB_dev.bulk.c)中。  似乎认为 USB2.0 EP1-7可以支持1024个数据包大小、请务必进行检查。  Microsoft 批量 客户端也可以   通过 lmusbdll.lib 支持1024字节数据包。

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

    您好、Phil /BP101、

    关于 USB EP0、规范是将高速 EP0设置为 64字节。 不允许512字节 EP0配置。 电压。 只有超高速模式(TM4C 无法支持)在 EP0上具有512字节的规格。

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

    [引用 USER="Ralph Jacobi"]关于 USB EP0,规范是高速 EP0设置为 64字节[/引用]

    右键同意 TI 编码的 MS 驱动程序会忽略为 EP0设置的较大数据包大小。  但是、我指的是 EP1-7、其中发生批量或其他数据包传输 可能允许中断传输、 根据 USB2.0 知识库链接、数据包大小为1024字节。 还有  其他地方 提供  了有关最大数据包大小的通用信息、 挖掘 Web 链接似乎将 USB1.1和 USB2.0混合在一起、 文本无法 明确哪一个。    

    https://www.beyondlogic.org/usbnutshell/usb4.shtml#Bulk

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

    Ralph/BP101、

    附加的是我的 USB_DEV_BULK_HS 项目。 我的目标是以最快的速度(40Mb/s)将较大的文件(例如78KB 至10MB)从主机传输到器件的存储器。 在我的当前代码中、我向器件发送一个图像(采用 C 二进制的 PNM)文件、并将数据显示到 LCD、仅用于演示目的。 到目前为止、传输速率约为7.5MB/s

    我曾尝试过 BP101中的代码和 TivaWareTm外设驱动程序库用户指南 中的 DMA 设置代码,32.4.5节-使用集成 USB DMA 控制器-接收多个数据包。 但我没有看到任何数据被传输到用户数组。 传输速率仍然相同。 我还尝试了不同的 USB 缓冲器大小。 我将大小设置为78000、以便它适合我的图像数据。 我跳过了所有数据处理代码。

    我正在使用 Cypress FX3 Streamer Windows 应用程序来检查传输速率、因为我没有其他任何东西。 我将供应商和产品 ID 修改为 Cypress FX3、以便 Streamer 应用程序可以识别器件。

    我还使用了 LeCroy Mecury USB 分析仪来测量传输速率。 从512字节数据包到数据包花费了70 us。 即7.3Mb/s

    提前感谢您的所有帮助。

    Phil

    e2e.ti.com/.../usb_5F00_dev_5F00_bulk_2D00_HS_5F00_TI_5F00_20190730.zip

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

    Phil、您好、

    非常感谢这个项目、不幸的是、我今天没有太多时间来处理它、所以我还没有把它全部提出来。 将于明天再次更新。

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

    拉尔夫

    请注意、我将 USB3300的复位线路连接到 DK 电路板 PG1。 我以 PNM C 数组格式附加了 SPRAY 和 SpaceX 的映像二进制文件。 如果您设置 bulk_buffer_size = 81920、并将绘图线更改为 GrImageDraw (&g_sContext、g_pui8USBRxBuffer、0、0)、则当您将文件发送到电路板时、您将看到图像以彩色显示在 LCD 上。 您可能需要取消注释行 USBBufferInit(&G_sRxBuffer),以便再次发送映像。  如果您想尝试 Cypress FX3 Streamer 工具来设定传输速率的基准、请告诉我。

    我一直尝试不同的 DMA 设置、但我无法获取 DMA 来将数据传输到存储器。

    Thankse2e.ti.com/.../image.zip

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

    Phil、您好、

    是的,我看到了 PG1调整,我同意方便的引脚选择:)

    不幸的是、我在最后遇到了一个小问题、因为我设法使我的 DK 板崩溃、并且仍在尝试恢复它。 我仍在为如何实现这一目的而努力、但无论如何、需要备份并运行以进一步测试...

    我已经更详细地研究了 USB DMA 主题、并找到了有关 DMA 配置的以下说明:

    //
    //
    // uDMA 控制器使用的控制表。 此表必须与
    1024字节边界对齐//。 在此应用中、UDMA 仅用于 USB、
    //因此只需要前6个通道。
    ////
    *****************
    #if defined (__ICCARM__)
    #pragma DATA_ALIGINS=1024
    tDMAControlTable g_sDMAControlTable[6];
    #Elif defined (__TI_ARM__)
    #pragma DATA_ALIGN (g_sDMAControlTable,1024)
    tDMAControlTable g_sDMAControlTable[6];#DMACONTROLEST_CONTROL1
    
    (#DMACONTROL1 (#DMACONTROL1 (6_
    )(#DMACONTROL1 (#DMACONTROL1
    

    这是唯一使用的其他代码、基于此代码:

    //
    //启用 uDMA 控制器并设置控制表基址。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UDMA);
    ROM_uDMAEnable();
    ROM_uDMAControlBaseSet (g_sDMAControlTable); 

    不过、我需要在我的末尾测试这是否足以支持高速。

    我在考虑您的应用时考虑的另一件事是、我想知道图形部分是否增加了某种瓶颈。 最后、我打算使用简单的数据回送测试来测试速度、该测试旨在强调器件的传输能力。

    此外、在下一个 TivaWare 更新中、USB 库还针对高速 DMA 进行了一些修复、可能值得您添加、尤其是因为我将使用中的修复进行测试。

    我建议尝试添加这些修复程序(这要求您重新编译 usblib 以便正确编译它们)、并将 DMA 代码恢复到上面发布的基本设置、然后查看性能方面的变化。 修复方法包括在 UsbLib 中将最大数据包大小而不是64字节用作 DMA 传输的一部分、因此可以显著提高吞吐量。

    文件附于此处:

    usblib/usbdma.c

    e2e.ti.com/.../1856.usbdma.c

    usblib/host/hostenum.c

    e2e.ti.com/.../0743.usbhostenum.c

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

    拉尔夫

    我已注释掉所有这些图形调用、传输仍然相同。

    根据文档、TM4C129支持集成 USB DMA。 我们不应该使用 uDMA 吗?

    无论如何、我更新了这两个文件并重新编译了 usblib。 我添加了上面的代码来设置 uDMA、重新编译并运行、对传输速率没有帮助。

    问题是、在这个 DK 电路板上、我们应该使用集成 USB DMA 还是 UDMA?

    谢谢

    Phil

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

    Phil、您好、

    我的理解是、要使用集成 DMA、需要进行这些调用才能启用它、因为在集成时、它仍是核心 UDMA 外设的一部分、因此需要进行一些初始化。 但这不是我个人以前使用过的功能(它是制作 USB DMA 示例的待办事项、但我还没有使用它、因此现在已经优先级提高了)。

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

    您好、Phil、

    对您来说、我想我也使用更长的跳线达到了相同的下垂、我手头没有1英寸的跳线。 我使用的导线比其他导线短、但显然还不够。 除非您知道如何快速获得与您所找到的连接器类似的连接器、否则我需要了解如何安装小型电路板。

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

    拉尔夫

    通过私人聊天向我发送您的地址。 我将向您发送我的备用短电缆。

    我尝试了包括双缓冲在内的许多东西、都无法正常工作。

    谢谢

    Phil

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

    Phil、您好、

    感谢您的提议、但我已经提出了几个我有信心的解决方案的想法。 检查是否不是从亚马逊连接器快速购买的、哈哈。

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

    [引用 USER="Phil Chu"]根据文档、TM4C129支持集成 USB DMA[/引用]

     µDMA 远程 μ DMA 外设与 集成到 USB 控制器外设中的 DMA 相距遥远、 Tivaware 文本使我们相信本地 DMA。 回想一下  、USB 库中正在配置 USB0 DMA 控制 器的 BulkDevice 初始化内部调用、位于其中的某个位置。

    一些被认为 是 BulkDevice 传输的东西可能无法 以每秒40MB 的速度进行传输、这可能与  中断或等时 EP 模式一样。 似乎还记得 、批量传输速度有一个限制。 注意 HS 模式 建议为480Mbits/Sec、可处理 60MegaBytes/秒。   因此 、EP 配置必须针对 连接两端的端点进行正确配置、而不仅仅是控制 EP0。 "设备"一词似乎不会推断批量传输类型。

    //
    //
    //以下是可作为
    ui32Flags 参数传递给 USBHostEndpointConfig()和// USBDevEndpointConfigSet()的值。
    ////
    *****************
    #define USB_EP_AUTO_SET 0x00000001 //自动设置功能已启用
    #define USB_EP_AUTO_REQUEST 0x00000002 //自动请求功能已启用
    #define USB_EP_AUTO_CLEAR 0x00000004 //启用自动清除功能
    #define USB_EP_DMA_MODE_0 0x00000008 //使用模式0 #define
    USB_EP_DMA_MODE_1启用 DMA 访问 0x00000010 //使用模式1
    #define USB_EP_DIS_Nyet 启用 DMA 访问 0x00000020 //禁用的 Nyet 响应
    //高速批量和中断
    设备模式下的//端点。
    #define USB_EP_MODE_ISOC 0x00000000 //等时端点
    #define USB_EP_MODE_BULK 0x00000100 //批量端点
    #define USB_EP_MODE_INT 0x00000200 //中断端点
    #define USB_EP_MODE_CTRL 0x00000300 //控制端点
    #define USB_EP_MODE_MASK 0x00000300 //模式掩码
    #define USB_EP_SPEED_LOW 0x00000000 //低速(1.5兆位/秒)
    #define USB_EP_SPEED_FULL 0x00001000 //全速(12兆位/秒)
    #define USB_EP_SPEED_HIGH 0x00004000 //高速(480兆位/秒)
    #define USB_EP_HOST_IN 0x00000000 //主机输入端点
    #define USB_EP_HOST_OUT 0x00002000 //主机输出端点
    #define USB_EP_DEV_IN 0x00002000 //端点中的器件
    #define USB_EP_DEV_OUT 0x00000000 //设备输出端点 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从
    
    以下地址调用 DMA 配置:USBDCDInit(~~~~~~)
    
    //
    //初始化 USB DMA 接口。
    //
    G_psDCDInst[0].psDMAInstance = USBLibDMAInit (0); 

    确保 Class_in_129 存在于项目定义的路径和符号中。

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

    BP101、

    我还看到了 USB 初始化期间调用的 USBLibDMAInit()函数。 仍然无法获取 DMA 以将数据从 USB 端点1传输到存储器。

    非常确定批量传输支持60Mb/s、因为我的 Cypress FX3可以在批量传输模式下以45Mb/s 的速率向 Windows 主机发送和接收数据。

    Ralph、您的 DK 电路板是否已启动并运行、以便进行基本批量传输? 我被困在这里。

    谢谢

    Phil

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

    [报价用户="Phil Chu"]仍然无法获取 DMA 以将数据从 USB 端点1传输到内存

    EP1有两个流-您通过 DMA 将 DEV_IN 从目标传输到存储器、然后传输到主机? 相信 DEV_IN/OUT 是从控制端点的角度得出的。

     据说 DCD 缓冲区  通过    构建的一部分(USB_bulk_structs.c)在 EPN FIFO 和复合器件驱动程序之间进行楔形。

    [报价用户="Phil Chu"] Cypress FX3可以在批量传输模式下以45MB/s 向 Windows 主机发送和接收数据[/报价]

    如何确认 DMA 传输未发生、 您  自己从未确认过 DMA 传输。  也许 USB0外设 EPN DMA 状态下的 CCS 调试(持续刷新)子列表?     

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

    BP101、

    是的、这有点令人困惑。 我将 USB_EP_HOST_IN (=0)用于这些 DMA 设置。 我认为这是从主机 EP1和 DMA 向外接收数据到目标存储器的正确方法。

    连接的是我的 USB_dev_bulk.c 我添加了您之前建议的代码以及 TivaWareTm外设驱动程序库用户指南第32.4.5节中的 DMA 设置代码

    要验证 DMA 是否正常工作、我在 CCS 中进行调试、查看存储器地址0x20000000、数据从未改变。 以某种方式、集成的 USB DMA 从未被触发。

    尽管我设置并启用了集成的 DMA,但 Rxhander()始终被调用。 我希望 DMA 正常工作时、不需要处理数据接收事件。 您是否知道接收处理程序为何在 DMA 操作下仍处于活动状态?

    谢谢

    Phile2e.ti.com/.../usb_5F00_dev_5F00_bulk.c

    Phil

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

    [引用 user="Phil Chu"]您是否知道接收处理程序为何在 DMA 操作下仍处于活动状态?

    否、但我昨天发现  、TX/RX (EPN) DMA 模式需要最后一个配置。   您的代码中是否包含这些 DMA 指令?

    [引用 user="Phil Chu"]关于集成 USB DMA 从未被触发的具体情况

    USB0寄存器 DMA FIFO 应 指示 CCS 调试中的某种操作。 中断 文本 信息包已满结束(模式0)会触发 DMA 中断。 也许可以使用 EP1尝试模式1、看看 在这两种模式下、更改是否会在 USB0外设寄存器下产生任何 DMA 活动。

    /*将 DMA 通道0分配给 DMA 模式0中的端点1、4字突发、
    *启用中断并立即启用传输。
    *! 使用以下任一项设置传输方向:
    *! -\b USB_DMA_CFG_DIR_RX 选择一个从端点到存储器位置的 DMA 传输。
    *! -\b USB_DMA_CFG_DIR_TX 从存储器位置选择一个到端点的 DMA 传输。
    *! 以下两个可选设置允许应用程序立即执行
    *! 配置 DMA 通道时、启用 DMA 传输和/或 DMA 中断:
    *! -\b USB_DMA_CFG_INT_EN 会立即为此通道启用中断
    *! 无需添加对 USBDMAChannelIntEnable()的调用。
    *! -\b USB_DMA_CFG_EN 立即启用 DMA 通道、以便添加
    *! 无需调用 USBDMAChannelEnable()。*/
    MAP_USBDMAChannelConfigSet (USB0_BASE、0、USB_EP_1、
    (USB_DMA_CFG_BURST_4 | USB_DMA_CFG_MODE_0 |
    USB_DMA_CFG_DIR_TX | USB_DMA_CFG_INT_EN | USB_DMA_CFG_EN);
    

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

    [引用 user="Phil Chu"]您是否知道接收处理程序为何在 DMA 操作下仍处于活动状态?

    它可能 是 批量设备回显客户端的一部分。 您是否按原样修改或使用了批量器件回显项目? 如果 目标没有等待来自客户端的 RX 回显数据包、您是否通过(-e)启动 Win 客户端可执行文件?

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

    [引用 user="Phil Chu"]出于某种原因、USBPLL 必须设置为0。 是否有人知道原因?

    回想一下、读取 ULPI 外部 PHY 为 USB0提供时钟(无 PLL)、 确保通过示波器外部时钟 确实为60MHz。

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

    Phil、您好、

    我还没有运行 USB3300、简单的解决方案对我来说都不是很好、所以我需要绕线、但还没有时间完成这项工作。

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

    尊敬的 Ralph 和 BP101:

    感谢您的更新和信息。 我取得了一些进展。 我使用 CSS 检查所有与 DMA 相关的寄存器。 这些 DMA 函数对寄存器的实际作用并不令人困惑。 我已验证在 main()中的初始化例程之后寄存器 USBDMACTLn 和 USBRXCSRHn 是否正确设置。 我注意到、一旦 DK 电路板连接到主机、寄存器 USBDMACTLn 和 USBRXCSRHn 就会改变、并且 DMA 会被禁用。 我使用 HWREGB()进行硬编码,以将它们设置回正确的值,从而在连接事件处理程序中启用 DMA。 然后、我看到 USB 数据实际上被移动到我设置的存储器中。

    双缓冲寄存器 USBRXFIFOSZ 也存在同样的问题。 我也对这个进行了硬编码。

    在所有这些时间、当器件连接到主机时、我的设置代码基本上会被否定。

    问题是、当器件连接到主机时、为什么 USB 库低级函数会复位双缓冲和 DMA 使能位。

    谢谢

    Phil

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

    Phil、您好、

    上周我感到很烦、但本周我曾尝试研究 DMA 部分。 关于这一点、我实际上看不到我之前发布的 API 所做的正确配置。 似乎没有人生成任何专用的 USB DMA 示例、因此我将尝试并执行此操作、在此过程中、我将尝试了解正确的配置以及在连接到主机时配置过程中是否存在任何问题。

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

    拉尔夫

    希望您能有更多的时间来研究文献目录问题。

    为了使双缓冲有效、我必须向寄存器 RXFIFOSZ 写入0x16。 USBLib 函数仅将其设置为0x06。 位4需要为1。 没有用于设置该位的独立函数。

    HWREGB (USB0_BASE + USB_O_RXFIFOSZ)= 0x16;   //接收 FIFO 大小、双数据包缓冲、数据包大小512 USB_RXFIFOSZ

    此外、将寄存器 RXDPKTBUFDIS (偏移量0x340)设置为0或0xFE 对双缓冲没有影响。 为什么?

    要加快数据传输速度、需要禁用 Nyet。 我跟踪了 usblib 代码、发现我还必须在   USBDevEndpointConfigSet()中包含标志 USB_EP_MODE_BULK。  

    USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、USB_EP_DEV_OUT | USB_EP_AUTO_CLEAR | USB_EP_DIS_Nyet | USB_EP_DMA_MODE_1 | USB_EP_MODE_BULK);

    //这将 USBRXCSRH1设置为0xB8、 必须包含 USB_EP_MODE_BULK 才能禁用 ISO 传输

    或 HWREGB (USB0_BASE + EP_OFFSET (USB_EP_1)+ USB_O_RXCSRH1)= 0xB8;

    谢谢

    朱菲尔

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

    Phil、您好、

    我再也不能确定何时会这样做。 虽然我想在 TI 设计之外提高我们支持 USB HS 的能力、并澄清 USB DMA 功能、但坦率地说、USB DMA 非常复杂、几个小时内我无法再构建一个工作示例。 从我第一次提到这个例子以来、我一直在讨论这个例子、但由于实现这个例子并不简单、现在由于优先级更高的问题、这个例子一直在不断下滑。 我不知道何时可以承诺在此时完成这项工作。

    此外、我可以说、USB3300的 USB HS 启动将至少在11月才会启动、现在根本没有用于该级别调查的带宽。

    长期而言、我想让它启动并运行、并使用它提供一些吞吐量分析、因为这不是通过 USB HS TI 设计实现的。 然而,我们正处于一些非常关键的项目之中,调查不能优先于我的其他任务。

    我知道这条线程长度后、这是一个糟糕的答案、但我现在非常简单、现在很明显、我无法在合理的时间内将这个问题深入到我的日程中。

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

    拉尔夫

    好的、希望以后有时间处理、希望开发人员修复 USB 库。

    感谢您回来。

    Phil

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

    Phil、您好、

    挑战在于 USB 库的开发人员不再可用。 我是实际处理维护和任何错误修复的人。 但是、由于我没有编写、因此很难评估修复错误的正确方法、而这种方法不会带来更多的风险。 有些非常简单、但另一些则需要付出大量努力并进行测试。 跟踪不明确的根本原因(如此处所示)也会增加另一层复杂性。 从任何方面来说、这并不理想、但尽管如此、随着时间的推移、已经取得了一些改进(一些待发布的待发布文件、尽管与此无关)。

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

    您好、Ralph、

    感谢您提供信息。 现在、我将直接写入 USB 寄存器。

    难怪其他人在高速、DMA 和双缓冲模式下使用 TM4C129's USB。

    Phil

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

    [引用用户="Phil Chu"]想知道其他人是否在高速、DMA 和双缓冲模式下使用 TM4C129's USB。

    我的小公司感受到(两者)海报和供应商代理的痛苦。   然而、我们从未使用过(任何)'129器件。   (该细节超出了此主题)

    (可能)有用的是检查、"如果"和"如何"-其他/类似的 ARM Cortex M4供应商-参与了这一(或近)要求。    虽然各个供应商的实施可能会有所不同-因为源'IP'是 ARM -这种'多供应商调查'在我公司的成功中取得了成功、但"排除"(否则)通常是无法发现的 MCU 行为和机制!   (和-不止一次!)

    这通常不是:"轻松、快速或轻松"。   然而-作为一个水手-当在海上裂开并上水时-即使是最好的杯子也会变成"帆船代理"。

    还请注意、自从该供应商推出(现在-自豪地被称为"其他") MCU 以来、(很多)时间已经过去了-这"增加了可能性"、即(可能)-在新领域(对于更新的-"甚至命名"器件)进行搜索-可能会产生重要的见解...

    当天空变黑时,所有的水手都“保释”——风帆——“看不到任何土地”。   接近"危险"的情况(可能)要求做出独特的、甚至是间接的或不寻常的(对某些人)努力。   当然(有些)有重点的活动会被动地压倒一切、"等待自己的船只上足够的海、然后再算海量!"